代码审计—espcmsv5注入测试复现

一,复现环境准备

所需文件安装包资源
phpstudyv8下载安装 https://www.xp.cn/download.html
espcmsv5百度网盘下载链接:https://pan.baidu.com/s/1vRYpoQiqbrSPQYPVVJbYRQ
提取码:espc
php版本5.3.x,mysql版本5.3.x espcmsv5版本不支持更高版本的php和mysql。
seay源代码审计系统:网页直接搜索就可以直接安装

二,复现环境搭建


1,phpstudy配置
打开首页的apche,mysql,(MySQL版本为5.x.x)
代码审计—espcmsv5注入测试复现_第1张图片

phpstudy网站搭建
代码审计—espcmsv5注入测试复现_第2张图片

将cms源码.zip–>cms源码–>espcms.rar–>espcms中的文件全部直接复制到www.espcmstest.com文件下如图所示
代码审计—espcmsv5注入测试复现_第3张图片

总之cms源码.zip–>cms源码–>espcms.rar–>espcms中的文件要直接在www.testespcms.com的子目录下。
2,espcms安装
在浏览器输入地址栏 www.testespcms.com(如果为第一次安装)就可以按照手册步骤安装
若以前安装过就会直接到网站首页。
espcms在线安装手册 https://www.ecisp.cn/html/cn/v5_faq/
(若安装数据库是页面无响应大概率是php版本过高,或者mysql版本过高)MySQL数据库默认密码一般为root,安装完成后 www.testespcms.com\adminsoft为网页后台地址

三,seay源代码审计系统自动审计

新建项目找到文件并且打开espcms文件点击自动审计开始即可
代码审计—espcmsv5注入测试复现_第4张图片

选中,双击进行查看:
代码审计—espcmsv5注入测试复现_第5张图片

这里是带入参数进入数据库查询,下一步对$parentid右键全局搜索,查看参数传递过程

代码审计—espcmsv5注入测试复现_第6张图片

右键定位accept函数
代码审计—espcmsv5注入测试复现_第7张图片

通读代码可知,传入的参数是R,所以此处传递参数的方法既可以是get也可以是post。然后使用daddslashes进行过滤,其实质就是addslashes。

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。 预定义字符是: 单引号(’) 双引号(") 反斜杠(\) NULL
提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。 注释:默认地,PHP 对所有的 GET、POST 和 COOKIE
数据自动运行 addslashes()。所以您不应对已转义过的字符串使用
addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

在回顾前文代码{$sql = “select * from d b t a b l e w h e r e p a r e n t i d = db_table where parentid= dbtablewhereparentid=parentid”;},sql查询语句并没用单引号进行分隔,因此,此处存在sql注入漏洞
回到sql代码处看到class important extends connector右键全局搜索查看important在哪里实例化得到下图
代码审计—espcmsv5注入测试复现_第8张图片

大致的流程就是获取url中的archive参数作为寻找php文件的参数,并包含获取url中的action参数,作为函数名,并调用在具体的函数中获取parentid的值,组成sql语句。
因此可以构建exp:
http://www.testespcms.com/adminsoft/index.php?archive=citylist&action=citylist&parentid=-1 union select 1,2,user(),4,5
注入结果
代码审计—espcmsv5注入测试复现_第9张图片

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
Database()将会返回当前网站所使用的数据库名字 User()将会返回执行当前查询的用户名 version() 获取当前数据库版本.
@@version_compile_os 获取当前操作系统

四,结果

成功获得用户名

你可能感兴趣的:(mysql,php,安全)