본문 바로가기

WARGAME/hackerschool ftz,lob

[BOF 원정대] assassin-> zombie_assassin(level 16)

fake ebp를 사용하면 되는 문제로 buf에는 쉘코드를 적고 ebp에는 buf의 시작주소를 적는다.

마지막으로 ret에 leave 주소를 적어주면 다음과 같이 동작하게 된다.

AT&T 기준으로 1. mov ebp, esp         2. pop ebp 두가지 기계어 연산을 하게되는데, 

1번에서 현재 ebp를 esp에 넣어 esp의 위치를 ebp가 가리키는 곳으로 옮긴다. 

low

[buf]  <-현재 esp  

[sfp]

[ret] 

high


그 뒤 pop ebp를 하고 그 다음의 코드를 읽는다.

low

[buf]    -> buf만 확대    ->   buf =    [AAAABBBBCCCCDDDDEEEE....]   이 때 pop ebp를 하였으므로 B의 첫 글자가 esp위치이다.

[sfp]

[ret]

high


따라서, buf의 4바이트 뒤에 쉘코드를 담고 ebp에는 buf의 시작주소를, ret에는 leave주소를 써주면 공격할 수 있다.





공격 코드