记一次piccms代码审计

1. 写在前面

1.1 序

这两天, 遇到某个站点,用的是一个名为piccms的php内容管理系统。几经搜索,发现并没有这个小众cms的漏洞相关信息。去找了一份源码,因此有了这篇文章。

1.2 审计之初

说到审计,我只能算个新手中的新手。关于审计,我有自己的一些小看法。在审计的时候,有很多人喜欢把源码直接扔到审计工具里面去,工具会根据规则找到可能出现问题的地方。然后,将危险的点一个一个去回溯。这看起来很速度很快,实则是有问题的。

  • 逆向思维远比正向思维来得慢
  • 了解系统的MVC结构方知数据流向
  • 逆向审计可能第二天就忘记了这个系统的用途

我觉得,在拿到一份源码系统之后。还是应该理清楚整个系统的结构、数据走向、全局处理等等。

1.3 piccms目录结构

1.4 处理流程

url -> url路由 -> 全局处理 -> 调用控制器 -> 调用模型 -> 调用视图。CMS全局做了过滤,将GET、POST的数据经过了一系列的防过滤机制。

2.0 漏洞分析

2.1 越权漏洞

普通用户的入口文件为index.php,管理员的入口文件为admin.php。admin目录下面为后台控制器,挨个看一看会发现如下代码:

checkLogin是用来判断用户是否登录后台的函数,先不考虑这里是否能够绕过,只要admin目录下面的控制器里面没有调用这个函数,就会导致越权访问,如下所示:

  • Adsense控制器可越权控制广告
  • Comment控制器可越权操控评论
  • Link控制器可越权操控友链

2.2 XSS漏洞

这个cms对SQL注入限制得比较死,但是对XSS注入是没有任何过滤的。一般来说,我们需要在前台插入XSS代码然后打管理员的后台。因此,需要在前台去找可能存在输入的地方;另外,在越权的三处也存在XSS漏洞,就不过多阐述了。

比较坑的是前台只有的一处地方可以输入变量,前台控制器:Comment可以输入评论

2.3 SQL注入

刚刚提到了这个系统对GET,POST等输入过滤得比较死。问题在于,它只对基本上只对GET、POST进行了过滤。那么其它参数呢?比如$_FILE以及$_SERVER呢?这里还是先考虑前台的注入,前台可以输入的地方就只有前台控制器:Comment。

IP是直接通过Ext_Network::getClientIp()函数获取的,如下所示:

IP是从HTTP头从获取到的,都是可以伪造的。而且直接返回,没有限制长度也没有进行过滤,导致注入漏洞!

1

SQL语句如下:

这里会出现一个问题,我们可以控制的点是client_ip,后面的statusdateline两个都是int型而且长度有限制,因此需要利用insert的多语句插入才能获取到显示位。

payload:

注入结果如下图所示: 

2

插入的语句就是:

 

此条目发表在代码审计分类目录,贴了, , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注