저번 문제와는 달리 fake ebp와 같은 공격을 막기 위해 strcpy를 수행한 후 sfp를 다시 복원시켜주는
프로그램입니다.

[아래 그림과 같이 참조]
그래서 생각한 것이 ret영역을 코드영역에 있는 leave 명령어의 주소로 넣어서 풀면 될 것 같은 느낌이 들어서 봤더니
sfp가 랜덤스택이기 때문에 무작위로 바뀌게 됩니다.
그래서 전에 풀었던 문제처럼 ret영역 이후 부분을 [got영역의주소-8]와 [execl+3]의 주소를 쌍으로 엄청 많이 집어넣고
while문으로 반복실행시키면 언젠간 맨 처음에 스택에 껴있는 sfp가 [got영역의 주소-8]값과 일치하게 되지 않을까 하고 생각했지만
execl의 주소는 아스키아머가 걸려있기 때문에 못하게 된다…

 

 

어쩌다 발견했는데 restore된 sfp값은 buf의 시작주소와 항상 360차이가 난다.
즉 buf의 시작주소가 0xfef88bb0이면 sfp는 0xfef88d18이라서 두 값의 차는360이 된다.

 

이 점을 힌트로 하여 payload를 작성하면
buf[264] + 더미값(sfp) + &leave + "A"*88 + &(got-8) + &(execl+3)
(여기서 "A"*88을 하는 이유는 buf의 시작주소와 sfp의 차이는 360이기 때문에 그 차이를 맞춰주기 위해서.)


./dark_eyes `python -c 'print "A"*264+"BBBB"+"\xb8\x84\x04\x08"+"A"*88+"\x88\x96\x04\x08"+"\x23\x57\x7a"'`

그리고 실행될 파일명을 심볼릭 링크해야함. 그 부분은 전에 풀었던거 ㄱㄱ

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

[Fedora4] dark_stone -> cruel  (0) 2015.11.28
[Fedora3] evil_wizard -> dark_stone  (0) 2015.11.25
[Fedora3] hell_fire -> evil_wizard  (0) 2015.11.23
[Fedora3] dark_eyes -> hell_fire  (0) 2015.11.22
[Fedora3] gate -> iron_golem  (0) 2015.11.19

+ Recent posts