4.14文件上传刷题日记
buuctf[是兄弟就来传马
先传一个php木马
页面报错,随便改一个后缀,看看是黑名单还是白名单过滤,这里php代码前加GIF89a绕过图片大小检查
报错,接着试一下是不是MIME过滤
Content-Type: image/png
上传成功 /var/www/html/upload/743be915f2c6ab5de3600d87068cafd2/hack.jpg succesfully uploaded!
接下来修改.htaccess解析文件,记得改Content-type
1 | <FilesMatch "hack" > |
/var/www/html/upload/743be915f2c6ab5de3600d87068cafd2/.htaccess succesfully uploaded!
接着上传hack.jpg图片/var/www/html/upload/743be915f2c6ab5de3600d87068cafd2/hack.jpg succesfully uploaded!
拼接后的url蚁剑链接即可
ACTF2020 Upload
尝试上传php,发现前端拦截,上传png,用bp抓包改php,上传失败
尝试phtml,上传成功
Upload Success! Look here~ ./uplo4d/87d8f9288427fb50ed6e8dd6be21e62b.phtml
ps:buu上面的文件上传题都有bug,经常导致重定向
[SWPUCTF 2021 新生赛]easyupload1.0
同样是png文件改phtml,用蚁剑链接只能找到fakeflag,看了wp才知道在phpinfo()中,长知识了
[SWPUCTF 2021 新生赛]easyupload3.0
提示用文件组合,.htaccess秒了(nss平台没bug)
[NISACTF 2022]babyupload复现
上传各种文件,发现一直返回badname,查看源代码,发现source目录,访问后给了Python源码
代码粘到gpt,发现文件不能带点,根据文件名给一个id,再通过/file/uuid
访问文件,通过查询数据库得到对应文件名,在文件名前拼接uploads/
后读取该路径下上传的文件。
with open(os.path.join("uploads/", res[0]), "r") as f: return f.read()
绝对路径拼接漏洞
os.path.join(path,*paths)函数用于将多个文件路径连接成一个组合的路径。第一个函数通常包含了基础路径,而之后的每个参数被当作组件拼接到基础路径之后。然而,这个函数有一个少有人知的特性,如果拼接的某个路径以 / 开头,那么包括基础路径在内的所有前缀路径都将被删除,该路径将视为绝对路径
直接把文件名字改成/flag,访问得到flag