오늘!! 6월 1일 9시부터 Facebook CTF 2019가 시작되었습니다 ..만
약 8시간동안 포너블 한 문제도 못 풀었어요!!! ㅋㅎㅎㅎㅎㅎㅎㅎㅎ
overfloat 푸는 과정을 로그처럼 남길까 합니다..
#context_log.level = "debug"
06/01
0908i : irc 품 +1 point
~1200i :
trace, strace로 overfloat 분석, fgets를 이용했기 때문에 overflow가 발생하지 않는 것에서 1차 충격
~1500i :
열심히 pdisas chart_course 삽질.. 옆에서 같이 풀던 친구가 음수값을 집어넣으면서 세그멘테이션 오류 띄움
~1600i :
무한삽질 끝에 [1] ~ [7] 중 하나라도 입력에 - 기호가 붙으면 main의 리턴이 터지는 것을 확인
~1700i :
굳이 음수가 아니더라도 LAT[7]에 값이 있으면 세그가 뜸
main의 리턴을 csu로 돌려서 풀려고 함. LAT[7]에 특정 값을 집어넣었더니 main의 리턴이 변조되는 것 확인
1시간동안 순도 100% 삽질로 LAT[7]에 0.00000000000000000000000000000000000000000005881224e5 구해서 넣으니 리턴에 400a76 (csu gadget) 가 들어감!!! 정말 긴 싸움이었음
뒤에 e5는 atoi 함수 사용법 찾다가 이렇게도 표현해요!! 란 설명 보고 생각없이 썼는데 어쩌다보니 구해짐 ㅎ..
0.000000... 때려박고 리턴값 보고 크면 다시 0 몇 개 더 넣고 얼추 비슷해지면 하나하나 다 때려봄.. 이렇게 푸는 게 아닌 것 같은데 쨋든 해봤음
다 된 줄 알고 좋아했는데 변조되는건 chart_course의 ret이 아닌 main의 ret임.. 스택에 값을 집어넣을 방법이 없음 ㅠㅠ
~1900i : 밥먹고 연병장에서 야구하다 옴 ㅎㅎ 싸지방 복귀
~2000i : LAT[7], LON[7]에 값을 안 줘도 세그가 뜸.. 흐으으으ㅡㅇㅁ... 8번 이상 가면 다 뜨는듯
~2100i : 뭔지 진짜 모르겠음 점호청소하러감
~2400i : 리턴에 원샷가젯을 때리면 어떨까 생각함. ruby 설치 중 계속 오류떠서 삽질.. one_gadget 설치 성공
06/02
0400i : 챔스 ㅎㅎ..
0847i : LAT[7], LAT[8], LAT[9].. 에 값을 넣었더니 메인의 ret 이후 스택에 차곡차곡 쌓임!!! 이걸로 libc_base를 leak할 수 있을지 의문임
1125i : Return to csu를 사용하기로 함. 스택에 미리 저장해야 한다면 이게 제일 편할 것 같아서..
ㅋㅋㅋㅋㅋㅋㅋ 수작업으로 구해버렸다 ㅎㅋㅎㅋㅎㅋㅎㅎ
LAT[7] LAT[8].... 여기다가 저 소수들을 때려박음 == main의 리턴부터 하나하나 저 값들이 박힘
결국 puts(puts@got)란 괴랄한 함수를 return to csu를 통해 만들어냄
leak 성공 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 이제 다 끝난듯
1133i : 끝난 줄 알았는데 libc_start + offset을 스택에 쌓아줄 방법이 없음 삽질도 못함 주소가 계속 바뀌니깐
1202i : ROP 공식인 write -> read -> got overwrite 에서 영감을 받아 puts -> fgets -> got overwrite를 시도해봄
정말 완벽한 return to csu 코드라고 생각했음!! 근데 fgets에서 세그오류뜸....... 왜......
write와 다르게 저거 안되나봄 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ 다른 방법 생각해봐야겠음
1256i : fgets가 안 된 이유를 찾은 것 같음
rdx에 인자를 stdin으로 줬는데 (gdb 상에 0x602090이라 찍혀있었음) 그게 문제가 되는 듯
그럼 어케푸냐..
13:10i : 주소 leak할 때 스플릿을 잘못 해서 뒤에 0이 하나 더 붙음 ㅋㅋㅋ 수정했지만 여전히 안됨
1556i : 구글링 해봤는데 fgets의 첫 번째 인자가 포인터라고 함 나는 fgets@got를 그냥 때려박았으니 안되는 것 같음 다른 방법이 생각이 안난다.....
1630i : 표준 입력만 받을 수 있다면 다 될텐데.. 하는 마음에 main의 리턴을 chart_course의 시작으로 돌려보았다.
저 괴상한 구문에서 멈췄다.
IDA로 보면 어떻게 보일지 궁금하다ㅠㅠ
후기
대회가 끝난 후 write up을 찾아보니.. 파이썬에 binascii를 import해서 푸는 문제였어요..ㅎㅎㅎ..
수작업으로 열심히 소수 구했는데 ㅠㅠㅠㅠㅠㅠㅠ 허무하긴 합니다....
그래도 한 문제를 2일동안 미친듯이 뜯어보고 페이로드 때려보고 하면서 얻은 것이 많았습니다!!
메모리 leak은 쉬운 것이 아니라는 것과 생각보다 찾아야 할 가젯과 요소요소가 많다는 것 등등..
바로 다음 주에 미국 중고등학생들이 참여하는 HSCTF가 시작되는데요!!
저도 슬쩍 한 번 껴보겠습니다 ㅎㅎ 한 문제라도 풀 수 있기를..!!!
'CTF_Write_UP > etc' 카테고리의 다른 글
[heap] 힙 영역을 ARABOZA (0) | 2019.07.20 |
---|---|
[Pwn] 나도 만들어봤다, 쉘코드!! (0) | 2019.07.14 |
[BOF] rop 알았으면 srop까진 해야지 (ver. 32bit) (0) | 2019.05.18 |
2019 DEFCON 살짝.. 건드려보기 (0) | 2019.05.12 |
[Stack, BOF] 스택프레임과 버퍼 오버플로우 뜯어보기 #1 (0) | 2019.04.25 |