PHP代码审计-文件读取漏洞容易被忽略的点!

admin 2024年5月20日20:28:49评论19 views字数 1918阅读6分23秒阅读模式

得现在师傅们如果针对文件读取/下载漏洞的挖掘,黑盒情况下就是找可以下载文件,读取文件的功能点,进行抓包,替换"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 循环遍历数组,并将每行内容输出。

其实还有一个小功能点可以去读取文件,我放一张图师傅们就懂了。这是一个互联网已经公开的漏洞,但是这个读取的点很奇特,所以拿出来给大家看一下。

PHP代码审计-文件读取漏洞容易被忽略的点!

是的没错,这个漏洞的成因,就是通过curl功能点实现了文件读取功能。
大部分师傅碰到curl,基本都当成和wget类似的下载的功能点,其实curl也可以进行文件读取。

PHP代码审计-文件读取漏洞容易被忽略的点!

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命令

PHP代码审计-文件读取漏洞容易被忽略的点!

注:如有侵权请后台联系进行删除

觉得内容不错,请点一下"赞"和"在看"

PHP代码审计-文件读取漏洞容易被忽略的点!

原文始发于微信公众号(嗨嗨安全):PHP代码审计-文件读取漏洞容易被忽略的点!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月20日20:28:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP代码审计-文件读取漏洞容易被忽略的点!http://cn-sec.com/archives/2758937.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息