第14篇:WEB漏洞~SQL注入~类型及提交注入


前言

  在真实SQL注入安全测试中,我们一定要先明确提交数据及提交方法后在进行注入,其中提交数据类型和提交方法可以通过抓包分析获取,后续安全测试中我们也必须满足同等的操作才能进行注入。
在这里插入图片描述
数据类型和提交方法


正文

1.1. 简要明确参数类型

数字、字符、搜索、Json等

  1. 数字型参数拼接的查询语句:WHERE id=$id
  2. 字符型参数拼接时:WHERE id='$id',参数值会有单或双引号括住,意味传递的数据是字符串或者字符

  当后台语言承接参数为字符串时,注入语句将被理解成字符串参数失去查找意义。通过在注入语句中前边添加引号,后边添加注释。不过对字符串的引号写法不一,需要过滤掉的符号不能确定,人工可能耗时大,可能借助工具

1.2. 简要明确请求方法

GET、POST、COOKIT、REQUEST、HTTP头等

以下PHP代码为例:

<?php
$get=$_GET['g'];    //接收get提交方式上的‘g’参数(post提交时get也能读取参数)
echo $get;
$post=$_POST['p'];  //接收post提交方式上的‘p’参数
echo $post;
$coo=$_COOKIE['c']; //接收任一提交方式上数据包中cookie的参数
echo $coo;
$re=$_REQUEST['r']; //无论参数放在哪,都可以寻找并接受
echo $re;
$ser=$_SERVER['HTTP_USER_AGENT'];//读取系统参数
echo $ser;
?>
以GET方式提交
提交的数据拼接在请求头或者网址上
get无论是get还是post,只要数据在请求头,都能接收(特性)
POST方式提交
只能接收POST提交方式上的参数,常见于账号密码提交等
以COOKIE方式读取
接收Cookie后边的数据
以REQUEST方式读取系统参数
在访问网站试,不清楚参数是单一还是全部接收的模式,如果有request,就直接任意接收

  如果单一接收,必须使用相应的方式传递数据。有些防护软件可能针对提交方式过滤非法操作,因此最好还是按照网站本来的提交方式提交数据
  测试网站的方式:修改提交方式,网站不变化的能刷新出来就表明数据可以由两种方式提交

HTTP头
获取当前访问者的信息,进行相应的操作,通过获取相应的访问者的信息分配相应的界面或者服务
一些常见的信息读取指令
数据包修改执行结果
在这里插入图片描述

1.3. 注意事项

  在原有的数据包上,任意位置放置注入语句,有些地方会被检查进入数据库,即为数据头部注入,其中SQL语句干扰符号:’ " % ) } 等,具体需要看写法
  总而言之,服务方会读取信息,且满足引入数据库的操作时,就会造成注入攻击可能


演示案例

演示资源:配合sqlilabs本地数据库演示

2.1. 参数字符型注入测试=>sqlilabs less 5/6

sqlilabs less 5,参数id含在单引号中
在这里插入图片描述
sqlilabs less 6,参数id含在双引号中
在这里插入图片描述

2.2.POST数据提交注入测试=>splilabs less 11

post经常会产生的地方:输入框(账密输入框)
因为需要进数据库比对账密,因此达成数据的接收、引入数据库查询

注意提交方式和数据类型
在这里插入图片描述

2.3.参数JSON数据注入测试=>本地环境代码演示

 存在网站将提交得到的数据参数封装成Json数据格式。难度较大因为不清楚Json的设定格式,注入方式同以上类似。

#配置splilabs本地数据库演示
<?php
	header('content-type:text/html;charset=utf-8');
	if(isset($_POST['json'])){
		$json_str=$_POST['json'];
		$json=json_decode($json_str);
		if(!$json){
			die('JSON文档格式有误,check!');
		}

		$username=$json->username;

		$mysqli=new mysqli();
		$mysqli->connect('localhost','root','root');
		if($mysqli->connect_errno){
			die('数据库连接失败:'.$mysqli->connect_error);
		}
		$mysqli->select_db('security');
		if($mysqli->errno){
			dir('打开数据库失败:'.$mysqli->error);
		}
		$mysqli->set_charset('uft-8');
		$sql="SELECT *FROM users WHERE username='{$username}'";
		echo $sql;
		$result=$mysqli->query($sql);
		if(!$result){
			die('执行SQL语句失败:'.$mysqli->error);
		}else if ($result->num_rows==0) {
			die('查询条件为空');
		}else{
			$array1=$result->fetch_all(MYSQL_ASSOC);
			echo "用户名:{$array1[0]['username']},密码:{$array1[0]['password']}";
		}
		$result->free();
		$mysqli->close();
	}
?>

这是一个接收json中username参数的并代入数据库查询的php脚本,注入时语句:在这里插入图片描述

2.4.COOKIE数据提交注入测试=>sqlilabs less 20

  1. 源代码中对POST提交来的数据进行的检查是打开magic开关,从而过滤引号等
    在这里插入图片描述
  2. 非POST提交数据时,接收Cookie参数引入数据库
    在这里插入图片描述
    在这里插入图片描述
  3. 在Cookie写上注入语句:在这里插入图片描述

2.5.HTTP头部参数数据注入测试=>sqlilabs less 18

  1. 对于POST请求方式的检查函数限制了POST的提交参数的长度
    在这里插入图片描述

  2. insert数据库查询语句不受影响,通过读取user-agent的数据代入数据库
    在这里插入图片描述

  3. 则,可能通过修改user-agent的数据造成注入
    在这里插入图片描述


上个月在找工作,十月底入职华为外包公司开始惰性慢慢爬升,这样着实不好。不忘初心!不忘初心!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值