php代码审计ctf隐藏了目录,CTF中PHP代码审计小tips-7
閱讀次數(shù)
MiniProject_PHP_Code_audit-7 Writeup
整體邏輯:
xctf中的一道題目
考點(diǎn):
接收參數(shù)中不能出現(xiàn)某一字符,file_get_contents()使用可以 php:// 偽協(xié)議繞過(guò)。
file_get_contents — 將整個(gè)文件讀入一個(gè)字符串 file_get_contents() 函數(shù)是用于將文件的內(nèi)容讀入到一個(gè)字符串中的首選方法。如果操作系統(tǒng)支持,還會(huì)使用內(nèi)存映射技術(shù)來(lái)增強(qiáng)性能。 但是接收參數(shù)中不能出現(xiàn)某一字符,file_get_contents()使用可以 php:// 偽協(xié)議繞過(guò) 。
php://input可以讀取沒(méi)有處理過(guò)的POST數(shù)據(jù)。相較于$HTTP_RAW_POST_DATA而言,它給內(nèi)存帶來(lái)的壓力較小,并且不需要特 殊的php.ini設(shè)置。php://input不能用于enctype=multipart/form-data
Coentent-Type僅在取值為application/x-www-data-urlencoded和multipart/form-data兩種情況下,PHP才會(huì)將http請(qǐng)求數(shù)據(jù)包中相應(yīng)的數(shù)據(jù)填入全局變量$_POST
測(cè)試代碼:class Read{
public $file = 'php://filter/read=convert.base64-encode/resource=f1aG.php';
}
$file = new Read;
echo serialize($file);
結(jié)果為序列化字符串【如圖】:
Writeup:
借鑒大佬的思路,
這個(gè)題目考察的是php封裝協(xié)議和lfi【圖一為index.php,圖二為class.php】
這個(gè)題目首先要突破的是:if(isset($user)&&(file_get_contents($user,’r’)===”the user is admin”)) 如何讓file_get_contents($user,’r’)===”the user is admin”呢? 答案是用php的封裝協(xié)議php://input,因?yàn)閜hp://input可以得到原始的post數(shù)據(jù)【圖三】:
然后我到了:include($file); //class.php 這一步 這個(gè)很明顯是暗示你去讀取class.php 如何讀呢?這里用到php的另一個(gè)封裝協(xié)議:php://filter 利用這個(gè)協(xié)議就可以讀取任意文件了 利用方法:php://filter/convert.base64-encode/resource=index.php 這里把讀取到的index.php的內(nèi)容轉(zhuǎn)換為base64的格式【圖四】
但是class.php把我們引入到另一個(gè)地方,就是利用反序列化來(lái)讀取flag文件 于是我們構(gòu)造反序列化的參數(shù)【反序列化后續(xù)再講】: http://localhost/ctf/index.php?user=php://input&file=class.php&pass=O:4:"Read":1:{s:4:"file";s:57:"php://filter/read=convert.base64-encode/resource=f1aG.php";} 這里也是利用php://filter來(lái)讀取flag文件【圖五,圖六】
參考鏈接:
總結(jié)
以上是生活随笔為你收集整理的php代码审计ctf隐藏了目录,CTF中PHP代码审计小tips-7的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 三元前驱体废水除镍钴锰
- 下一篇: 禁止文件夹 icloud_如何更改Win