SQL注入
sql注入就是在数据交互中,前端数据传到后台时没有进行严格的判断,导致传进来的数据被拼接到sql语句中,被当做sql语句进行执行,导致数据泄露
数据库相关知识:
information_schema.tables #所有表名
table_name #表名
information_schema.columns #所有列名
column_name #列名
table_schema #库名
version() #数据库版本
database() #数据库名
user() #数据库用户
@@version()_compile_os #操作系统
#简要明确参数类型
数字,字符,搜索,JSON等
数字可以直接加在sql中
字符就要通过单双引号接入sql语句中
#常见的注入点
GET, POST, COOKIE, REQUEST, HTTP头等
X-Forwarded-For
文件名
#注入分类:
盲注:
布尔盲注:只能从应用返回信息中推断语句执行后的布尔值
时间盲注:应用没有明确的回显,只能使用特定的时间函数来判断
报错注入:应用会显示全部或者部分的报错信息
堆叠注入:有的应用可以加入 ; 后一次执行多条语句
#常见sql注入点识别:
+,-,*,%,/,<<,>>,||,|,&,&&,也可以将and换成or,&&, ||等
可以不使用and或者or
使用异或截断
1^1^1,1^0^0
常见绕过技巧:
编码:
大小写
url编码
html编码
16进制编码
unicode编码
注释:
//,–,–+,-- -,#,/**/,;%00
内联注释(只能mysql):
/!**/
index.php?id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3
过滤一次时:
双写绕过
相同功能替换:
substring/mid/sub
ascii/hex/bin
benchmark/sleep
宽字节注入:
在mysql使用gbk编码时/的16进制为%5C,而如果在前面使用%df的话,gbk编码会认为" %df%5c “是一个宽字符,这样就把” / "进行绕过
版权声明:本文为qq_45993533原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。