这个周末和某个三观炸裂的"人"对线之后,我发现现在的安全圈子貌似已经脱离了技术至上的宗旨,所以我们WebSec会在每一周的周一发布一篇以代码审计为题材的文章,来供大家学习。
我觉得现在师傅们如果针对文件读取/下载漏洞的挖掘,黑盒情况下就是找可以下载文件,读取文件的功能点,进行抓包,替换"filename",使用../../或者绝对路径来定位想要读取的文件。
白盒情况下就是全局搜索读取文件的几个函数,之后判断所要读取的文件参数是否可控等等等.....
我先描述一下文件读取的几个函数和用法,再来给大家分享一下容易被忽略的点。
file_get_contents()
file_get_contents() 函数用于读取整个文件为一个字符串,并返回该字符串。以下是 file_get_contents() 函数的基本用法:
$fileContent = file_get_contents('path/to/file.txt');
echo $fileContent;
上述代码将读取指定路径下的文件 "file.txt" 的内容,并将内容存储在变量 $fileContent 中。然后使用 echo 语句将文件内容输出到浏览器。
fread()
file_get_contents() 函数用于读取整个文件为一个字符串,并返回该字符串。以下是 file_get_contents() 函数的基本用法:
$handle = fopen('path/to/file.txt', 'r');
$data = fread($handle, 1024);
fclose($handle);
echo $data;
在上面的示例中,首先使用 fopen() 函数打开了一个文件 "file.txt",并传递了 'r' 参数,表示以只读模式打开文件。然后使用 fread() 函数读取文件内容,并将读取的数据存储在变量 $data 中。最后使用 fclose() 函数关闭文件句柄。
readfile()
readfile() 函数用于读取文件内容并输出到浏览器或保存到文件。以下是 readfile() 函数的基本用法:
readfile('path/to/file.txt');
上述代码将直接输出指定路径下的文件 "file.txt" 的内容到浏览器。
fgets()
fgets() 函数用于从打开的文件中逐行读取数据。以下是 fgets() 函数的基本用法:
$handle = fopen('path/to/file.txt', 'r');
if ($handle) {
while (($line = fgets($handle)) !== false) {
echo $line;
}
fclose($handle);
}
在上述示例中,首先使用 fopen() 函数以只读方式打开文件 "file.txt" 并返回文件句柄 $handle。然后通过 while 循环和 fgets() 函数逐行读取文件内容,直到文件末尾。每次 fgets() 调用都会将文件指针移动到下一行,并返回当前行的内容(包括换行符)。最后使用 fclose() 函数关闭文件句柄。
file()file()
函数可以用于将整个文件读取为数组,每一行作为数组的一个元素。以下是 file()
函数的基本用法:
$lines = file('path/to/file.txt');
foreach ($lines as $line) {
echo $line;
}
在上述示例中,file() 函数会将文件 "file.txt" 的内容读取到数组 $lines 中。每一行文本都作为数组的一个元素。然后可以使用 foreach 循环遍历数组,并将每行内容输出。
其实还有一个小功能点可以去读取文件,我放一张图师傅们就懂了。这是一个互联网已经公开的漏洞,但是这个读取的点很奇特,所以拿出来给大家看一下。
是的没错,这个漏洞的成因,就是通过curl功能点实现了文件读取功能。
大部分师傅碰到curl,基本都当成和wget类似的下载的功能点,其实curl也可以进行文件读取。
curl file:///etc/passwd 即可读取文件
要注意的是,这个可不是PHP的伪协议,在 curl 命令中,file:///etc/passwd
表示要获取本地文件系统上 /etc/passwd
文件的内容,并将其输出到标准输出。这里的 file://
是 curl 支持的一种协议,用于读取本地文件。类似地,curl 还支持许多其他协议,如 HTTP、FTP 等。
所以这个漏洞的payload大家肯定也弄得出来
$poi = input('post.poi'); //post获取poi的值
$url = trim($poi); //对输入的poi的值去空
$info = curl_init(); //开启一个curl命令
靠谱星球
WebSec从2023年11月28日加入第一位师傅,截至2024年5月19日已经加入了465位师傅,WebSec内部微信群已经是一个大家庭,从一开始的POC批量脚本开始,再到0day、1day的公开,又加入了各种实战众测报告、代码审计报告、安全工具分享等等,逐步完善网络安全的各个领域。
WebSec漏洞更新列表(加下方微信可优惠)
加入方式
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...