SQL注入

  • SQL注入产生的原因
    • 服务器未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为
    • 本质上是用户输入的数据被当作代码来执行了
  • 注入的原因
    • 代码对SQL语句的参数过滤不严格
    • 未启用框架的安全配置。例如:PHP的magic_quotes_gpc
    • 未使用框架安全的查询方法
    • 测试接口未删除
    • 未启用防火墙
    • 未使用其他的安全防护设备
  • 注入的条件
    • 用户可以传参
    • 用户输入的语句被带入数据库进行查询
  • 利用场景
    • 登录功能
    • 搜索功能
    • 详情页
    • 商品购买
    • 任何和数据库存在交互的地方都有可能存在
  • 漏洞的危害
    • 数据库信息的泄露:脱库
    • 网页的篡改:通过操作数据库对特定网页进行篡改
    • 网页被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击
    • 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员账号被篡改
    • 服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统
  • 类型
    • 数字型、字符型
    • 关键
      • 构造闭合
    • 相关函数
      • order by – 对字段进行排序
      • group_concat() – 将字段连接起来,输出字符串集合,逗号隔开
      • limit – 限制select的输出数量
      • database() – 当前数据库名
      • version() – 数据库版本号
      • user() – 用户名
    • 报错型
      • 原理
        • 利用数据库中个别函数进行报错使用
      • 当页面没用正确的返回错误信息时,就可以利用报错注入
      • 相关函数
        • updatexml()
          • updatexml(目标xml内容,xml文档路径,更新的内容)
        • extractvalue()
          • extractvalue(目标xml文档,xml路径)
    • 盲注(时间、布尔)
      • 场景
        • 后台使用了错误信息屏蔽方法
        • 无法根据错误信息进行判断
      • 函数
        • lenght() 获取字符串长度
        • substr() 截取字符串
        • ascii() 把字符串转换为ascii码值
    • 宽字节
      • 数据库(GBK)和网站(ACSII)的编码不同
      • 场景
        • 网站使用了addslashes()函数或者开启了魔术单引号,而MYSQL数据库为GBK,就会造成宽字节注入
      • 注入‘ “ \ 空字符 都会被转义\' \" \\ \
      • 通过使用%DF结合为%DF\ 会被转义为%DF%5C%27是一个宽字节,从而构造闭合,进行注入
    • 二次 注入
      • 原理
        • 是通过与数据库服务器进行交互的过程再次进行注入
      • 利用条件
        • 用户输入恶意语句
        • 数据库把用户输入的数据没有做任何更改,直接进行存储
        • 在用户取出数据的过程中,数据库将用户输入的数据完整且没有做任何修饰的展示给用户
      • 利用场景
        • 常常发生在注册界面,插入恶意语句,在仅知道管理员的账号,不知道密码的情况下,改掉管理员密码

你可能感兴趣的:(网络安全,sql,数据库,服务器)