代码审计之XDCMS

这个源码有点年代了,不过这次分析的很透彻,几乎每个点我都会去认真分析,所以这应该算是一次完整的代码审计吧~

源码地址:传送门

审计过程中也遇到很多问题,如有不当之处,敬请指出~

下面开始代码审计过程~(搭建过程略去)

1.目录总览

图片[1]-代码审计之XDCMS-安全小百科

这里目录并不是很复杂,也没有采用thinkphp的框架,自己搭建的框架,因此代码还是很容易读懂的!

首先看到目录,我觉得先要找数据库文件,是不是存在默认的下载路径,如果通过这种方法,我们就能直接拿到管理员账号密码,还审计什么。。。

图片[2]-代码审计之XDCMS-安全小百科

这里没有什么默认的mdb文件或是sql文件,backup里也为空,因此唯一可能有用的就是config.inc.php文件,但是因为是php,肯定是不显示的,因此这里不存在此类漏洞~

下面我们可以猜测admin肯定是管理员目录,cache为缓存,估计也没什么用。。

install为安装目录,经常出现的就是任意文件删除漏洞,然后利用这种漏洞删除install目录下的lock文件,导致cms可以进行重装,,但是笔者觉得此类漏洞不可取。。

system目录应该就是整个网站的组成文件,这个文件夹应该是审计的重点!

最后是一个上传文件的目录,这个看看有没有任意文件上传漏洞吧

2.配置文件总览

下面先看看有哪些配置文件,哪些文件经常引用到,这类文件往往会贯穿整个网站构建过程,一些重要的过滤函数也一般在这类文件中!

这是index.php文件,我们可以看到两个配置文件,下面逐步跟着这些配置文件进入源码的世界~

图片[3]-代码审计之XDCMS-安全小百科

这是config.inc.php文件,主要是数据库配置信息,这里没啥好说的,用的是utf-8字符,因此不存在宽字节注入~

图片[4]-代码审计之XDCMS-安全小百科

这是system/common.inc.php文件,应该是整个网站的构架文件,可以看到之前说的system目录为系统目录,另外我们需要注意,在最下面一行,又引用了一个fun.inc.php文件,应该是function的配置文件,这类文件往往就是过滤函数的聚集地!

下面来好好看看这个fun.inc.php文件

这是fun.inc.php的一部分,可以看到这里有两个过滤函数,一个应该是xss过滤,一个是sql过滤。

但是这里sql过滤只匹配了小写,因此我们可以利用大小写来进行绕过!

因此如果使用了这个safe_html()函数,并且进入了数据库查询,那么这里就一定存在sql注入~

3.sql注入

下面我们针对这个函数来进行搜索,看看有哪些参数调用了这个safe_html()

图片[5]-代码审计之XDCMS-安全小百科

这里一共114处调用了这个函数,那么下面我们来看看是否存在sql注入!

在看之前,我们先对文件所处位置进行判断,如果是system目录,那么我们应该能访问到,如果是admin目录下,就应该跳过,都还没拿到管理员账号密码,这个目录看了也是白看!

在看的时候,出现了大量相同目录下的文件

就不一一列举了。。大多都是/system/modules/目录下的,那么这个目录应该就是能够直接显示在前端的文件,因此这个目录更是我们的审计的重中之重!

那么我们找好了注入点存在的目录,下面来针对具体的文件,这里的safe_replace()函数我有点无能为力,实在有点绕不过去,,大牛有方法可以指出~

图片[6]-代码审计之XDCMS-安全小百科

这里我挑选的是用户注册和登录模块,因为前面的文件要么有safe_replace(),要么有intval()函数来进行保护,有点无奈。。

下面我们来重点分析member目录下的文件,同时在自己搭建的网站环境中进行测试~

图片[7]-代码审计之XDCMS-安全小百科

这是用户登录,这里我随便进行了fuzz,看看页面会显示什么,这步主要是方便我们查找源码出处~

图片[8]-代码审计之XDCMS-安全小百科

?m=member&f=login_save,这里我猜测m为目录,f为功能,因此我们需要找到login_save()函数!

可以看到这里用户登录处仅仅调用了safe_html(),然后就进入了数据库查询!这里利用报错注入来进行测试~

这里为了测试方便,直接看了下数据库的表名和列名。。

图片[9]-代码审计之XDCMS-安全小百科

可以看到这里有了回显,拿到了管理员账号密码~

payload:

username=’ or updatexml(1,concat(0x7e,(selEct concat(username,password) frOm c_admin),0x7e),1) #&password=adog

其余注入利用方法一致~都是因为safe_html()出的问题!

再给个例子

这是language.php文件,同样的出现了sql注入问题~

图片[10]-代码审计之XDCMS-安全小百科

注入到这里就告一段落,其余注入要么是intval(),要么是safe_replace(),会经过多次过滤,后来看了下知道创宇的漏洞库,,好像也没其他漏洞。。

图片[11]-代码审计之XDCMS-安全小百科

4.其余漏洞挖掘过程

xss漏洞:整个网站竟然没有留言板功能。。。进后台看了下,没有什么能够触发存储型xss漏洞!

图片[12]-代码审计之XDCMS-安全小百科

注册了个会员,看看后台能接受什么数据~

图片[13]-代码审计之XDCMS-安全小百科

测试了下,储存在数据库中,并不存储在页面中,因此这里不存在xss漏洞(反射型漏洞就不找了。。修改ip即可出现反射型xss)

任意文件下载漏洞:这里提供了一个文件下载漏洞,没有文件上传功能,因此我们来看看这个文件下载是否会出现问题!

图片[14]-代码审计之XDCMS-安全小百科

这里文件上传没成功,把代码截下来了用作示意。。这里给了一个文件下载链接,由于没有上传文件,因此链接为空,利用链接来实现下载,明显不存在任意文件下载漏洞。。

逻辑漏洞:这里想注册两个用户,看看是否存在越权漏洞和修改任意用户密码漏洞

图片[15]-代码审计之XDCMS-安全小百科

这里抓了个修改密码的包,可以看到post数据均为我输入的,这里用户认证是依靠cookie认证,找到了代码但是不知道怎么生成的。。

5.Getshell

图片[16]-代码审计之XDCMS-安全小百科

后台可以直接修改上传文件类型,这个不多说~

当然还有很多其他方法,这里就不一一赘述了~

相关推荐: HappyCTF-writeup

这个比赛参加了正赛前的热身赛,感觉题目出的可以,但是正赛那天因为有事,没有参加(第一次用vpn连接内网做ctf,感觉好刺激) 附上正赛的wp,以供学习吧~ 传送门:HappyCTF-writeup     相关推荐: 利用aircrack-…

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论