기대를 안고 문제를 풀기 시작했습니다.
main 함수 소스입니다.
String을 봤는데 “/bin/sh”도 있습니다.
막 찾던 도중, 여기서 쓰이는 걸 발견했습니다.
다시 main함수를 보면 buf를 0x30(48)byte만큼 잡고, (_QWORD *)buf + 2 즉, 16byte를 건너 뛰고 그 자리에 어떤 함수의 주소를 넣습니다.
welcome to RootCTF! 를 출력해주는 함수입니다.
(_QWORD *)buf + 2를 호출하면 저 함수가 실행될 것입니다.
read로 사용자에게 buf에 입력을 받고, Y를 받으면 다시 (_QWORD *)buf + 2를 호출합니다.
read로 받을 때 0x64(100)byte를 받기 때문에, (_QWORD *)buf + 2를 조작할 수 있어요!
(_QWORD *)buf + 2를 아까 찾은 system(“/bin/sh”)를 실행해주는 함수의 주소로 바꿔주고 Y를 입력해주면, 쉘이 실행될 것입니다.
(_QWORD *)buf + 2를 변조하기 위해서 앞에 8*2만큼 더미를 주고, 쉘을 실행해주는 함수로 변조해줬더니 쉘이 따였습니다. cat flag로 flag를 읽어왔습니다.
FLAG{P0InT_2_pOiNt_2_PO1t3R!}
그리고 파이썬 스크립트도 짜봤습니다.
64bit이기 때문에 pack의 첫 번째 인자를 “<Q”로 줘야합니다.
아래 while문은 pwn tool의 interactive() 함수를 간단하게 구현한 코드인데, Nextline님께 도움을 받았습니다.
'System&Write up > CTF' 카테고리의 다른 글
[Pico CTF 2013] overflow4 (0) | 2018.01.17 |
---|---|
[Pico CTF 2013] overflow3 (0) | 2018.01.16 |
[Pico CTF 2013] overflow2 (0) | 2018.01.14 |
[Pico CTF 2013] overflow1 (0) | 2018.01.14 |
[Plaid CTF 2013] ropasaurusrex (0) | 2018.01.03 |