【网络安全】xhCMS代码审计思路

前言

最近想提升一下自己的代审能力,虽然之前复现分析了挺多漏洞的,TP,Laravel,Typcho,yii,但一直感觉对代码审计能力提升用处不太大,很多时候链子和利用点都非常简单,可是如何发现的这确实一个难题,所以就拿熊海CMS为例,如何自己挖它里面的漏洞,看看自己能否发现和利用,最后在和网上存在的漏洞进行对比,再看哪里没有发现,为什么没有发现,希望这也能给才入门代码审计的师傅们一点思路吧

【资料】

审计流程

先看一下入口文件index.php,这个文件一般会定义很多变量,包含很多路径,文件进来,我们只需要注意它和用户的交互的点,入口文件一般会先判断你是否存在安装锁或者配置文件,如果不存在就跳转到安装目录,开始安装整个网站。然后打开文件监控,首先判断是否存在重装漏洞,然后再分析目录结构,大概知道每个文件夹中放的文件功能是什么就行了,比如熊海CMS:


在这里插入图片描述

然后安装成功后我习惯先浏览下网站的主要功能,大致了解这些之后就可以静下心来看代码了

重装漏洞

重装漏洞可以以下几种类型:

  1. 自动删除这个安装文件

    通过生成一个 lock 文件来判断程序是否安装过

  2. 根本无验证

    安装完成后不会自动删除文件,又不会生成 lock 判断是否安装过

  3. 安装file

    直接用GET提交step绕过,直接进入下一步

  4. 变量覆盖导致重装

    可以GET,POST,COOKIE任意提交一个变量名insLockfile,从而让file_exists为false就不会退出

  5. 判断lock后,无exit

    判断是否存在lock文件,如果存在lock文件,就会header到index.php,但是header后并没有exit,所以
    并不会退出,类似的还有javascript弹个框

  6. 解析漏洞

    在安装完成后会将install.php
    重命名为index.php.bak,但是由于Apache的解析漏洞:如果无法识别到最后一个后缀的话,就会向上解析,那么就又变成了php了,然后结合安装时的变量覆盖又成重装了。

  7. 满足一些条件不会退出的

危害

  1. 因为在安装时我们可控一些变量,因为没有exit,导致配置信息没有过滤的传入安装后,从而写入文件getshell
  2. 重装之后修改管理员信息,进入后台getshell

install/index.php:


在这里插入图片描述

并没有发现存在重装漏洞

SQL注入漏洞1

首先就要去查看数据库使用的编码方式,如果是GBK则可能造成宽字节注入,从而直接绕过addslashes这类函数,然后去有对数据库操作的地方查看传入数据是否可控,我们可以注意下,在注入前是否对参数进行了解码,如果进行了解码,可以二次编码注入,在熊海CMS安装的时候就发现它有写入管理员信息的操作,而且是在安装前的操作,并没有对参数进行任何过滤,

insatll\index.php:


在这里插入图片描述

在这里插入图片描述

而且它是有报错输出的,所以可以报错注入:


在这里插入图片描述

然后就是安装之后了,

文件包含漏洞

首先就从网站入口跟进,发现是一个单入口模式:


在这里插入图片描述

这里就存在文件包含漏洞,只是说暂时还没有发现危险文件能够利用,看道这里那就联想到能不能把后面的php后缀截断,然后去上传一个图片马来包含呢,或者是否存在一个文件写入的点来利用呢,可是我试了一下第一个思路,好像并没有成功,但是存在疑惑,因为在PHP<5.3.4的时候,我们是可以利用%00来截断后缀的,但是当我本地将版本调低到5.3.29,按理说是可以截断后缀从而包含任意文件,但是却出了问题,我先在根目录写了一个phpinfo,

在这里插入图片描述

这样是可以的,但是:


在这里插入图片描述

这样缺不行,然后我又使用长度截断也未成功

然后就跟进files文件夹下的页面文件,首先就是files/index.php,里面很多都是echo数据库里面的信息,但是我们并不可控,因为里面引进了template里面的文件,所以也先看一下,发现里面有没有能利用的,查看fiels/list.php,看起来存在SQL注入漏洞,但是存在addslashes函数,无法注入,然后继续审计,直到看到fiels/download.php的时候,发现了一个XSS漏洞,然后fiels/list.php同理

反射型XSS漏洞1

XSS也分为反射型、存储型以及DOM型,当我们想挖掘反射型XSS漏洞时,需要重点关注程序的输出,比如echo/print等,当程序直接将未经过滤的用户输入输出除了,就会造成反射型XSS。

而存储型XSS是由于网站将用户输入存储进数据库中,当用户再次浏览某页面时,从数据库中获取之前的输入并输出,如果在输入->数据库这块过程中没有进行实体化编码以及输出->页面的过程中没进行实体化编码,则很容易产生存储型XSS。所以对于这类XSS,重点关注insert,查找insert表内数据的输出位。

fiels/download.php:


在这里插入图片描述

直接echo可控变量,所以存在XSS漏洞,


在这里插入图片描述

然后继续往后看,点击下载会跳转到files/content.php,跟进,发现存在SQL注入漏洞,

SQL注入漏洞2

files/content.php:

这里的原因就是没有使用单引号闭合用户可控变量,导致绕过addslashes函数,


在这里插入图片描述

在这里插入图片描述

继续跟进,发现调用files/submit.php提交评论,


在这里插入图片描述

跟进files/submit.php,


在这里插入图片描述

都可控,且未经过addslashes函数,
在这里插入图片描述

很明显的一个SQL注入漏洞,但是需要注意的是后面还有一个插入语句:

在这里插入图片描述

开始我也卡了一下,因为你只闭合前面,后面是会报错的:


在这里插入图片描述

闭合后面:


在这里插入图片描述

还是不行,但是突然想到只需要用报错注入,让前面报错了,后面自然就不用管了:
name=1&mail=1') or updatexml(1,concat(0x7e,(select(database())),0x7e),1)#&content=哈哈
在这里插入图片描述

往后走还有SQL注入,


在这里插入图片描述

后面相同利用的地方就不赘叙了,因为发现这里有可控数据插入数据库的操作,那是否存在存储型XSS呢?

存储型XSS1

分析已经在上面的流程分析了

在files/content.php,我们能提交昵称、邮箱、网址、评论内容,但是在files/submit.php中,


在这里插入图片描述

他过滤了$content的HTML代码,所以不能利用,而且在显示评论和留言的地方有昵称,所以我们只能利用昵称处进行存储XSS

还有一个files/contact.php,存在和files/content.php一样的留言框,大概看了下代码,也是存在存储型XSS


在这里插入图片描述

最后还有一个files/software.php文件,在下载的时候会跳转到该界面,

又存在明显的SQL注入漏洞,


在这里插入图片描述

这里就不再重复讲述了

审计到这里差不多前端的代码就审完了,漏洞就SQL注入漏洞和XSS漏洞,然后就是去审计后台的代码了

首先对于后台代码,我会先查看是否存在越权漏洞,是否存在CSRF漏洞,然后登录后台,寻找PHP文件写入,寻找命令执行,

首先查看login.php,


在这里插入图片描述

又是重复的SQL注入,后面就不重复这些漏洞了,在审计代码的时候,并未发现admin/login.php存在什么越权漏洞,但是后面查看存在漏洞的时候,他却存在这个漏洞,因为在成功登录上admin账号后,他是存在一个user的cookie的,但是退出之后又没有了,所以他就是通过cookie中的user值来判断登录是否成功的,所以只需要伪造一个cookie即可:

成功越权登录


在这里插入图片描述

然后就是./inc/checklogin.php中存在越权漏洞了,:


所以只要调用了该文件都存在越权漏洞

后面的话其实就是前面提到过的漏洞了,这里就不再赘叙了,

总结

其实这个CMS很简单,我主要想讲的并不是这个CMS如何审计,而是一个思路,希望能帮到刚入门代审的师傅们,其实很多漏洞,利用点都很简单,难的就是去发现它的思路

参考
https://threezh1.com/2019/05/18/PHP%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1%E4%B9%8B%E9%87%8D%E8%A3%85%E6%BC%8F%E6%B4%9E/

关注我,持续更新······

私我获取【网络安全学习资料·攻略

你可能感兴趣的:(【网络安全】xhCMS代码审计思路)