level 13

2020. 9. 8. 15:57

 

48번째의 글자가 '\xbf'가 되는 것을 검열하네요.

이는 스택 전체를 못쓴다고 봐야죠.

이로써 공유 라이브러리를 사용해야겠다고 어느정도 유추가 가능하죠.

 

그렇다면 공유메모리를 어떻게 써야할까요?

상단에 힌트가 있습니다.

바로, RLT이죠.

RLT 기법이란 Return-to-libc로 NX bit 즉, 스택에 쉘코드를 삽입하고 이를 악용하는 것을 우회하는 기법입니다.

 

공유 라이브러리에서 system 함수가 있는지 확인해보죠.

 

 

0x40058ae0이 공유 라이브러리에 있는 system 함수의 주소네요!

이제 system 함수에 "/bin/sh"문자열이 있는지 확인해보겠습니다.

 

 

소스코드를 직접 작성해 메모리 값을 하나씩 늘려가며 "/bin/sh\x00"과 일치하는지 확인하고 일치하다면 주소를 던지도록 했습니다.

 

0x400fbff9에 있다네요.

 

이제 RET 주소에 system 함수 주소를 넣고, system 함수 뒤에 실행할 함수가 없으니 dummy(4바이트)를 넣고, system 함수의 인자로 문자열 "/bin/sh\x00"을 넣을 것이니 위에서 구한 주소를 넣겠습니다.

 

payload를 작성하겠습니다.

"A"*44 + "\xe0\x8a\x05\x40" + "AAAA" + "\xf9\xbf\x0f\x40"

 

성공!

'[▒] 보안 > LOB' 카테고리의 다른 글

level 15  (0) 2020.09.08
level 14  (0) 2020.09.08
level 12  (0) 2020.09.08
level 11  (0) 2020.09.08
level 10  (0) 2020.09.07

BELATED ARTICLES

more