请选择 进入手机版 | 继续访问电脑版
查看: 648|回复: 0

sql注入原理(POST)

[复制链接]
  • TA的每日心情
    开心
    2017-9-4 21:40
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2017-9-4 21:40:56 | 显示全部楼层 |阅读模式
    0x00:sql注入原理
        SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,
            而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行
            攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数
            据,致使非法数据侵入系统。
            根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。
            前者由不安全的数据库配置或数据库平台的漏洞所致;
            后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。
            基于此,SQL注入的产生原因通常表现在以下几方面:
            ①不当的类型处理;
            ②不安全的数据库配置;
            ③不合理的查询集处理;
            ④不当的错误处理;
            ⑤转义字符处理不合适;
            ⑥多个提交处理不当。
           
    0x01:sql注入形成的过程
        随着我国从互联网时代,到现在的物联网时代,计算机行业飞速发展,这方面的
    人才需求也逐年增多,由于程序员水平层次不齐,没有安全意识,以及快速迭代导致
    了,代码质量不高,给攻击者提供了便利,导致这样那样的安全事件层出不穷。
         先介绍一种架构B/S如下图所示:
            image.png
    以Java为例简单的实现以下:
          表现层
           <form action="/superzedlv/login" method="post">
               用户名:<input name="name" size="20" type="text"><br><br>
               密码:<input  name="pass"  size="20"  type="password"><br><br>
               <input type="submit" value="登录">
            </form>
         应用层
          //从前端获取表单中的数据
          String name1=req.getParameter("name");
          //拼接sql语句
          String sql="select * from user where user='"+name1+"'";
         数据层
           执行sql语句查询数据
           select * from user where user=name;
    0x02:利用漏洞
           首先我们确认漏洞,以上述为例我们传入的name拼接的时候变成了
           select * from user where user=‘name’;
           可以看到我们传入的数据被当做一个条件的值
           那么如果我们传入的条件是admin’ and 1=1 #那么会发生什么呢
           select * from user where user=‘admin’ and 1=1 #’
           #直接将后面的内容注释掉不执行
           结果是返回正确的,如果and后面的条件为假时返回错误
           那么说明我们后面的条件语句是执行的,也就意味着我们可以通过
           浏览器直接执行我们想要执行的sql语句(访问数据层),不需要任何权限。
           同样我们也可以通过这样admin' and 1='1语句绕过‘’
           select * from user where user=‘admin’ and 1=‘1’
           其实我们的目的就是构造可以执行的sql语句,获取信息
           下面我们就可以通过sql 语句获取其他信息了
           我们可以想一下我还有一个管理员表admin,存放着管理员信息
           那么我们就可以构造语句
           select * from user where user=‘name’ union select * from admin;
           直接查询管理员信息。
    0x03:安全防护
           1)使用占位符
           2)对sql语句进行过滤
           3)不使用sql拼接的方式构造sql语句
           4)对参数类型进行限制
    原文地址:http://www.superzedlv.cn/?id=5
    未经允许,禁止转载
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表