bin-overflow


일단 pwnable 바이너리가 나오면 무조건 IDA 로 살펴보는 습관을 들이자.



main함수의 내용을 IDA 를 통해 C로 출력한 모습이다.


read 함수를 통해 32byte를 입력받을 수 있게 해 놓았다.


[bp-4h] : ebp로 부터 4byte 만큼 떨어져 있다는 뜻이다.


그렇다면 gdb를 통해 확인해 보도록 하자.



r <<< $(python -c 'print"A"*20')


입력함수의 인자에 20byte를 채워보았다. 


나중에는 계산해서 넣어주어야 하지만 지금은 그냥 게싱을 한다 생각하자.


20byte를 채워주니 ebp와 eip 의 값이 모두 바뀐 것을 확인할 수 있었다.


그렇다면 16byte로 다시 채워보자.




ebp는 채워졌으나 eip가 바뀌지 않았다.


그렇다면 20byte를 덮어씌웠을때 eip까지 모두 덮인다는 것을 확인할 수 있다.


다시 IDA로 넘어가서 분석해보자.


system 함수가 있는것으로 보아 RTL 공격이 통할 것 같다.






그렇다면 flag를 출력해주는 문자열이 어딘가에 존재할 것이다. 찾아보자



"/bin/cat flag" 라는 문자열이 존재한다.



자 이제 공격 코드를 삽입해 보자. 


python -c 'print"A"*20 + "\x50\x83\x04\x08" + "AAAA" + "\x90\x85\x04\x08"' 


앞에있는 함수의 주소는 뒤에있는 주소를 인자로 받고 

"AAAA"라는 문자열을 리턴한다.




임의로 만든 flag 인 helloworld가 출력됬음을 확인할 수 있다.



※실습하기 전에 미리 flag 파일을 만들어 놓도록 하자~



'pwnable > 기타' 카테고리의 다른 글

songsari's prob2 (Command Injection)  (0) 2016.09.10
songsari's prob1 (MEMORY_LEAK)  (0) 2016.09.10
RTL 심화  (0) 2016.08.09
Format string  (0) 2016.08.09
echo is what?  (0) 2016.08.09

+ Recent posts