ISCC2016 Web500 write-up

题目链接:http://101.200.145.44/web4/

首先查看源代码,里面有两段


管理员登录

先尝试进入admin,显示Forbidden。随后查看源码发现了提示


想到之前代码里面的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页面:

http://101.200.145.44/web4/proxy.php?url=http://121.42.171.222/proxy.php?url=http://101.200.145.44/web4/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

你可能感兴趣的:(ISCC2016 Web500 write-up)