跟着Y4师傅学代码审计-iWebShop开源商城系统
最后更新时间:
写在前面
这个是代码审计练习分析的第八篇文章,阳了几天断更了,最近恢复了些状态开始重新计划
这篇分析iWebShop5.9
漏洞分析
整个命令执行的利用需要结合SQL注入、任意文件删除和命令执行拼接漏洞
后台添加一个商户账户
访问商户对应的商家管理页面,url如下
添加一个普通的商品,方便后续SQL注入的利用
然后回到后台利用经典的数据库备份功能,备份关键的三个表iwebphp.iwebshop_goods_photo_relation
iwebphp.iwebshop_goods_photo
以及 iwebphp.iwebshop_goods
下载好备份sql文件,我们可以在其上增加一些利用信息,关注iwebshop_goods_photo
表的img字段,我们在其上可以选中任意文件。另外需要注意id之间的关系
之后回到后台数据库恢复功能,上传该修改的sql文件,并执行
我们根据路由信息定位至tools.php
中的localUpload
方法,其中可以看到,对上传的文件调用parseSQL()
方法
里面只判断了一个文件前两个字符,由于第一行为DROP xxx,因此默认就会执行后续语句,逐个语句去调用query()
方法
可以看到其间没有任何过滤字符就执行了SQL语句,造成SQL注入漏洞
1 |
|
之后我们回到商家管理平台,商品列表这里点击删除操作,id对应为5
根据路由定位至seller.php
的goods_del方法,这里也是获得到参数后调用del()
跟进后可以看到,其首先会从goods_photo_relation
表中根据id=5查出关联信息,进一步由于我们这里关联了photo_id,因此从goods_photo
查出了img字段的内容,也就是任意文件的地址,我们这里为了进一步构成RCE,因此选择install/install.lock
文件,后面可以看到会对img的内容调用unlink
方法
在unlink方法中我们便看到了删除文件操作,期间也未对文件名作过滤,这里便构成了任意删除文件漏洞
删除lock文件之后再去访问install/index.php
便可造成系统重装,我们看看这里的利用
根据路由定位至install/include/function.php
方法,其中install_sql()
方法中看到,这里有个create_config()
,写入配置文件的操作,而且写入对象还是php文件,是否可以利用呢?跟入该方法
可以看到也是没过滤就直接写入updateData变量内容,而该变量的值又由用户传入。只不过这里写入的时候是按照数组键值对的方式写入,应该是该框架针对配置项的一种安排方式。我们可以通过提前闭合语句的方式来造成RCE,毕竟是PHP文件,这里只要稍稍测试来闭合一下引号和括号即可
这里可以看到config/config.php
文件中的格式,我们根据前面数组的括号数量提前闭合即可
payload
1 |
|
需要再配合文件删除漏洞删掉config下的.htaccess文件
再去访问config/config.php