write-ups/CTF

codegate 2017 EasyMISC write up

2017. 12. 13. 22:40

친구가 코드게이트 2017 문제 중에 EasyMISC 문제가 엄청 쉽다고 꼭 풀어보라고 해서 풀게 되었는데, IDA 헥스레이를 꾸역꾸역 보면서 20분만에 문제를 풀었다. 만약에 안티 헥스레이가 있었다면 굉장히 어려운 문제가 되었을 것 같지만, 헥스레이로 소스를 보면 거의 답이 나와있는 수준이라서 쉬웠다. 


Analyse

 


BabyMISC 바이너리를 아이다에서 헥스레이 한 상태로 보면 이렇게 나온다. 참고로, level1, level2, level3 함수는 내가 네이밍 해준 것이다. 


일단 level1 함수 내부를 헥스레이해서 분석해보자 



유저의 인풋을 받고, s 에 저장된 값을 decoded_string이라는 변수에 넣는다. 그리고 유저이 인풋을 다시 base64 디코드한다음 기존의 undecoded string의 길이와 같음을 확인하고, 유저의 입력이 s와 같은지 확인하고, 유저의 인풋을 base64 decode한 값이 s의 디코드 값과 같은지 확인한다.  


이것은 base64 trick 을 이용해서 쇼쇽 하면 된다. 관련 링크



Exploit

#!/usr/bin/python
# coding: utf-8

from pwn import *
from time import sleep
from base64 import b64encode

p = process("./BabyMISC")

print p.recv(1024)
level1 = "TjBfbTRuX2M0bDFfYWc0aW5fWTNzdDNyZDR5Oij="

p.sendline(level1)
print "[*] sended '{0}'".format(level1)
sleep(0.3)

print p.recv(1024)

input1 = "YS==="
input2 = "YT=="

p.sendline(input1)
print "[*] sended '{0}'".format(input1)
print p.recv(1024)
p.sendline(input2)

sleep(0.3)

print p.recv(1024)

cmd = raw_input("CMD $ ")
p.sendline(b64encode(cmd))
sleep(0.3)
print p.recv(1024)

샤삭하면 플래그가 나온다. 





'write-ups > CTF' 카테고리의 다른 글

codegate 2017 babypwn write up  (1) 2017.12.18
plaid ctf 2013 ropasaurusrex write up  (0) 2017.12.14
DIMICTF xml_parser write up  (0) 2017.12.10
화이트햇 콘테스트 familiar write-up  (0) 2017.11.07
Kiwi CTF write up  (0) 2017.10.16