• SQL注入原理、常见思路之Access手工注入实战


    注入攻击

    • 定义:注入攻击发生在当不可信的数据作为命令或者查询语句的一部分, 被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器, 以执行计划外的命令或者访问未被授权的数据。

    注入攻击常见类型有:

    • SQL 注入
    • OS 命令注入
    • XML 注入
    • LDAP 注入

    SQL 注入定义:当应用程序将用户输入的内容, 拼接到SQL 语句中, 一起提交给数据库执行时, 就会产生SQL 注入威胁。

    在这个URL中“?”后面跟接的是查询参数,

     SQL结构化查询语言:select * from news where id = 45;

               select * from news where id = 43;

    id = 45来源于客户的输入,我们可以修改id = 43参数修改网页的内容。修改的参数如果拼接到SQL语句中被执行,就说明这个地方存在注入漏洞。

    注入点怎么判断:

    select * from news where id = 45 and 1 =1;

    select * from news where id = 45 and 1 =2;

    网页并没有报错

     看到数据库出错,说明SQL语句被执行

    逐字猜解法( 明小子、阿D 工具采用此方法)以下语法适用于Access数据库

    1 、判断有无注入点

    • and 1 = 1
    • and 1 = 2

    2 、猜表名( 一般的表的名称无非是admin adminuser user pass password 等)

    • and (Select count(*) from 表名) < > 0

     只要表存在,不为空就有数据,上图count为5,<>表示不等于0,5不等于0逻辑为真

    • and exists (select * from 表名)

    name表不存在,数据库报错。我们要换一个角度,从开发者的角度去猜一个表名

     说明存在admin这个表名,逻辑返回为真,网页返回正常。

    3 、猜列名

    • and (Select count(列名) from 表名) < > 0
    • and exists (select 列名from 表名)

     username列名不存在

     同样的,我们判断出在admin这个表里。存在admin字段、password字段

     判断admin这个字段只有1行。因为count等于1,1>0成立。1>1不成立


    4、判断内容长度

    • and (select top 1 len(user_name )from admin)=5  #(user name 的长度= 5 , 正常则= 5 , 也可以用> , < 号去判断)。top1 表示如果有10列结果只取第一列,mysql数据库用limit

     判断用户名admin长度为5,同样的判断password长度也为 5

    5、截取字符串转换为ascii 码进行数值比较, 判断ascii码值:

    • and (select top 1 asc(mid(user_name,1,1)) from admin)=97    #判断第一位( 97 代表的 ‘a’ 的 ascii 值)
    • and (select top 1 asc(mid(user_name,2,1)) from admin)=97       #判断第二位,(user_name,1,1)前面的‘1’代表第几位,后面的‘1’代表取几个字符

    知道内容的长度,我们逐一去比较每一个字符

     判断出admin字段的第一位ASCII码值为97,因为97>97不成立,97>96成立,所以在拼接SQL语句时>97页面报错。

     同理admin字段的第二位ASCII码为100,根据这样的步骤我们就能猜出admin字段和password字段,获得管理员登录的账号密码。

    总结

            只要是和数据库交互的查询参数,能猜到并被带到数据库中查询的,我们都可以认为存在注入。如果数据传递不是URL,而是通过post表单,例如我们买东西生成的订单号,不是自己输入的,而是通过post传递到数据库,我们可以在数据体中用burp抓包。一般存在注入点的地方包括输入账号密码的表单,搜索功能等,只要是与数据库交互的地方。

  • 相关阅读:
    20道JS原理题助你面试一臂之力!
    10实用的JS实用技巧
    10实用的JS实用技巧
    比尔盖茨的30条经典语录
    比尔盖茨的30条经典语录
    成为优秀程序员应该具备的8个特质
    成为优秀程序员应该具备的8个特质
    不懂开发的人员,请不要随意说这功能很容易实现
    不懂开发的人员,请不要随意说这功能很容易实现
    15句乔布斯经典语录(中英文)
  • 原文地址:https://www.cnblogs.com/52kj/p/12401714.html
Copyright © 2020-2023  润新知