sql注入篇
基本的有:
1、Union注入:先用常规的测试方法 and 1=1 、and 1=2 探测是否存在注入;然后order by x 探测回显位置;最后select语句查找需要的信息
2、Boolean注入:页面只会回显yes或者no
(1) 确定存在注入之后用and length(database())>=x探测数据库字段长度;
(2)然后用substr(database(),1,1)='x'字符串截取函数逐 个判断数据库字符的值;
(3)substr((select table_name from information_schema.tables where table_schema='sql' limit 0,1),1,1)='x'判断数据库中的表名
以此类推可以查询出相应的字段名和字段值
3、报错注入:在探测过程中错误信息会直接输出到页面,可利用报错注入获取信息,此处可利用updatexml()函数
判断库名:updatexml(1,concat(0x7e,(select database()),0x7e),1) 注:0x7e是~
判断表名和字段名的步骤和union注入相同
sql注入进阶:
4、时间盲注:时间注入和Boolean注入类似,但不同的是,时间盲注利用sleep()和benchmark()函数让mysql的执行时间变长,时间盲注多于if(expr1,expr2,expr3)结 合使用,此if语句的含义为:如果expr1为TRUE,则返回值为expr2,否则返回值为expr3;
举例:if(substr(database(),1,1)='x',sleep(5),1) 若数据库第一个字符值为x,则程序延迟5秒,否侧查询1
分析:时间注入页面中,程序获取GET参数ID,通过preg_match检查参数ID中是否含有union等危险字符(要根据具体情况判断过滤了什么字符), 然后将参数ID拼接到sql语句中,有结果返回yes,无结果返回no
5、堆叠查询注入攻击:堆叠查询可执行条语句;多语句之间以分号隔开,
id=1
id=1'页面返回MYSQL错误
id=1'%23页面返回正常
堆叠查询语句可为 '; select if (substr(user(),1,1)='x',sleep(3),1)%23
之后user()所在的查询语句和union查询相同
6、二次查询注入攻击
7、宽字节注入攻击:id=1
id=1' 页面不会报错反而多了转义符 \
当数据库编码是GBK时,可以用%df注释掉\
之后进入union查询的步骤,但是由于单引号被转义,就要用到另外一种方法:嵌套查询
(select database())
8、Cookie注入攻击:cookie注入攻击中发现没有GET参数,用burpsuite抓包发现id=1或者其他参数,此时修改cookie的值,步骤同union注入相同,
9、base64注入攻击:在URL中,参数ID的值经过base64为编码,此时可以沿用union注入,只需将参数经过base64位编码即可
10、XFF注入攻击:通过burp抓包,在http头中发现头部参数X-Forwarded-for,简称XFF头,它代表客户端的真实IP,通过伪造xff的值可以伪造客户端IP 此后的步骤同union注入