【攻击与漏洞】-SQL注入

安全设计原则:数据与代码分离

注入攻击的本质,是把用户输入的数据当做代码来执行了。这里有两个关键的条件

1.用户能够控制输入

2.原本程序要执行的代码,拼接了用户输入的数据

  • 原理:攻击者利用发送给sql服务器的输入数据构造可执行的代码
  • 判断是否有sql注入
    • 错误回显
      • 攻击者在参数中输入一个单引号,引起执行查询语句的语法错误,服务器直接返回错误信息,其中暴露的敏感信息能让攻击者的攻击更加得心应手
    • 盲注
      • 盲注指的是在服务器没有错误回显的时候开展的注入攻击。最简单的盲注验证方式是构造一条条件判断语句。
      • 如果正常的查询语句是 select title from items where id=2
      • 第一步:构造select title from items where id=2 and 1=2  因为1=2是永远不会成立的,所以页面上应该返回不了任何数据
      • 第二步:构造select title from items where id=2 and 1=1 此时页面正常返回
      • 这时就说明 id 处存在sql注入的风险
  • 数据库攻击技巧
    • (自动化sql注入工具 sqlmap)
    • (判断注入点的类型)
  • SQL预防
    • 使用预编译语句:绑定变量。(预编译语句指的是编程语言中集成好的对数据库的操作函数)
    • 使用存储过程:与预编译语句类似,区别是存储过程需要先将sql语句定义在数据库中
    • 严格检查输入变量的类型 和格式
    • 过滤转义特殊字符
    • 尽量不要直接用一些普遍的名字,比如说admin password。
  • 例子
    • 一般用户登录用的SQL语句为:SELECT * FROM user WHERE username='admin' AND password='passwd',此处admin和passwd分别为用户输入的用户名和密码,如果程序员没有对用户输入的用户名和密码做处理,就可以构造万能密码成功绕过登录验证,如用户输入'or 1#,SQL语句将变为:SELECT * FROM user WHERE username=' ' or 1#' AND password=......  '与第一个' 构成闭合 or 1为TRUE,#注释掉后面的内容,所以查询语句可以正确执行。
  • 实验

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vector<>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值