注入攻击
# sql注入
# 盲注:在服务器没有错误回显时完成的注入攻击。
Timing Attack 在MySQL中有一个函数BENCHMARK()函数,它是用于测试函数性能的。因此利用这个函数可以让同一个函数执行若干次,使得结果返回的时间比平时要长;通过时间长短的变化,可以判断出注入语句是否执行成功。 数据库攻击技巧。
- sql注入可以猜解出数据库的对应版本
- 命令执行;在MySQL中,除了可以通过导出webshell间接地执行命令外,还可以利用用户定义函数的技巧,即UDF来执行命令。在建立数据库账户时应该遵循最小权限原则,尽量避免给web应用使用数据库的管理员权限。
- 攻击储存过程:在MySQLServer中,存储过程xp_cmdshell可谓是最臭名昭著了。在MySQL和oracle中,都有大量的内置存储过程。再注入攻击的过程中,存储过程将成为攻击者提供很大的便利。
- 编码问题 解决这种问题,需要统一数据库、操作系统、web应用所使用的字符集,以避免各层字符的理解存在差异。
- SQL Column Truncation MySQL中的sql-mode未开启strict模式输入的字符串超出了长度限制,只会提示warning而数据插入成功。
# 正确地防御sql注入
- 使用预编译语句,一般来说防御sql注入的最佳方式,就是使用预编译语句,绑定变量。
- 使用存储过程
- 检查数据类型 检查数据格式 限制输入类型
- 使用安全函数
# 其他注入攻击
- XML攻击
- 代码注入 禁止使用eval() system()等可执行命令的函数
- CRLF注入 处理好\r \n两个保留字即可
在Github上编辑此页 (opens new window)
上次更新: 3/22/2021, 3:47:15 AM