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

admin 2022年8月4日10:42:37评论51 views字数 2255阅读7分31秒阅读模式

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

 


利用不受限制的文件上传来部署Web Shell

从安全角度来看,最糟糕的情况是网站允许上传服务器端脚本,例如PHPJavaPython文件,并且还配置允许它们作为代码执行,这使得在服务器上创建Web Shell变得很简单。

Web Shell是一种恶意脚本,攻击者只需将HTTP请求发送到正确的位置,就可以在远程Web服务器上执行任意指令。

如果能够成功上传Web Shell,那么就可以有效地完全控制服务器,这就意味着可以读取和写入任意文件、泄露敏感数据,甚至可以使用服务器对内部基础设施和网络外的其他服务器进行攻击。

例如,下面的PHP一句话木马可用于从服务器的文件系统中读取任意文件:

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

上传后,发送对该恶意文件的请求将在响应中返回目标文件的内容。

 

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

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

场景说明:

这个试验场景包含易受攻击的图片上传功能,在将用户上传的文件存储在服务器系统之前不会对它们执行任何验证。

试验目的:

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

攻击过程:

wiener账号进行登录,登录进去后可以看到有个上传头像照片的地方

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

 

在本地系统我们新建个叫做attack.php的文件,文档内容如下:

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

在上传头像的地方上传这个文档,随后刷新下/my-account,再到Burp中去抓包记录,可以看到GET /file/avatars/attack.php的请求,在响应中找到密钥,在页面上方提交即可完成试验

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

 

试验小结:

一句话木马的脚本还有其他的,常用的一句话木马脚本是可以通过查询传递任意系统指令的,木马句法如下:

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

传递指令如下所示:

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

 


利用有缺陷的文件上传验证

在互联网上,不太可能找到一个网站对文件上传攻击没有任何保护,像我们在上面那个试验看到的那样。

但仅仅因为防御措施到位,并不意味着就有很强的防护。

接下来我们将研究Web服务器尝试验证和清理文件上传的一些方法,以及如何利用这些机制中的缺陷来获取用于远程代码执行的Web Shell

在提交HTML表单时,浏览器通常在POST请求中发送数据,内容类型为

Application/x-www-form-url-encoded

这适用于发送姓名、地址等简单文本,但不适用于发送大量二进制数据,例如整个图像文件或PDF文档,在这种情况下,内容类型

multipart/form-data

是首选方法。

考虑一个包含用于上传图像,提供图像描述和输入用户名字段的表单,提交此类表单可能会导致如下请求:

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

消息正文被拆分成每个表单输入的单独部分,每个部分都包含一个Content-Disposition标头,该标头提供其输入字段的一些基本信息。这些单独的部分也可能包含它们自己的Content-Type标头,它告诉服务器为所输入的数据使用哪种MIME类型。

网站尝试验证文件上传的一种方法是检查Content-Type标头是否与预期的MIME类型匹配。

例如,如果服务器只需要图像文件,那么它可能只允许image/jpegimage/png这样的类型通过,当这种类型的标头被服务器默认信任,而不进一步验证检查文件的内容是否与MIME类型匹配的话,可以通过攻击工具轻松绕过。

 

场景试验-通过Content-Type限制绕过Web Shell上传:

https://portswigger.net/web-security/file-upload/lab-file-upload-web-shell-upload-via-content-type-restriction-bypass

场景说明:

这个试验场景包含易受攻击的图片上传功能。网站试图阻止用户上传意外类型的文件,但仅仅依靠检查Content-Type来验证。

试验目的:

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

攻击过程:

wiener登录后,尝试上传原来的那个攻击attack.php攻击文件,会发现被阻止无法上传

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

 

Burp改成阻断模式,再次上传文件,在截获的请求中修改下类型后转发,看到可以成功上传了

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

 

随后刷新下/my-account,再到Burp中去抓包记录,可以看到GET /file/avatars/attack.php的请求,在响应中找到密钥,在页面上方提交即可完成试验

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

 

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


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

信息泄露漏洞-概念梳理

业务逻辑漏洞-概念梳理

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

份验证漏洞-概念梳理

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



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

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

发表评论

匿名网友 填写信息