聊聊安全測試中如何快速搞定Webshell

WEB安全漏洞中,與文件操作相關(guān)的漏洞類型就不少,在大部分的滲透測試過程中,上傳文件(大、小馬)是必不可少的一個流程,然而各種各樣的防火墻攔截了文件上傳,遂整理文件操作相關(guān)漏洞的各種姿勢,如有不妥之處,還望各位斧正,小東感激不盡。

最近在代碼審計某項目的時候發(fā)現(xiàn)了一個文件上傳漏洞,但是在生產(chǎn)環(huán)境測試的過程中,各種各樣的“狗”和“盾”都給攔截了,徒有漏洞,沒法兒利用,所以整理整理,殺狗破盾,沖沖沖!

0×01 尋找文件操作相關(guān)漏洞

文件操作相關(guān)的漏洞主要有:任意文件上傳、任意文件下載、任意文件刪除、任意文件讀取四大類(簡單理解:增刪改查)

1.1 文件上傳:

文件上傳功能在大多數(shù)的?web?應(yīng)用中都存在,比如用戶頭像上傳,文章內(nèi)容的圖片、視頻、音頻、附件上傳,一些?CMS?系統(tǒng)上傳模版文件,數(shù)據(jù)庫備份文件,插件文件等地方。

而文件上傳,在大部分的滲透測試進一步利用漏洞的時候是比較關(guān)鍵的一步。

一般來說,對于那些未校驗文件類型的上傳操作的,可以直接上傳我們的小馬、大馬文件。

有校驗文件后綴、類型的,如果是黑名單的方式,比如某?WAF?設(shè)置了不允許上傳文件后綴為php,asp,apsx的文件,根據(jù)PHP的一些可解析后綴比如:php3?、php4、php5、phtml等等

黑名單:

array(

? ? ".php",".php5",".php4",".php3",".php2","php1",

? ? ".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",

? ? ".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",

? ? ".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",

? ? ".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",

? ? ".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",

? ? ".aShx",".aSmx",".cEr",".sWf",".swf"

);

1.2 文件刪除:

任意文件刪除漏洞,一般來講刪除文件是一個比較危險的操作,都是管理員才具有的權(quán)限,所以對于文件的刪除必須有權(quán)限的控制,當然如果沒有做好CSRF防護,同樣是可以以管理員權(quán)限進行操作。

任意文件刪除漏洞一般存在于:用戶刪除文章的附件(圖片、壓縮包等),管理員刪除文章(同時關(guān)聯(lián)刪除文章附件),管理員刪除插件,刪除模版,刪除數(shù)據(jù)庫備份文件等操作的地方。

1.3 文件修改:

文件修改其實比較少見,其實現(xiàn)的一般思路是刪除原文件,替換成新上傳的文件。

修改文件的操作,在后臺的操作還比較常見,比如寫后臺修改web應(yīng)用的配置文件config.php(配置網(wǎng)站標題、關(guān)鍵詞、數(shù)據(jù)庫等等),常見于安裝CMS系統(tǒng)時候的引導(dǎo)操作流程,所以會經(jīng)常去尋找類似于install.php等的文件,檢查是否存在重裝漏洞。

1.4 讀取/下載文件:

在一個web應(yīng)用中,對于網(wǎng)站有風險的文件下載操作的是用戶可以讀取或下載任意文件。

常見存在此漏洞的地方比如:網(wǎng)站程序備份文件、數(shù)據(jù)庫備份文件,文件備份(index.php.bak),.git,VM?文件修改的時候異常退出的而生成的?.swp備份文件等

0×02 如何突破上傳文件

實際的環(huán)境中,很少有直接可以任意上傳文件的漏洞(常見于前端限制),小東根據(jù)個人經(jīng)驗整理出主要的三大類突破文件上傳攔截的方法:

操作說明前端禁用JS前端限制,禁用JS,去除input標簽的accept屬性修改文件后綴抓包工具,修改文件后綴為黑名單之外的后綴修改文件后綴修改文件后綴為index.jpg.php修改文件后綴%00截斷,比如index.php%00.jpg修改文件后綴文件名末尾添加::$DATA,windows會把::$DATA之后的數(shù)據(jù)當成文件流,不會檢測后綴名.且保持::$DATA之前的文件名修改文件后綴在linux主機上的文件名大小寫敏感,文件后綴大小混寫修改文件后綴在文件末尾添加空格,黑名單的方式?jīng)]法兒檢測修改文件類型抓包工具,修改Content-Type:image/png修改文件后綴修改文件名shell.php:.jpg,上傳后會得到一個空的文件shell.php,然后修改文件名為shell.>>>或者shell.<、shell.<<<、shell.>><再上傳,重寫shell.php換行解析Apache2.4.0~2.4.29換行解析漏洞%0d,%0a(CR,LF(回車,換行))未知后綴名Apache配置AddHandler application/x-httpd-php .php不當導(dǎo)致未知后綴腳本執(zhí)行后綴名正則替換這種需要構(gòu)造,使得替換之后的可以重組成為新的可執(zhí)行后綴,雙后綴名繞過修改上傳路徑name="upload_file/1.php%00"; filename="shell.jpg"條件競爭條件競爭刪除/重命名文件時間差繞過圖片馬copy code.jpg/b + shell.php/b hourse.jpg圖片重繪包含馬做一個就好了上傳壓縮包配合PHP偽協(xié)議、文件協(xié)議等讀取執(zhí)行本地文件數(shù)據(jù)庫寫文件UDF,select查詢輸入

實戰(zhàn)示例:

來自Upload-labs漏洞演示靶場的文件上傳的第九關(guān)示例,一看到下面這種情況,是不是感覺完全沒思路?

<?php

$is_upload = false;

$msg = null;

if (isset($_POST['submit'])) {

? ? if (file_exists(UPLOAD_PATH)) {

? ? ? ? $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");

? ? ? ? $file_name = trim($_FILES['upload_file']['name']);

? ? ? ? $file_name = deldot($file_name);//刪除文件名末尾的點

? ? ? ? $file_ext = strrchr($file_name, '.'); // 獲取文件的后綴名,如`.php`

? ? ? ? $file_ext = strtolower($file_ext); //轉(zhuǎn)換為小寫

? ? ? ? $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

? ? ? ? $file_ext = trim($file_ext); //首尾去空

? ? ? ? if (!in_array($file_ext, $deny_ext)) {

? ? ? ? ? ? $temp_file = $_FILES['upload_file']['tmp_name'];

? ? ? ? ? ? $img_path = UPLOAD_PATH.'/'.$file_name;

? ? ? ? ? ? if (move_uploaded_file($temp_file, $img_path)) {

? ? ? ? ? ? ? ? $is_upload = true;

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? $msg = '上傳出錯!';

? ? ? ? ? ? }

? ? ? ? } else {

? ? ? ? ? ? $msg = '此文件類型不允許上傳!';

? ? ? ? }

? ? } else {

? ? ? ? $msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';

? ? }

}

?>

面對這樣的情況,該怎么上傳繞過吶?各位不妨先思考一下!

小東看到這樣的情況是這樣思考的:

1、什么操作系統(tǒng)?

2、如何繞過函數(shù)?

環(huán)境是自己的windows筆記本,那么通過windows系統(tǒng)特征可以嘗試正則繞過,文件流::$DATA,大小寫繞過,換行截斷等方式。

如果是linux,就有文件大小寫,換行截斷,解析文件上傳等等方式。

分析上面的文件:黑名單限制文件后綴,限制文件后綴大小寫,去除::$DATA,限制上傳.htaccess,難道這個題是假的?

這里可以嘗試二次上傳的方式,借助windows平臺的正則匹配規(guī)則:

如下符號在windows平臺下等效果

" => .

> => ?

< => *

首先隨便上傳一個shell.php,使用抓包工具(比如:burpsuite),將文件后綴修改為:shell.php:.jpg

此時,會在upload目錄下生成一個名為shell.php的空文件:

然后,修改數(shù)據(jù)包文件名為:shell.<<<,這里在move_uploaded_file($temp_file, '../../upload/shell.<<<')類似與正則匹配,匹配到.../../upload/shell.php文件,然后會將此次上傳的文件數(shù)據(jù)寫入到shell.php文件中,這樣就成功寫入我們的小馬了。

試試能不能執(zhí)行吶?

在這里,對于文件上傳的練習(xí)靶場,非常推薦Uplaod-labs這個項目:https://github.com/c0ny1/upload-labs。

0×03 如何突破文件刪除

任意刪除文件漏洞常存在于刪除頭像、文章附件、CMS?管理插件、模版和數(shù)據(jù)庫備份刪除的地方,同時文件重寫的地方,通常來說這些刪除的操作是需要嚴格控制用戶權(quán)限和資源所有對象,因為刪除文件的操作,沒有太多的可研究性,其主要在于尋找類似在?PHP?中的?unlink()?函數(shù)或者文件覆蓋的一些函數(shù)(沒有重命名),對于有權(quán)限驗證,不好利用的?CSRF?漏洞配合一起利用

實戰(zhàn)示例:

來自?emlog 6.0.0?博客?CMS,emlog?官方于不久前更新了?6.0.0?的正式版,小東在之前審計過測試版代碼,不知道修復(fù)了沒?不清楚的老鐵,可以先瞅瞅這篇文章:《[代碼審計]Emlog 6.0 Beta》。

安裝:

正常的下載安裝到本地環(huán)境,直接來到?/admin/data.php?文件,這個文件內(nèi)的操作是用作數(shù)據(jù)庫的備份、導(dǎo)入和刪除,如下代碼,可以看到,通過構(gòu)造參數(shù)可以直接刪除?$_PSOT['bak']?參數(shù)傳遞的文件名,這就形成了一個刪除任意文件的漏洞(不過這個CMS做了全局的文件訪問權(quán)限控制,此文件僅限管理員可以訪問,配合?CSRF?可以實現(xiàn)任意文件刪除?。?/p>

那么Payload:

POST http://www.test.com/admin/?act=dell_all_bak

data:bak=../index.php

構(gòu)造一個?CSRF?網(wǎng)頁,發(fā)到各大?emlog?QQ交流群、論壇等等去,emmmm~(太危險,不建議這樣做,別說是我說的)。

那么修復(fù)的方法,自然是加上一個?TOKEN?身份判斷!

最后補充?emlog6.0.0?下載地址:點我下載。

0×04 如何突破文件修改

文件修改,是針對已存在的文件進行修改,比如有的?CMS?可以實現(xiàn)模版的在線編輯,利用一些規(guī)則特性可以直接寫入木馬。當然還有備份文件,配置文件。

常見于一些配置文件沒有過濾參數(shù),使得單雙引號被閉合,寫入小馬到配置文件。

修改文件的時候,可能會遇到一些權(quán)限不足,沒法兒寫入的問題,一般會尋找images,uplaod,logs,runtime等可以執(zhí)行寫操作的目錄(尋找方式也比較簡單,查看文章圖片的?URL,用戶頭像?URL等等)

此漏洞就不做實戰(zhàn)演示了,基本都是配合上傳文件使用,比如某些?CMS?提供插件安裝,插件市場有修改模版文件的一些插件,emmm~,好心幫助站長安裝一個,然后編輯一下,Webshell就到手了!

0×05 如何突破文件讀取

文件的讀取,包括列目錄、讀取任意文件內(nèi)容、任意文件包含、任意文件下載。任意文件讀取/包含漏洞常常在實戰(zhàn)場景有非常大的用處,在尋找文件讀取漏洞的時候,需要根據(jù)網(wǎng)站的類型及CMS去代碼審計或者尋找?indexOf?列目錄尋找可能存在任意文件包含讀取的特殊文件,比如一些:?file.php,download.php

通過御劍掃描,掃描到一些數(shù)據(jù)庫、源碼備份文件,來一次代碼審計,那就賺大發(fā)了。

找到任意文件包含的漏洞,配合上傳圖片馬,就可以輕松實現(xiàn)?Getshell,想想就覺得美滋滋~

在文件包含上,可能存在一些無法讀取,文件名限制等等,該如何處理吶?

實戰(zhàn)示例

簡單構(gòu)造了一個典型的文件包含漏洞,簡單看看利用?PHP?偽協(xié)議怎么玩兒?

<?php

//D:/server/htdocs/test/test.php

// 文件包含

@$file = isset($_GET[file])?$_GET['file']:'test.php';

include_once($file);

echo "這個文件可以包含任意的文件(⊙o⊙)哦!";

?>

在PHP中,include?和?require?兩個文件包含函數(shù),將包含進來的代碼當作可執(zhí)行PHP代碼執(zhí)行,所以無論我們包含的文件格式后綴是什么,都會當作?PHP代碼來執(zhí)行,即使是一個?txt?文件。

在?upload/?文件夾下情況:

其中?shell.zip?是一個內(nèi)含名為?shell.php?的?zip?格式壓縮包。

開始利用

第一種:讀取?hourse.jpg,通過圖片馬包含執(zhí)行,$_GET?是一個超全局變量,所以在包含的?shell.php?文件也可以接收參數(shù)?x執(zhí)行:

Payload:?http://www.test.com/test.php?file=upload/hourse.jpg&x=phpinfo()

第二種:文件協(xié)議讀取

其前提是得知道網(wǎng)站應(yīng)用的絕對路徑(物理路徑):

Payload:?http://www.test.com/test.php?file=file://D:/Server/htdocs/test/upload/hourse.jpg&x=phpinfo()

結(jié)果和上圖一樣,只是地址欄鏈接不一樣。

第三種:壓縮包文件讀取

依然需要知道壓縮包文件的絕對路徑:

Payload:?http://www.test.com/test.php?file=zip://D:/Server/htdocs/test/upload/shell.zip%23shell.php&x=phpinfo())

第四種:phar://相對路徑運行PHP文件

當我們想要運行自己的PHP文件,該咋做吶?通過文件包含(include,require這類函數(shù)),首先構(gòu)造一個這樣的文件,將?webshell.php?添加到壓縮文件?.zip,然后將壓縮包后綴名改為.jpg反正合法的文件后綴即可(一般的操作是這樣的,當只能上傳圖片的時候),最后使用phar://按照相對路徑讀取并執(zhí)行文件。

Payload:http://www.test.php?file=phar://upload/shell.jpg/shell.php?x=phpinfo()

第五種:讀取源碼

當我們沒法兒上傳文件,但是又想讀取文件的源碼來尋找別的漏洞從而進一步利用該怎么做吶?同樣的利用?php://filter/?協(xié)議可以實現(xiàn),要注意的是,因為編碼問題,一般我們會將讀取的文件先?Base64?編碼一下輸出:

Payload:http://www.test.com/test.php?file=php://filter/read=convert.base64-encode/resource=upload/shell.php

補充PHP偽協(xié)議的知識:《PHP之偽協(xié)議深入理解

0×06 簡述突破攔截

某些網(wǎng)站總是存在一些“看門狗”和“XX盾”,攔截可謂是相當?shù)谋┝?。對于攔截來說,分兩種:一種是基于文件后綴,另一種是基于文件內(nèi)容。

1.基于文件后綴:

一般來說,在配置都是白名單的方式,我們可以?Fuzz?測試一下,可上傳文件類型,再配合上述說到的方法,嘗試去繞過。

2.基于文件內(nèi)容:

這種方式一定程度上減少了誤報,根據(jù)一些表哥的經(jīng)驗:程序開發(fā)人員會犯什么錯誤,這樣的錯誤我們是否可以利用起來?比如?preg_replace('/e','',"$GET['x']"),反序列化,遠程讀取文件,本地文件包含,小馬混淆加密加殼,關(guān)鍵詞拆分替換組合等等,還有很多很多的騷思路,歡迎各位表哥一起探討。

0×07 總結(jié)

總結(jié)了文件操作方面的漏洞,以及單純從文件操作上來獲取SHELL,但真實的環(huán)境,我們常常是多種類型的漏洞組合利用,比如SQL注入寫文件,命令執(zhí)行漏洞權(quán)限高可不直接就拿下服務(wù)器了么,服務(wù)器存在進程溢出的程序,直接?MSF?給打過去,之后就是內(nèi)網(wǎng)一把梭。滲透測試,是一次充分活躍思維,跳出局限的腦力活動,不斷總結(jié)經(jīng)驗,才會不斷進步,共勉!

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

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

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,715評論 0 5
  • 文件上傳漏洞 常見的漏洞分類服務(wù)器配置不當導(dǎo)致文件上傳開源編輯器存在上傳漏洞本地文件上傳限制可以上傳被繞過服務(wù)器端...
    二潘閱讀 17,456評論 2 3
  • title: upload-labsdate: 2019-04-17 09:20:52tags:- 文件上傳cat...
    Miracle778閱讀 11,693評論 0 8
  • 一套實用的滲透測試崗位面試題,你會嗎? 1.拿到一個待檢測的站,你覺得應(yīng)該先做什么? 收集信息 whois、網(wǎng)站源...
    g0閱讀 5,159評論 0 9
  • 接兒子下課,好久沒有吃重慶小面,商量著去過過癮。此時,爸爸來電話,表示也有興趣,要求打包一份送去辦公室。娘倆先后吃...
    dingzhijia閱讀 125評論 0 0

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