HPP全局污染实现的sql注入的漏洞

目录

实验概述:

实验环境:

代码漏洞分析:

绕过第一个WAF

绕过第二个WAF:

注入数据库名称:

注入表名:

注入列名:

注入具体值:


实验概述:

1:什么是HPP的全局污染?

HPP全局污染就是利用了php接收同样的参数是,对参数的处理来实现的一种漏洞。本次漏洞的实现就是利用该特点来实现的。

我们利用两个点来实现的:

(1):当传入两个参数的时候php会解析第二个参数

(2):并且,我们还利用了web在解析 (.) 时会被解析为下划线(_),比如当我们传递一个i.d进入php时会被解析为i_d。

实验环境:

搭建环境的代码如下:其中最为主要的逻辑处理的代码为index.php。所有源码可以去我的百度网盘下载;在搭建的时候只需要改一下数据库连接文件db.ini.php。

通过百度网盘分享的文件:daiqile

链接:https://pan.baidu.com/s/1qTAcTsJNHET-G4zkk44hLQ

提取码:2cks

代码漏洞分析:

index.php文件代码展示:

php 复制代码
<?php
header("Content-type: text/html; charset=utf-8");
require 'db.inc.php';
// include('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;
  }

  foreach ($_REQUEST as $key => $value) {
      $_REQUEST[$key] = dowith_sql($value);
  }
  // 经过第二个WAF处理
  $request_uri = explode("?", $_SERVER['REQUEST_URI']);
  //i_d=1&i.d=aaaaa&submit=1
  if (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]));
          }
      }
  }
  if (isset($_REQUEST['submit'])) {
      $user_id = $_REQUEST['i_d'];
      $sql = "select * from ctf.users where id=$user_id";
      $result=mysqli_query($conn,$sql);
      while($row = mysqli_fetch_array($result))
      {
          echo "<tr>";
          echo "<td>" . $row['name'] . "</td>";
          echo "</tr>";
      }
  }
?>

对代码进行分析:

我们可以发现通过url传入的参数首先会经过dowith_sql()这个函数的过滤,当发现vlue中存在敏感字符时系统直接中断。此为第一个WAF,要是绕不过第一个WAF基本上实现不了注入。

当通过第一个WAF后来到第二个WAF,在这里又会经过dhtmlspecialchars()函数的过滤。

只有通过了这两个WAF的严格检测后才可以将i_d中的参数带入到sql语句中进行查询。

测试:

这是一个正常的访问。

当传入的参数i_d中存在恶意字符时将中断在第一个WAF。

绕过第一个WAF

我们利用第一个点和第二个点来绕过。

在第一个WAF中没有区分i_d和i.d,相当于是两个i_d,这里接收了第二个。

构建payload:http://daiqile:12345/index.php?submit=1&i_d=select &i.d=12

我们查看回显界面没有提示"非法字符",说明我们绕过了第一个waf来到了第二个waf。

绕过第二个WAF:

在第二个WAF中参数的接收就会区分i_d和i.d。此时接收的就是i_d中的内容,我们在i_d中传入注入语句来进行注入即可。

构建payload:?submit=1&i_d=-1/**/union/**/select/**/1,2,3&i.d=111

可以看到回显在第二个字段。

注入数据库名称:

由于括号被过滤了,我们不能够直接使用database()来注入数据库的名称。所以我们要换一个方式来进行注入。在information_schema库的schemata表中记录了所有的数据库的名称。我们只需要一个一个进行注入即可注入出所有的数据库。

这里代表注入出所有的数据库名称,因为这里为ctf比赛的题目,明显这里的数据库为ctf。

我们也可以使用limit一个一个注入出来。

注入表名:

构建payload:如下

注意点:

(1):在where条件中,我们不能使用"=",因为在如下代码中会使用"="来进行分割,我们使用like来进行替代。

php 复制代码
  if (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]));
          }
      }
  }

(2):由于过滤了单引号,我们不能直接写 table_schema like 'ctf' ;我们需要将ctf转化为十六进制。

这样我们就可以查出表名:

注入列名:

构建payload如下:

这样我们就可以将列名全部注入出来,注意这样注入出的列名是连在一起的。我们可以使用limit一个一个注入出来。

这里的列名为:id,username,flag。

注入具体值:

构建payload:这里注入出的值为flag列的值。也可以注入其他的值。

如上:我们就完成了所有的注入。以上就是所有的步骤。本次注入使用到的技巧比较多。

相关推荐
赛博守夜人7 小时前
AI安全攻防与治理之十四:AI 安全测试不能脱离传统安全,Web、API、移动端与模型攻击面的组合拳
前端·人工智能·安全
jimmyleeee8 小时前
Agent安全之八:OWASP ASI08 级联失效------当每一个 Agent 都“正确”,系统却走向灾难
网络·安全·web安全
山东科恩光电8 小时前
安全地毯压敏传感快速响应与耐腐蚀橡胶材质在工业危险区域的防护部署
安全
安教安全员通关宝13 小时前
2026年河北安全员A证考试题库+答案+解析
安全
updayday85414 小时前
客户附件不该发往旧邮箱,如何在发送前拦截 - Ping64 邮件安全管控
大数据·网络·数据库·安全·智能路由器
其实防守也摸鱼14 小时前
Chrome 扩展安全攻防实录:从攻击面到防御实践
开发语言·前端·网络·chrome·安全·web安全·php
领麦微红外14 小时前
红外测温传感器 赋能充电桩热安全与运维智能化
运维·安全·产品经理·智能硬件
2601_9623649715 小时前
企业 PC 安全升级,Windows Hello 商用生物识别模组介绍
windows·安全
Bruce_Liuxiaowei16 小时前
2026年10月第5周网络安全形势周报
安全·web安全
虎鲸不是鱼17 小时前
【虎鲸养殖手册 B007】命令执行的安全细节:白名单不是防弹衣
人工智能·安全·agent·智能体·自进化agent