php代码审计-文件安全(3)
本篇文章是接着上一篇文章衍生出来的漏洞,并且是一个高危
上篇说到,在lmxcms的c/admin/TemplateAction.class.php文件中存在文件读取漏洞,并且可以将读取的文件修改并提交
1 |
|
1 |
|
我们可以看到在这里有一个file::put
搜索一下put或者其他编辑器直接看一下声明,就能转到put函数
1 |
|
这段代码是一个 PHP 类中的公有静态方法,用于将字符串 $data 写入指定文件 $path 中。
具体来说,这个方法使用 file_put_contents() 函数将 $data 内容写入到 $path 指定的文件中,并返回写入的字节数。如果写入失败,则使用 rewrite::js_back() 方法返回一个 JavaScript 弹窗提示信息,内容为 ‘请检查【’.$path.’】是否有读写权限’。
file_put_contents
file_put_contents() 函数是 PHP 内置的一个文件操作函数,用于将字符串写入指定文件中。它的语法如下:
1 |
|
其中,$filename 是要写入的文件名,可以是相对路径或绝对路径;
$data 是要写入到文件中的数据,可以是一个字符串、一个数组或者一个可迭代对象(例如 Iterator 或 Traversable);
$flags 是可选参数,用于指定写入方式和处理方法,例如在原有内容后面追加、锁定文件等;$context 是可选参数,用于传递上下文信息。
如果写入成功,则返回写入的字节数,否则返回 false。需要注意的是,在写入文件之前,必须确保该文件存在并且具有正确的写权限。如果文件不存在,则会尝试创建它。如果文件已经存在,并且没有设置覆盖标志,则会抛出一个 E_WARNING 错误。
需要特别注意的是,file_put_contents() 函数会一次性将所有数据写入到文件中,并在写入过程中锁定文件。因此,如果要写入的数据量比较大,建议考虑使用流式写入或其他更高级别的文件操作方式,以减小系统负载和避免内存占用过多问题。
editfile函数中
settemcontent要设置为真,进入if语句中,并且传递filename参数来确定文件名,temcontent来确定传递的文件内容
来组合一下
get:
http://127.0.0.1:8081/lmxcms1.4/admin.php?m=Template&a=editfile&dir=
post:
settemcontent=1&filename=test.php&temcontent=
我们这里的dir为空,那么按理来说应该会存放在template文件夹下面(上一篇已经说了$this->config[‘template’]的值),那么提交数据
现在这个文件夹下面没有文件,只有文件夹
发现这里出现了我们提交上去的文件
ok这个1day就审计到这里