-
[Hack CTF - Pwnable] Basic_BOF #2 Write UpCTF/Pwn 2019. 8. 16. 15:37
사실 엄청나게 쉬운 문제인데 너무 돌아갔었다.
헛수고한 시간이 화가나서 라업을 적기로 했다.
기드라로 확인한 파일의 메인 함수이다.
fget으로 입력을 받고
그와 상관없이 sup 함수를 실행하기 위해서 함수 포인터를 사용하였다.
sup 함수는 간단한 문구 출력 함수이다.
그래서 이 함수 포인터 스택값을 조작하기 위해서 개고생을 했다.
쉘코드를 버퍼에 입력해서 버퍼 값 주소를 찾아서 넘겨주려 했는데 사실 더 간단한 법이 있었다.
출제자님께서 저처럼 고생하지 말라고 사실 친절하게 shell 함수를 만들어두셨었다.
하.. 이렇게 떠먹여주고 있엇다니;
그래서 당장 이 함수의 주소값을 알아봤다.
shell 함수의 어셈블리어 코드의 시작 주소는 0x0804849b이다.
그래서 이 주소를 fget 다음에 오는 sub을 불러오는 call을 사용할 때의 스텍값을 변조해주면 끝
gdb를 보면 call eax에서 가져오는 주소와 fget에서 사용하는 주소의 차이 값을 구할 수가 있다.
ebp-8c값에 입력값을 담아서 fgets함수를 호출했다.
그리고 ebp-c에 있는 주소를 eax에 담아 call을 실행한다.
이 두개의 차는 80으로 10진수로 보면 128이다.
딱 버퍼 크기만큼 주어져있다.
그러므로 우리는 128만큼 버퍼를 더미값으로 채우고 그다음 4바이트로 주소값을 조작해주면 된다.
따라서
(python -c 'print "A"*128 + "\x9b\x84\x04\08"'; cat) | nc 접속주소
해서 쉘을 따와서 플래그값을 찾으면 끝!
'CTF > Pwn' 카테고리의 다른 글
해커스쿨 FTZ - Clear 후기 (0) 2019.08.14 FTZ - level17 풀이 / 환경변수 등록을 이용한 BOF (0) 2019.08.13 FTZ - level8 / 파일 용량을 이용한 find 검색 활용 (0) 2019.08.12