1. 程式人生 > 其它 >攻防世界Web之fakebook

攻防世界Web之fakebook

開啟題目,得到一個網頁,包含一個表格、兩個按鈕。

習慣性先檢視網頁原始碼,但沒發現有效資訊。


<!doctype html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Fakebook</title>

    <link rel="stylesheet" href="css/bootstrap.min.css" crossorigin="anonymous">
<script src="js/jquery-3.3.1.slim.min.js" crossorigin="anonymous"></script>
<script src="js/popper.min.js" crossorigin="anonymous"></script>
<script src="js/bootstrap.min.js" crossorigin="anonymous"></script>

</head>
<body>
<div class="container">
    <h1>the Fakebook</h1>
        <p>Share your stories with friends, family and friends from all over the world on <code>Fakebook</code>.</p>

    <table class="table">
        <tr>
            <th>#</th>
            <th>username</th>
            <th>age</th>
            <th>blog</th>
        </tr>
        <tr></tr>
    </table>
</div>
</body>
</html>

開啟login.php,是一個登入頁面,隨手試了幾個弱口令和SQL注入,沒有成功,檢視網頁原始碼,也沒有提示,估計問題不在這。

開啟join.php頁面,隨便輸入一點東西提交,都提示錯誤:Blog is not valid.,說明對blog欄位的格式有要求,從字面和題目資訊上理解,就是分享你的故事,應該沒什麼限制才對。

後來想了一下,可能是需要提交一個部落格地址,嘗試提交http://127.0.0.1http://localhost,均提示錯誤。

猜測可能過濾了127.0.0.1localhost關鍵字,隨手試一下www.baidu.com,此時提示成功。

再次開啟首頁,發現多了一條記錄。

點選使用者名稱111

,開啟一個頁面,看到the contents of his/her blog,興奮了一下,不會是ssrf吧?

直接檢視原始碼,發現是空的base64

直接上DNSLOG試試,也不行。到這裡思路就斷了,重新整理了一下,發現被繞進去了,問題不一定在blog欄位,這個使用者名稱和年齡是有回顯的,猜測是XSS或二次注入,直接排除XSS,試一下注入吧。

好傢伙,直接報錯,把Web路徑報出來了,明顯是SQL注入。

嘗試了一下插入已存在的使用者名稱時會提示使用者名稱已存在,說明後臺會先在資料庫中查詢使用者是否存在,可以用圖中的SQL注入繞過檢測。

猜測後臺SQL語句如下:

# 檢查使用者是否存在
SELECT * FROM user WHERE username='';

# 插入新的記錄
INSERT INTO user SET username='',passwd='',age='',blog='';

但是插入資料時,注入的使用者名稱會被直接寫入資料庫,說明寫入的時候用SQL預編譯,無法注入。

直接用sqlmap跑,沒發現flag,把users表dump出來,data這一列明顯是PHP序列化,但是隻能控制其中的字串,不能控制整個反序列化字串,所以不能使用反序列化。

使用sqlmap的--sql-shell引數,進入SQL互動,嘗試執行SQL語句,把原始碼dump出來分析,沒分析出啥。

select load_file('/var/www/html/index.php');
select load_file('/var/www/html/user.php');
select load_file('/var/www/html/db.php');
select load_file('/var/www/html/view.php');

隨手試一下flag.php,居然成功了。

select load_file('/var/www/html/flag.php');