一、整数类型
1 and 1=1 #
1 or 1=1 --+
二、字符串类型
1' and '1'='1 --+
1' and '1'='1 #
三、搜素类型
搜索型注入,需要额外的考虑后面的问题
总结:
前闭合 ' " ') ") %' %" 无
后闭合 ' " (' (" '% "% 无 # --[ ]
四、编码类型
编码类型的注入是指攻击者在输入数据时,对特殊字符进行编码,以绕过web应用程序的安全防护机制。常见的编码类型包括URL编码、HTML实体编码和Base64编码等。
例如,攻击者可以使用URL编码来绕过WAF的检测。URL编码将特殊符号转换为相应的百分号加字母的形式,如空格被转换为20%,如果web应用程序没有正确处理URL编码的数据,攻击者就可以通过在输入参数中插入恶意代码来执行SQL注入攻击。
五、json类型
什么是json
json:js JAascript o Object n Notation
就是一种数据格式,与任何编程语言无关,但是任何编程语言都会用
目的:网络之间的数据通信
json的语法格式
数据类型:字符串、数值、布尔值。json中没有注释
符号类型:逗号、引号、方括号、大括号、冒号
表现形式:key:value
关于括号:
- 大括号:表示对象类型
- 方括号;表示;集合
{"name": "张三","age": 30,"gender": "男","hobbies": ["篮球", "足球", "游泳"] }
六、宽字节注入
什么是宽字节注入
宽字节是相对于ASCII这样单字节而言的,像GB2312、GBK、GB18030、B1G5等这些数据都是常说的宽字节,实际上只有两字节。GBK是一种多字符的编码,通常来说,一个gbk编码汉字,占用两个字节。一个utf8编码的汉字,占用3个字节。
转义函数:为了过滤用户输入的一些数据,对特殊的字符加上反斜杠"\"进行转义。
宽字节注入是指MySQL数据库在使用宽字节(GBK)编码时,会认为两个字符是一个汉字(前一个ASCII码要要大于128(比如df%),才到汉字的范围),而且当我们输入单引号时,MySQL会调用转义函数,将单引号变为\' 其中\的十六进制是5c%,mysql的GBK编码会认为df%5c%是一个宽字节,也就是一个汉字運,从而使单引号闭合(逃逸),进行注入攻击。
注入语句: 1' and 1=1 --+ # 不可注入 注入语句: 1df%' and 1=1 --+ # 可注入 df%' → df%\' → df%5c%27% → 汉字' #可注入
宽字节注入漏洞条件
MySQL的字符集必须是双字节【支持GBK、不支持gb2312 、utf8】
编码:
将人类字符和机器码进行转换
- ASCII:用一个字节表示一个字符,一共有2^8=256个
- ANSI:用两个字节表示一个字符,对ASCII进行扩展后的结果
中文编码
GB2312 中国最早的汉字编码标准之一,它包含了基本的汉字、符号、数字等共收录了7445个字符
GBK 是GB2312的扩展版本,共收录了2万多个字符。GBK编码采用双字节表示一个中文字符
各种编码的字节数
- ASCII:1字节
- ANSI:2字节
- UTF8:字母1字节,希腊字符2字节,汉字3字节
字符大小为一个字节时为窄字节,字符大小为两个以上的字节时为宽字节。
七、提交数据方式
$_GET['k'] url值
$_POST['k'] 请求体
$_COOKIE['k'] cookie中指
$_REQUEST['k'] 以上三种
$_SERVER['k'] http头
多种提交数据的方式有何区别?
能传递数据大小不同,具体大小是由浏览器决定的
能传递的数据类型不同
能实现的功能不同
总结:
<?php
header("Content-type:text/html; charset=utf-8");
$get = $_GET["k1"];
$post = $_POST['k2'];
$cookie = $_COOKIE['k3'];
$request = $_REQUEST['k1'];$http_host = $_SERVER['HTTP_HOST'];
$ua = $_SERVER['HTTP_USER_AGENT'];
$ip = $_SERVER['HTTP_X_FORWARD_FOR'];echo "传递的get参数:$get <br>";
echo "传递的post参数:$post <br>";
echo "传递的cookie参数:$cookie <br>";
echo "传递的request参数:$request <br>";
echo "传递的http_host参数:$http_host <br>";
echo "传递的ua参数:$ua <br>";
echo "传递的ip参数:$ip <br>";
常见的注入点
- url中
- 登录、注册页面
- 后台需要记录客户端的IP地址
- 网站根据客户端的类型不同选择要显示的页面
网站记录客户端的IP地址
记录在日志文件中
记录在数据库中
如何判断是记录在数据库?
要判断数据是记录在日志文件中,还是记录在数据库中,首先我们需要明确日志文件和数据库的基本功能。日志文件一般用来记录对数据库的操作信息或者测试时打印一些数据信息,例如,对数据库的操作等引起的问题,或者查看回调传过来的信息。而数据库通常用于长期存储和管理大量的数据。
对于网站来说,如果它记录客户端带的IP地址,那么这些信息可能被存储在日志文件中,用于追踪访问者的活动,或是用来分析和优化网站的性能,另一方面,这些信息也可能被存储在数据库中,以便进行更复杂的数据分析或报错生成。
判断客户,选择要展示的页面
根据:pc、手机、平板
OS:安卓、IOS
浏览器:火狐、Google、IE
八:post注入
所谓POST注入就是我们在前端提交数据的时候,前端使用的是POST方式提交的数据,说白了跟GET注入没有什么本质上的区别,无非就是提交数据的方式改变了,而注入的技巧思路都是一样的。
手工注入
抓包、修改值
sqlmap
-r xx.txt
-u url --data id=1
九、XFF注入
XFF注入,全程为X-Forwarded-For注入,是SQL注入的一种特殊形式。这种攻击方式利用了HTTP请求头中的一个字段X-Forwarded-For,这个字段用于识别通过HTTP代理或负载均衡方式连接到web服务器的客户端最原始的IP地址。
在XFF攻击中,攻击者尝试修改X-Forwarded-For头中的值,对带入系统中的dns进行SQL注入,进而达到欺骗服务器执行恶意的SQL命令的目的。如果成功,攻击者就可能获取到网站的数据库内容。
检测条件:
1、web业务运行正常
2、HTTP Header 中存在X-Forwarded-For参数的调用
XFF的危害
- 数据库信息泄露:数据库中存放的用户的隐私信息的泄露。
- 网页篡改:通过操作数据库对特定网页进行篡改
- 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击
- 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员账户篡改
- 服务器被远程控制,被安装后门。经由数据库,服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
十、Cookie注入
什么是Cookie
cookie就是代表你身份的一段字符串,网站根据cookie来识别你是谁,如果你获取了管理员的cookie,你可以无需密码直接登录管理员账号。
Cookie注入的原理是:就是修改Cookie
Cookie注入形成有两个必须条件:
条件1是:程序对get和post方式提交的数据进行了过滤,但未对Cookie提交的数据进行过滤
条件2是:在条件1的基础上还需要程序对提交数据获取方式是REQUEST(''xxx")的方式,未指明使用REQUEST对象的具体方式进行获取,也就是说用request这个方法获取的参数可以是在URL后面的参数,也可以是Cookie里面的参数这里没有做筛选,之后的原理就像我们的sql注入一样了。
为什么要做Cookie注入
主要是看看程序员有没有在Cookie中做了一些过滤,我们有没有可乘之机。