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列的值。也可以注入其他的值。

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

相关推荐
用户962377954482 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主3 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954484 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机5 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机5 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954485 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star5 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954485 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher6 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行9 天前
网络安全总结
安全·web安全