【THM-课程内容答案】:Web Hacking Fundamentals-Upload Vulnerabilities-Filtering
迄今为止我们几乎完全忽视了网页开发者用于防御文件上传漏洞的反制措施。在THM里你成功攻击过的每一个网站都毫无安全性可言。是时候做出改变了。接下来我们将探讨一些用于阻止恶意文件上传的防御机制以及如何绕过这些机制。首先我们来探讨客户端过滤与服务器端过滤的区别。当我们讨论脚本是“客户端”的时候在Web应用的语境下指的是该脚本运行在用户浏览器中而非Web服务器本身。JavaScript几乎是客户端脚本语言的通用选择尽管也存在其他替代方案。无论使用何种语言客户端脚本都会在你的浏览器中运行。在文件上传的场景中这意味着过滤动作会在文件上传至服务器之前完成。理论上这看似合理对吧在理想情况下确实如此但如果过滤这个动作发生在本地计算机上那就极易绕过。因此仅靠客户端过滤本身是一种极不安全的验证方法无法确保上传文件不包含恶意内容。相反正如您可能猜到的那样服务器端脚本将在服务器上运行。传统上PHP是主要的服务器端语言微软的IIS ASP紧随其后然而近年来其他选项C#、Node.js、Python、Ruby on Rails等的使用越来越广泛。服务器端的过滤往往更难绕过因为你面前没有代码代码是在服务器上执行的所以在大多数情况下也不可能完全绕过过滤器。因此我们必须形成一个适用现有过滤器的有效载荷让它仍然允许我们执行代码。考虑到这一点让我们来看看一些不同类型的过滤。扩展验证文件扩展名用于标识文件的内容。在实践中它们很容易改变所以实际上意义不大然而MS Windows仍然使用它们来识别文件类型尽管基于Unix的系统往往依赖于其他方法我们将在稍后介绍。检查扩展名的过滤器有两种工作方式他们要么将扩展名列入黑名单即列出不允许的扩展名要么将扩展列为白名单即列明允许的扩展并拒绝其他所有扩展名。文件类型筛选与扩展验证类似但更密集的是文件类型过滤再次验证文件的内容是否可以上传。我们将研究两种类型的文件类型验证MIME验证MIMEMultipurpose Internet Mail Extension 多用途互联网邮件扩展类型被用作文件的标识符——最初是在用在电子邮件作的附件传输时进行标识但现在也是在通过HTTPS传输文件时进行标识。文件上传的MIME类型附加在请求的头部看起来像这样MIME类型遵循type/subtype格式。在上面的请求中您可以看到图像“spaniel.jpg”已上传到服务器。作为合法的JPEG图像此上传的MIME类型为“image/JPEG”。可以在客户端和/或服务器端检查文件的MIME类型然而由于MIME基于文件的扩展名因此很容易绕过。幻数验证幻数是确定文件内容的更准确的方法尽管如此它们绝不是不可能伪造的。文件的“幻数”是文件内容开头的一串字节用于标识内容。例如PNG文件的最顶部将有这些字节89 50 4E 47 0D 0A 1A 0A。与Windows不同Unix系统使用幻数来标识文件然而在处理文件上传时可以检查上传文件的幻数以确保可以安全地接受。这绝不是一个有保证的解决方案但它比检查文件的扩展名更有效。文件长度筛选文件长度过滤器用于防止大型文件通过上传表单上传到服务器因为这可能会使服务器资源不足。在大多数情况下当我们上传shell时这不会给我们带来任何问题然而值得注意的是如果上传表单只期望上传一个非常小的文件那么可能会有一个长度过滤器来确保遵守文件长度要求。例如我们在上一个任务中成熟的PHP反向shell是5.4Kb大相对较小但如果表单期望的最大值为2Kb那么我们需要找到一个替代shell来上传。文件名筛选如前所述上传到服务器的文件应该是唯一的。通常这意味着在文件名中添加一个随机方面但是另一种策略是检查服务器上是否存在同名文件如果存在则向用户发出错误。此外文件名应在上传时进行消毒以确保它们不包含任何“可疑字符”这可能会在上传时对文件系统造成问题例如Linux上的空字节或正斜杠以及控制字符如和可能的unicode字符。这对我们来说意味着在管理良好的系统上我们上传的文件不太可能与上传前的已存的文件的名称相同所以请注意如果你设法绕过内容过滤你可能不得不寻找你的shell。文件内容筛选更复杂的过滤系统可能会扫描上传文件的全部内容以确保它不会欺骗其扩展名、MIME类型和幻数。这是一个比大多数基本过滤系统所采用的过程复杂得多的过程因此本节课将不涉及。值得注意的是这些过滤器本身都不是完美的——它们通常会相互结合使用提供多层过滤器从而显著提高上传的安全性。这些过滤器中的任何一个都可以应用于客户端、服务器端或两者。同样不同的框架和语言都有自己固有的过滤和验证上传文件的方法。因此可能会出现特定语言的漏洞例如在PHP主版本5之前可以通过向恶意.PHP文件附加一个空字节后跟一个有效的扩展名来绕过扩展名过滤器。最近还可以将PHP代码注入到其他有效图像文件的exif数据中然后强制服务器执行它。如果您感兴趣欢迎您进一步研究这些内容。【题目答案】传统上占主导地位的服务器端脚本语言是什么 What is the traditionally predominant server-side scripting language?PHP当按文件扩展名进行验证时您会称之为可接受的扩展名列表服务器拒绝列表中没有的任何扩展名吗 When validating by file extension, what would you call a list of accepted extensions (whereby the server rejects any extension not in the list)?Whitelist[研究]上传CSV文件时您希望看到什么MIME类型 [Research] What MIME type would you expect to see when uploading a CSV file?text/csv
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2560293.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!