SQL 注入

2021-11-23

什么是SQL注入

SQL注入是指用户能够控制前端参数,构造sql语句影响到后端数据库的行为。

注入

1.注入类型

  • 数字型: ?id=2-1或者加减之类的运算
  • 字符类型:?id=1‘ 或者加入一些字符

2.注入技巧

  • 布尔盲注
    含义:回显页面只有正确和错误
    常见的payload:
    (1).length函数:返回字符串str的长度,以字节为单位
    (2).substr函数:截取字符串字符
    (3).ascii函数:返回字符串中的最左侧字符的ascii码

  • 时间盲注(参考:https://xz.aliyun.com/t/5505)
    含义:没有明显的回显,只能使用特定的时间来判断
    常见使用payload:
    (1).sleep(n)函数:注入时延迟 n 秒输出(不建议实际的渗透测试使用)
    (2).benchmark函数

BENCHMARK(count,expr)

benchmark函数会重复计算expr表达式count次
(3) 笛卡尔积
利用and短路运算规则进行时间盲注。
(4) GET_LOCK盲注
(5) 正则DOS RLIKE注入

  • 报错注入
    含义:在错误的回显页面回显数据库的信息
    常见使用payload:
    (1) 基于格式错误的报错(Xpath语法错误)
    <1> extractvalue(xml_document,Xpath_string)函数--从document中返回包含string的字符串,如果不符合xpath的语法就会报错,将查询的结果放在报错信息中
    <2> updatexml(xml_document,xpath_string,new_value)函数--将document的中符合string的字符串替换为value值
    (2) 基于主键重复错误(参考:http://www.hellomao.top/2019/08/16/web_mysql_floor/)
    <1> rand() 生成随机数,配合floor函数使用,group by
    (3) 其他报错(大佬求补充)

  • 堆叠注入
    可以执行多条语句,将多条sql语句来同时执行

  • 宽字节注入(参考:https://www.freebuf.com/articles/network/282252.html)
    GBK编码,能够绕过magic_quotes_gpc函数

3.注入位置
(1) GET
(2) POST
(3) Cookie
(4) 搜索型注入
(5) HTTP 头注入

sql注入常见位置

1.登录框
2.搜索框
3.url参数值
4.信息设置
5.所有与数据交互的点都有可能存在SQL注入

修复与建议

1.预编译
代码的可读性和可维护性
尽可能提高性能
提高安全性
2.正则过滤参数
3.php开启magic_quotes_gpc

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于注入攻击,一个最基础的安全设计原则就是“数据与代码分离”。带着这个思想去学习,可能会理解地更透彻。 注入攻击的...
    一碗海鲜汤阅读 2,784评论 0 0
  • 注入攻击原理: 注射式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者有机会将程...
    Admin3K阅读 5,144评论 0 6
  • 🎈注入攻击的原理: 注射式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者...
    小银同学阿阅读 5,591评论 0 0
  • 汇编工具:http://www.ollydbg.de/ 数据库管理工具破解教程:https://www.jians...
    守护者阅读 3,685评论 0 0
  • 原理: 总之一句话:注入产生的原因是接受相关参数未经处理直接带入数据库查询操作 为了发动注射攻击必须要做三件事情:...
    似龙在渊阅读 3,529评论 0 2