为了审计而审计,原文发布已在奇安信社区发布:
https://forum.butian.net/share/402
工具:
Phpstrom、Seay源代码审计系统
步骤:
自动审计:
找到关键点,这是在后台部分的备份功能。
该点存在183行处,这三行代码的意思:
打开(fopen)storage目录下的backup目录的(filename)文件,并将内容(optput)追加到这文件里,然后关闭文件。
而请求的方式是由
system/library/request.php下的构造参数组成,并将数值放到clean方法进行循环,而且在46行的进行了htmlspecialchars实体化编码。
继续回到backup.php页面的backup方法,在124行对$table进行了一次判断,其判断的意思是要table参数=表名才能进行下一步。
getTables该方法存在
admin/model/tool/backup.php
继续回到backup.php页面的backup方法,第160行这里的(output )写入,这里的意思是将指定表名,以及内容进行拼接操作,而参数fields是指定表的所有字段内容。
到了这里,应该有的师傅想到了可以用存储xss进行写shell,这里说一下坑,前面也提起过,所有的请求都是通过了system/library/request.php的clean的方法,而该方法会一直将所有数组的键值进行循环直到所有的值都用htmlspecialchars函数过滤。
寻找利用方式:
首先备份一份下来,看看内容有什么,以及什么后缀,这里的备份默认是日期时间,sql后缀的,而且这里也是我们可控的点。
导出来后,文件内容是这样的,导出指定表所有的字段参数内容,仅限于INSERT 语法,这里就好办了,既然是INSERT 语法那就改参数呗。
改成带有shell的sql语法:
然后上传该恶意文件并恢复,然后再进行导出.php后缀的文件,导出完成后就直接访问
http://127.0.0.1/system/storage/backup/2.php。
可以通过百度搜索opencart直接下载源码
本文始发于微信公众号(亿人安全):某开源商城代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论