跟着Y4师傅学代码审计-iWebShop开源商城系统

文章发布时间:

最后更新时间:

写在前面

这个是代码审计练习分析的第八篇文章,阳了几天断更了,最近恢复了些状态开始重新计划

这篇分析iWebShop5.9

漏洞分析

整个命令执行的利用需要结合SQL注入、任意文件删除和命令执行拼接漏洞

后台添加一个商户账户

image-20221222162511626

访问商户对应的商家管理页面,url如下

image-20221222162600151

image-20221222162729280

添加一个普通的商品,方便后续SQL注入的利用

image-20221222162835289

然后回到后台利用经典的数据库备份功能,备份关键的三个表iwebphp.iwebshop_goods_photo_relation iwebphp.iwebshop_goods_photo 以及 iwebphp.iwebshop_goods

image-20221222163027447

下载好备份sql文件,我们可以在其上增加一些利用信息,关注iwebshop_goods_photo 表的img字段,我们在其上可以选中任意文件。另外需要注意id之间的关系

image-20221222163607211

之后回到后台数据库恢复功能,上传该修改的sql文件,并执行

image-20221222165823570

我们根据路由信息定位至tools.php中的localUpload方法,其中可以看到,对上传的文件调用parseSQL()方法

image-20221222171803655

里面只判断了一个文件前两个字符,由于第一行为DROP xxx,因此默认就会执行后续语句,逐个语句去调用query()方法

image-20221222172421246

可以看到其间没有任何过滤字符就执行了SQL语句,造成SQL注入漏洞

1
2
3
4
5
6
7
//执行SQL
function query($sql)
{
//创建数据库对象
$dbObj = IDBFactory::getDB();
$dbObj->query($sql);
}

之后我们回到商家管理平台,商品列表这里点击删除操作,id对应为5

image-20221222173520933

image-20221222173537058

根据路由定位至seller.php的goods_del方法,这里也是获得到参数后调用del()

image-20221222173906891

跟进后可以看到,其首先会从goods_photo_relation表中根据id=5查出关联信息,进一步由于我们这里关联了photo_id,因此从goods_photo查出了img字段的内容,也就是任意文件的地址,我们这里为了进一步构成RCE,因此选择install/install.lock文件,后面可以看到会对img的内容调用unlink方法

image-20221222174249405

image-20221222182406651

image-20221222182538739

在unlink方法中我们便看到了删除文件操作,期间也未对文件名作过滤,这里便构成了任意删除文件漏洞

image-20221222174448824

删除lock文件之后再去访问install/index.php便可造成系统重装,我们看看这里的利用

image-20221222174620139

根据路由定位至install/include/function.php方法,其中install_sql()方法中看到,这里有个create_config(),写入配置文件的操作,而且写入对象还是php文件,是否可以利用呢?跟入该方法

image-20221222174841997

可以看到也是没过滤就直接写入updateData变量内容,而该变量的值又由用户传入。只不过这里写入的时候是按照数组键值对的方式写入,应该是该框架针对配置项的一种安排方式。我们可以通过提前闭合语句的方式来造成RCE,毕竟是PHP文件,这里只要稍稍测试来闭合一下引号和括号即可

image-20221222183012808

image-20221222175316700

这里可以看到config/config.php文件中的格式,我们根据前面数组的括号数量提前闭合即可

image-20221222180632230

payload

1
db_address=localhost%3A3306&db_user=root&db_pwd=root&db_name=testcms','evil'=>phpinfo()))))?>

image-20221222181058352

需要再配合文件删除漏洞删掉config下的.htaccess文件

再去访问config/config.php

image-20221222181322392

参考链接

https://y4tacker.blog.csdn.net/article/details/118029055