文件上传漏洞-攻击示例(三)

admin 2023年3月18日16:42:05评论25 views字数 2636阅读8分47秒阅读模式

在本节中,将展示如何绕过常见的防御机制上传Web Shell,从而能够完全控制易受攻击的服务器。

 


混淆文件扩展名

即使是最详尽的黑名单也可能被经典的混淆技术绕过。假设验证代码区分大小写,那么就无法识别exploit.pHp实际上是一个.php文件,如果随后将文件扩展名映射到MIME类型的代码不区分大小写,那么这种差异允许将恶意PHP文件偷偷绕过验证,最终可能被服务器执行。

还可以使用以下技术获得类似的结果:

●提供多个扩展。根据解析文件名的算法,下面这种文件可能被解释为PHPJPG文件,exploit.php.jpg

●添加尾随字符。一些组件会去除或忽略尾随空格、点等:exploit.php.

●尝试对点、正斜杠和反斜杠使用URL编码(或双URL编码)。如果在验证文件扩展名时该值没有被解码,但后来在服务器端被解码,这也可以上传恶意文件:exploit%2Ephp

●在文件扩展名前添加分号或URL编码的空字节字符。如果验证程序是用PHPJava等高级语言编写的,但服务器使用C/C++的低级函数处理文件,这可能会导致文件名结尾出现差异,例如:exploit.asp;.jpgexploit.asp%00.jpg

●尝试使用多字节unicode字符,在unicode转换或规范化后可能会转换为空字节和点。如果文件名被解析为UTF-8字符串,则可以将xC0 x2Exc4 xAExC0 xAE等序列转换为x2E,然后在用于路径之前转换为ASCII字符

其他的防御措施包括剥离或替换危险的扩展名以防止文件被执行,但如果不递归这种防御机制,我们可以定位禁止的字符串,以便删除它仍然留下有效的文件扩展名。

比如,如果从exploit.p.phphp中把红色字符串剥离后,剩下的是什么?

 

场景试验-通过混淆文件扩展名上传Web Shell

https://portswigger.net/web-security/file-upload/lab-file-upload-web-shell-upload-via-obfuscated-file-extension

场景说明:

这个试验场景包含易受攻击的图片上传功能,某些文件扩展名被列入黑名单,但可以使用经典的混淆技术绕过这种防御。

试验目的:

要完成这个试验,需要上传一个基本的PHP Web Shell并使用它来泄露文件/home/carlos/secret的内容,并使用试验场景提供的按钮来提交此密钥。可以使用wiener:peter来登录自己的账号。

攻击过程:

wiener账号登录后,尝试上传一个.php的脚本,脚本内容如下,但是发现被禁止了,只能上传JPGPNG格式的文件

<?php echo file_get_contents('/home/carlos/secret'); ?>

文件上传漏洞-攻击示例(三)

把上传脚本的请求发送给Repeater,修改下上传文件名的后缀,上传成功

文件上传漏洞-攻击示例(三)

 

随后把获取这个文件的请求发送给Repeater,将得到的密钥提交即可完成本试验

文件上传漏洞-攻击示例(三)

 


有缺陷的文件内容验证

与隐式信任请求中指定的Content-Type不同,更安全地服务器会尝试验证文件的内容是否与预期内容实际匹配。

在图像上传功能的情况下,服务器可能会尝试验证图像的某些内在属性,比如尺寸。

例如,如果尝试上传PHP脚本,则它根本没有任何维度,因此服务器可以推断它不可能是图像,并相应地拒绝上传。

同样的,某些文件类型的可能总是在其页眉或页脚中包含特定的字节序列。这些可以用作指纹或签名来确定内容是否与预期的类型匹配。

例如,JPEG文件总是以字节FF D8 FF开头。

这是一种更可靠的文件类型验证方法,但即使这样也不是万无一失的,使用一些特殊的攻击工具,可以轻松创建在元数据中包含恶意代码的多种JPEG文件。

 

场景试验-通过多语言Web Shell上传远程执行代码:

https://portswigger.net/web-security/file-upload/lab-file-upload-remote-code-execution-via-polyglot-web-shell-upload

场景说明:

这个试验场景包含易受攻击的图片上传功能,尽管它会检查文件的内容以验证它是否确实为图像,但仍然可以上传和执行服务器端代码。

试验目的:

要完成这个试验,需要上传一个基本的PHP Web Shell并使用它来泄露文件/home/carlos/secret的内容,并使用试验场景提供的按钮来提交此密钥。可以使用wiener:peter来登录自己的账号。

攻击过程:

wiener账号登录后,尝试上传一个.php的脚本,脚本内容如下,但是发现被禁止了。尝试利用以前的攻击方式都不成功,说明针对文件特性做了限制

<?php echo file_get_contents('/home/carlos/secret'); ?>

文件上传漏洞-攻击示例(三)

 

找一张JPGPNG的图片,利用"exiftool"这个图片工具来做张一句话木马图片,先用这个工具看下文件属性,可以看到是PNG类型的,这个文件上传没有限制

文件上传漏洞-攻击示例(三)

 

接下来在图片中提交评论,先简单测试下,语句如下:

exiftool –Comment="test123" image.png

再查看下图片详细信息,可以看到图片中被添加了评论

文件上传漏洞-攻击示例(三)

 

在评论中插入木马语句,因为需要定位密钥的位置,所以我们在盗取文件内容语句的前后分别加上"START""END"用于方便定位

exiftool -Comment="<?php echo 'START' . file_get_contents('/home/carlos/secret') . ' END'?>" image.png

文件上传漏洞-攻击示例(三)

 

修改文件后缀,把pgn改成php,再用指令查看下文件类型,还是PNG

文件上传漏洞-攻击示例(三)

 

上传这个文件,发现可以绕过限制上传成功了,获取下这个文件,然后在响应中定位到密钥的位置,上传密钥即可完成本试验

文件上传漏洞-攻击示例(三)


试验小结:

绕过图片格式检查其实还是其他方式,关键要看过滤机制是通过哪些方面来判定是否是图片,有些过滤会以文件开头的编码作为特征进行判断。


文件上传漏洞-攻击示例(三)


访问控制和权限提升漏洞-概念梳理

信息泄露漏洞-概念梳理

业务逻辑漏洞-概念梳理

命令注入攻击(上)
目录遍历攻击(上)

份验证漏洞-概念梳理

SQL注入攻击-检索隐藏的数据
HTTP高级请求走私-响应队列中毒
HTTP Host头漏洞攻击-概念梳理


原文始发于微信公众号(H君网安白话):文件上传漏洞-攻击示例(三)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月18日16:42:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   文件上传漏洞-攻击示例(三)http://cn-sec.com/archives/1225662.html

发表评论

匿名网友 填写信息