y0u_bat

[Pwnable.kr] ascii_easy - 33pt 풀이 본문

System/[Pwnable.kr]

[Pwnable.kr] ascii_easy - 33pt 풀이

유뱃 2015. 7. 25. 22:52


[Pwnable.kr] ascii_easy - 33pt 풀이 



ulimit이 힌트네여.





자 0x80000000부터 4098바이트만큼 메모리 맵핑해줍니다

저 mmap의 리턴값은 0x80000000 입니다.

여기서  뒤에보면  do while문 나오는데 v6은 0x18F보다 작아서 IF문은 패스

v3 = (v7+v6) 인데  v7는 아까 mmap의 리턴값이고 v6은 0이므로 v3은 0x80000000 입니다.


*v3 = getchar(); 로  v3의 주소로 문자열을 입력받네여,  즉  0x80000000 주소에 입력 할 수 있습니다.



is_ascii 함수가 32~127까지 16진수만 입력가능하게 해줍니다.





마지막 메인의 리턴보면 vuln으로 되어있는데 여기서 취약점이 일어납니다.


dest라는 부분을 buffer 라고 생각합시다

ebp-a8 이므로




버퍼는 168바이트네여, 0x80000000 부분은 저희가 입력가능한 부분이니 

 172바이트만큼 그냥 덮고 그뒤에 ret을 조작해서 eip를 컨트롤 하면 될거같네여.




그냥 break걸고 a 172개  마지막에 b 4개 넣어보았습니다


정상적으로 eip가 42424242로 나오는걸 볼 수 있습니다.




info reg 해서 보면 eip가 42424242로 변한걸 볼 수 있네요.



이제 rtl로 하기위해 시스템 주소를 구하는데


alsr이 걸려있어서 주소가 다르게 나옵니다. 


여기서 alsr를 풀 수 있는 명령어가 있는데요.


ulimit -s unlimited으로 alsr 를 풀 수 있습니다.




그리고 이렇게 시스템주소를 구할 수 있습니다.

/bin/sh를 코딩해서 구할려고 하는데 환경상 안된다고 하네여,


gdb에서 find &system, +999999, "/bin/sh" 쳐서 /bin/sh 주소를 구할 수 있습니다.





이제 그 구한거 토대로 공격하면 플래그가 출력 됩니다.


클리어

'System > [Pwnable.kr]' 카테고리의 다른 글

[Pwnable.kr] shellshock - 1pt 풀이  (0) 2015.07.30
[Pwnable.kr] input - 4pt 풀이  (0) 2015.07.30
[Pwnable.kr] cmd1 - 1pt 풀이  (0) 2015.07.25
[Pwnable.kr] lotto - 2pt 풀이  (0) 2015.07.25
[Pwnable.kr] blackjack - 1pt 풀이  (0) 2015.07.25
Comments