LOB nightmare -> xavius
ID : nightmare
Passwd : beg for me
접속해서 ls 명령어로 파일을 확인합니다.
으악 복잡합니다.
일단 주소의 상위 2바이트가 \x08, \xbf 이면 종료, library 영역도 막고 있는 것 같은데, leave, ret으로만 검사하고 상위 2바이트가 \x40이여도 상관 없는 것 같습니다.
그리고 overflow가 발생하는 부분을 보면, fgets로 받고 있는데, stdin을 인자로 전달합니다.
그럼 stdin을 찾아봅시다. stdin에는 우리가 전달한 값이 남아 있을 것입니다.
gdb로 열어보겠습니다. 그리고 main에 break point를 걸고 stdin을 확인해보겠습니다.
stdin을 보면 이렇게 있고, 이제 입력을 하기 위해 다시 *main+26(fgets()가 끝난 후)에 걸고 실행해보겠습니다.
이렇게 입력할 수 있게 나오는데, 저는 A를 여러 개 입력했습니다.
다시 stdin을 확인해보면,
값이 바뀌어 있습니다.
하나하나 확인해보면,
여기에 제가 입력해준 문자열이 들어가 있는 것을 확인할 수 있습니다.
다시 코드로 돌아가보면, while문으로 “\x90\x90”이 나올 때까지 반복하니까,
payload : (python –c ‘print “\x90\x90” + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + “\x90”*17 + “\x01\x50\x01\x40”’; cat) | ./xavius
가 되는데 0x40015000으로 payload를 전달해 주지 않은 이유는, ‘\x00’을 만나면 payload가 끊겨서 전달 되기 때문입니다.
그럼 공격해보겠습니다.
exploit!
감사합니다.
'System&Write up > LOB' 카테고리의 다른 글
LOB succubus -> nightmare Write up (0) | 2017.11.14 |
---|---|
LOB zombie_assassin -> succubus Write up (2) | 2017.11.13 |
LOB assassin -> zombie_assassin Write up (0) | 2017.11.12 |
LOB giant -> assassin Write up (0) | 2017.11.09 |
LOB bugbear -> giant Write up (0) | 2017.11.08 |