본문 바로가기

Security/Pwnable

[Pwnable] HackCTF Gift 문제 풀이

 

이번에 풀어볼 문제는 https://ctf.j0n9hyun.xyz/ 에 Pwnable 문제인 Gift문제이다.

 

보호 기법은 NX-bit가 적용되어 있다.

 

파일을 실행해 보면 위와 같이 입력을 2번 받는다.

 

ida로 main을 분석해 보면 

- binsh과 system변수의 주소 값이 출력

- fgets로 s변수에 128bytes까지 표준입력을 받음

- printf함수로 s변수 출력(%c, %d와 같은 포맷 지정자 지정이 없으므로 FSB취약점 존재)

- gets함수로 표준 입력을 받음(bof취약점 존재)

 

이 파일을 실행 시킬때 마다 system의 주소값이 변경되는 것으로 보아 ASLR이 적용되어 있고 ASLR과 NX-bit를 우회 할 수 있는 ROP기법을 이용해 exploit 하는 문제 같다. 

 

payload는 다음과 같다

gadget

A를 88번 채운 후 pop ret 의 가젯의 주소는 0x80483ad를 사용했고 gets함수를 호출해 pr(pop ret)을 이용해 binsh_address를 호출 하고 system_address 함수를 이용해 binsh를 gets함수의 bof를 일으킨다.

 

***가젯 명령어  ROPgadget --binary gift | grep pop

 

다음과 같이 flag를 얻었다.

 

문제를 풀고 난 다음 살펴보니까 Received 0x4 bytes라는 문장으로 보아 p.sendline으로 aaa와 같이 3byte를 보내는 것이 아니라 4byte를 보내야 했던 것 같다.