前言
??在真实SQL注入安全测试中,我们一定要先明确提交数据及提交方法后在进行注入,其中提交数据类型和提交方法可以通过抓包分析获取,后续安全测试中我们也必须满足同等的操作才能进行注入。 数据类型和提交方法
正文
1.1. 简要明确参数类型
数字、字符、搜索、Json等
- 数字型参数拼接的查询语句:
WHERE id=$id - 字符型参数拼接时:
WHERE id='$id' ,参数值会有单或双引号括住,意味传递的数据是字符串或者字符
??当后台语言承接参数为字符串时,注入语句将被理解成字符串参数失去查找意义。通过在注入语句中前边添加引号,后边添加注释。不过对字符串的引号写法不一,需要过滤掉的符号不能确定,人工可能耗时大,可能借助工具
1.2. 简要明确请求方法
GET、POST、COOKIT、REQUEST、HTTP头等
以下PHP代码为例:
<?php
$get=$_GET['g'];
echo $get;
$post=$_POST['p'];
echo $post;
$coo=$_COOKIE['c'];
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的设定格式,注入方式同以上类似。(以下是迪师傅的视频截图,因为我没有他的示例代码)
2.4.COOKIE数据提交注入测试=>sqlilabs less 20
- 源代码中对POST提交来的数据进行的检查是打开magic开关,从而过滤引号等
- 非POST提交数据时,接收Cookie参数引入数据库
- 在Cookie写上注入语句:
2.5.HTTP头部参数数据注入测试=>sqlilabs less 18
-
对于POST请求方式的检查函数限制了POST的提交参数的长度 -
insert数据库查询语句不受影响,通过读取user-agent的数据代入数据库 -
则,可能通过修改user-agent的数据造成注入
上个月在找工作,十月底入职华为外包公司开始惰性慢慢爬升,这样着实不好。不忘初心!不忘初心!!
|