因str_replace导致的注入问题总结


Posted in PHP onAugust 08, 2019

研究了下replace的注入安全问题。

一般sql注入的过滤方式就是引用addslashes函数进行过滤。

因str_replace导致的注入问题总结

他会把注入的单引号转换成\',把双引号转换成\",反斜杠会转换成\\等

写一段php代码:

<!DOCTYPE html>
<html>
<head>
 <title></title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<?php
 $x=$_GET['x'];
 $id=str_replace(addslashes($_GET['y']),'',addslashes($x));
 echo "过滤后:".addslashes($x)."<br/>";
 echo "replace替换绕过:".$id."<br/>";
 $conn = mysql_connect('127.0.0.1','root','root');//连接mysql数据库 
 mysql_select_db('test',$conn);//选择$conn连接请求下的test数据库名 
 $sql = "select * from user1 where id='$id'";//定义sql语句并组合变量id 
 $result = mysql_query($sql);//执行sql语句并返回给变量result 
 while($row = mysql_fetch_array($result)){//遍历数组数据并显示 
  echo "ID".$row['id']."</br>"; 
  echo "用户名".$row['name']."</br>"; 
 } 
 mysql_close($conn);//关闭数据库连接 
 echo "<hr>"; 
 echo "当前语句:"; 
 echo $sql;
?>
</body>
</html>

发现是引用了addslashes函数的:

因str_replace导致的注入问题总结

一个单引号或者双引号直接被转义,字符串注入到这里基本上gg了。没戏了。

addslashes的问题:

addslashes会把%00转换成\0

addslashes会把单引号(')转换成\'

因为使用了str_replace函数,会替换那么输入%00' 就被addslashes函数自动添加\0\',然后我们匹配0,就变成了\\'再次转换成\',单引号成功逃逸。

<?php
 echo str_replace("0","","\0\'")
?>

\0\'就是我们输入的%00'

会输出:

因str_replace导致的注入问题总结

那么知道了原理根据上面的php代码构造合适的sql语句绕过addslashes过滤

因str_replace导致的注入问题总结

单引号成功逃逸,这里不能用单引号闭合了,后门闭合会被过滤那么直接:

返回真:

因str_replace导致的注入问题总结

返回假

因str_replace导致的注入问题总结

那么想出数据就很方便。这里不演示了常规语句就行了。

模拟环境没啥意思,去网上找了个别人的代码审计文章,找到了一个雨牛挖的cmseasy的str_replace绕过注入的真实案例

2014年的漏洞,cmseasy相关版本网上已经找不到了,我改写了个cmseasy,方便测试这个replace注入:

cmseasy环境下载:链接: https://pan.baidu.com/s/1KgHaPxuB3UI36fyx4IbW9w 提取码: 7aj3

存在问题的目录lib/plugins/pay/alipay.php

第87行用了str_replace替换

因str_replace导致的注入问题总结

替换后的内容赋值给了$order_sn

往下看发现调用了check_money函数,跟踪下这个函数查看内部实现:

uploads/lib/table/pay.php

因str_replace导致的注入问题总结

先是赋值然后调用了getrow函数,跟进去看看:

uploads/lib/inc/table.php

因str_replace导致的注入问题总结

condition没有啥数据库操作后跟下面那个函数,跟踪下rec_select_one:

还在table.php文件下:

因str_replace导致的注入问题总结

跟下sql_select函数:

因str_replace导致的注入问题总结

被带入数据库查询:

默认echo $sql;是被注释的,解除注释方便查看sql语句:

因为str_replace的缘故,可以被绕过进行sql注入:

去除注释符,构造poc:

http://localhost/CmsEasy/uploads/index.php/?case=archive&act=respond&code=alipay&trade_status=WAIT_SELLER_SEND_GOODS

       POST:out_trade_no=11111%00'&subject=0

 sql语句报错存在sql注入

因str_replace导致的注入问题总结

那么修复方案是什么呢?

回到刚开始的alipay.php

第79行

因str_replace导致的注入问题总结

正则匹配下\'

然后再次访问:

直接跳转了不再停留了。

因str_replace导致的注入问题总结

修复方案:

function respond() {
  if (!empty($_POST)) {
   foreach($_POST as $key =>$data) {
    if(preg_match('/(=|<|>|\')/', $data)){
     return false;
    }
    $_GET[$key] = $data;
   }
  }

参考文章:https://wizardforcel.gitbooks.io/php-common-vulnerability/content/23.html

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
PHP安全配置
Oct 09 PHP
PHP实现多服务器session共享之NFS共享的方法
Mar 16 PHP
Wordpress php 分页代码
Oct 21 PHP
MySQL的FIND_IN_SET函数使用方法分享
Mar 27 PHP
yii框架配置默认controller和action示例
Apr 30 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
Jun 20 PHP
php一行代码获取文件后缀名实例分析
Nov 12 PHP
PHP滚动日志的代码实现
Jun 10 PHP
php实现Mysql简易操作类
Oct 11 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 PHP
php打包网站并在线压缩为zip
Feb 13 PHP
PHP实现websocket通信的方法示例
Aug 28 PHP
PHP goto语句用法实例
Aug 06 #PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 #PHP
Yii框架核心组件类实例详解
Aug 06 #PHP
PHP使用Session实现上传进度功能详解
Aug 06 #PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 #PHP
PHP中的自动加载操作实现方法详解
Aug 06 #PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 #PHP
You might like
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
php实现简单爬虫的开发
2016/03/28 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
Bootstrap按钮组实例详解
2017/07/03 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
js实现div色块碰撞
2020/01/16 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
在Python中使用SQLite的简单教程
2015/04/29 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
Python list运算操作代码实例解析
2020/01/20 Python
大数据分析用java还是Python
2020/07/06 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
业务主管岗位职责范本
2013/12/25 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
安全教育月活动总结
2014/05/05 职场文书
服务标语大全
2014/06/18 职场文书
学习教师法的心得体会
2014/09/03 职场文书
旷课检讨书500字
2014/10/14 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android
JS实现简单的九宫格抽奖
2022/06/28 Javascript