본문 바로가기

CTF/Write-up

Pico ctf 2014 rop1

바이너리의 소스 코드는 이렇고 환경에서는 ASLR이 걸렸있다.

ROP를 이용해서 풀 수 있지만 다른방법으로 풀 것이다.



우선 strcpy() 함수는 char * strcpy(char * dest, const char * src); 이렇게 구성되어 있는데 strcpy() 함수의 리턴 값은 문자열 dest에 대한 포인터이다. 그럼 이 함수를 이용해 문제를 풀어보자 (NX가 걸려있지 않기 때문에 쉘코드가 가능하다. )


버퍼가 64이기 때문에 72개를 넣어주면

strcpy() 때문에 EAX에 버퍼 값을 가리키는 포인터 주소가 들어간다.

EIP도 90909090으로 되어있다.


현재 EAX레지스터 값을 실행할 수 있으면 쉘코드를 실행할 수 있다는 소리다. 근데 ASLR이 걸려있는데 어떻게 실행할까 call %eax라는 가젯을 이용하면 된다!


call %eax를 호출하게 되면 현재 EAX값을 EIP에 복사하여 실행할 수 있다.

가젯을 구했으니


페이로드 구성은 [쉘코드][나머지 버퍼][eax함수 호출] 직접해보면

현재 EAX는 쉘코드를 넣은 상태라 \x31\c0\50\68을 가르키고 있다.


함수 내부로 들어가게되면 EIP가 EAX와 같아 진걸 볼 수 있다.


이렇게 쉘코드를 실행할 수 있게된다.










'CTF > Write-up' 카테고리의 다른 글

codegate 2013 vuln200  (0) 2017.01.08
Layer7 ctf 2015 IhaveLongDariYouHaveShotDari  (6) 2017.01.07
Pico ctf 2014 rop1  (0) 2017.01.05
NEWSECU CTF Write-up  (0) 2017.01.01
holyshield ppc  (0) 2016.12.24
holyshield BrokenPiano  (0) 2016.12.22