题目链接:http://101.200.145.44/web4/
首先查看源代码,里面有两段
<img src="proxy.php?url=http://imgsrc.baidu.com/forum/w%3D580/sign=cae9ccf405082838680ddc1c8898a964/90529822720e0cf33a5c29100846f21fbf09aab6.jpg" alt="">
<pre>
<p><a href="admin">管理员登录</a></p>
</pre>
先尝试进入admin,显示Forbidden。随后查看源码发现了提示
<!--<script>alert('admin ip is 121.42.171.222')</script>-->
想到之前代码里面的proxy.php,于是尝试用proxy.php登录121.42.171.222
http://101.200.145.44/web4/proxy.php?url=http://121.42.171.222/
但是被跳转强制跳转,尝试后发现有部分页面不会被跳转。
于是用字典开始扫描,最后发现一个200的响应 proxy.php
于是用两次proxy访问admin页面:
这次就可以成功登录了,在这里找到一个注册页面和登录页面,尝试登录之后发现只能登录admin账户。然后检查了robots.txt,发现
User-agent: *
Disallow:trojan.php
Disallow:trojan.php.txt
Disallow:check.php
Disallow:check.php.txt
遂访问trojan.php.txt,获得马的代码。这个文件是先进行了登录session的检测,然后下一段代码进行了混淆,解混淆后发现是eval($_POST[360])。
再访问check.php.txt 其中一段是
function checkpassword($user,$pwd,$pdo){
if($user!='admin'){
exit('you are not admin!');
}
$query="SELECT password FROM user WHERE username='admin'";
$result=$pdo->query($query);
if ($result!=null&&$result->rowCount()!==0){
while($row = $result->fetch()){
if ($row['password']===$pwd){
return 1;
}
}
}
return 0;
}
似乎没有注入点,不过从代码中看出只要有一个合法的admin账户就行。
于是又开始从register入手,尝试注册一个admin帐号。这里直接注册admin是被禁止的,于是把admin改为:
admin x
//admin和x之间有n个空格
再注册,成功。
用注册的密码登录,获得session后再用post访问trojan.php,即可获得flag