LOB - assassin -> zombie_assassin

해킹대회 문제 풀이 연습장소

Moderator: amesianx

Post Reply
KSH
Posts: 24
Joined: Thu Jul 21, 2016 5:39 pm

LOB - assassin -> zombie_assassin

Post by KSH » Tue Aug 09, 2016 8:15 pm

assassin에서는 Fake EBP를 배웁니다.

1.홈 디렉터리
1.png
1.png (4.1 KiB) Viewed 482 times
2.소스코드
소스.png
소스.png (12.55 KiB) Viewed 482 times
40byte char형 buffer를 선언하고
인자수가 2개보다작거나 argv[1][47]이 \xbf또는 \x40이라면 프로그램을 종료합니다.

strncpy함수를 이용하여 buffer에 argv[1]의 내용을 48byte만큼 복사합니다.
※그래서 리턴주소 이후에는 값을 입력할 수 없습니다.
마지막으로 buffer의 내용을 출력한 뒤 종료합니다.

소스코드의 힌트를 보면 FEBP를 볼 수 있는데 FEBP는 문자 그대로 ebp를 속여서
ret을 수행할 때의 esp를 변경하여 변경된 esp의 주소에 들어있는 명령을 실행시키는 방법입니다.
ret은 leave를 수행하기 전의 ebp+4의 주소를 참조하기 때문에 두 번의 leave를 실행시켜야
메인함수의 SFP를 변경하여 ebp를 속이는 것이 가능합니다.
leave명령을 두번 실행시키고 싶다면 return부분에 leave의 주소를 입력하면 됩니다.

zombie_assassin의 쉘을 얻기 위한 준비물은 다음과 같습니다.
1.leave주소
2.Fake EBP를 이용해 바꿔치기할 주소
3.system함수 주소
4.system함수에 넣을 /bin/sh의 주소


3.분석
<leave>
disas_main1.png
disas_main1.png (19.3 KiB) Viewed 482 times
disas_main2.png
disas_main2.png (25.41 KiB) Viewed 482 times
main+3부분을 보면 esp에 40바이트만큼 할당합니다.
main+159부분에 leave의 주소가 있습니다. 0x080484df입니다.

<가짜 EBP>
stack.png
stack.png (13.02 KiB) Viewed 482 times
buffer의 시작점은 0xbffffaa0입니다. buffer-4지점을 Fake ebp로 사용하면
esp+4지점은 buffer의 시작점이 되기때문에 buffer-4부분을 SFP에 덮어주면 됩니다.
<system>
system.png
system.png (2.1 KiB) Viewed 482 times
system함수의 주소는 0x40058ae0입니다.

</bin/sh>
bin_sh.png
bin_sh.png (6.9 KiB) Viewed 482 times
/bin/sh의 주소는 0x400fbff9입니다.

준비물을 모두 갖추었습니다.
1.system : 0x40058ae0
2./bin/sh : 0x400fbff9
3.Fake ebp: 0xbffffabc
4.leave : 0x080484df
페이로드를 구성하면 다음과 같이 됩니다.
|system| + | system함수의 리턴(dummy) | + | /bin/sh | + | \x90 * 40 | + | Fake EBP | + | leave |



4.공격
Fake EBP부분이 바뀌는지 계속 segmentation fault를 출력하면서 꼬장을 부려서
brute force로 풀었습니다.

<exploit.py>
exploit.png
exploit.png (11.69 KiB) Viewed 482 times
이 프로그램은 작성된 페이로드를 가지고
for문을 돌려 0xb7 부터 0까지 -1의 증가량으로 반복하여
fake ebp부분을 바꿔주면서 공격을 실행합니다.
그리고 i의 값을 출력합니다.

이때 for문에 0xb7을 준 이유는 ff부터 주었을 때 동작이 멈추면서 프로그램이 심술을 부리는데,
그 때마다 i의 값을 1씩 내려서 계속해서 프로그램을 진행시킨 겁니다.

<exploit.py 실행>
attack.png
attack.png (14.56 KiB) Viewed 482 times
zombie_assassin의 쉘과 패스워드를 얻었습니다.

Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests