教你如何突破上传文件获取 WebShe...
 
Notifications
Clear all

教你如何突破上传文件获取 WebShell 方法

1 Posts
1 Users
0 Likes
1,296 Views
(@taichi)
Member
Joined: 4 years ago
Posts: 408
Topic starter  

实际的环境中,很少有直接可以任意上传文件的漏洞 常见于前端限制,小东根据个人经验整理出主要的三大类突破文件上传拦截的方法。

方法教程

操作 说明 前端禁用JS 前端限制,禁用JS,去除input标签的accept属性 修改文件后缀 抓包工具,修改文件后缀为黑名单之外的后缀 修改文件后缀 修改文件后缀为index.jpg.php 修改文件后缀 %00截断,比如index.php%00.jpg 修改文件后缀 文件名末尾添加::$DATAwindows会把::$DATA之后的数据当成文件流,不会检测后缀名.且保持::$DATA之前的文件名 修改文件后缀 在linux主机上的文件名大小写敏感,文件后缀大小混写 修改文件后缀 在文件末尾添加空格,黑名单的方式没法儿检测 修改文件类型 抓包工具,修改Content-Type:image/png 修改文件后缀 修改文件名shell.php:.jpg,上传后会得到一个空的文件shell.php,然后修改文件名为shell.>>>或者shell.<shell.<<<shell.>><再上传,重写shell.php 换行解析 Apache2.4.0~2.4.29换行解析漏洞%0d%0a(CR,LF(回车,换行)) 未知后缀名 Apache配置AddHandler application/x-httpd-php .php不当导致未知后缀脚本执行 后缀名正则替换 这种需要构造,使得替换之后的可以重组成为新的可执行后缀,双后缀名绕过 修改上传路径 name="upload_file/1.php%00"; filename="shell.jpg" 条件竞争 条件竞争删除/重命名文件时间差绕过 图片马 copy code.jpg/b + shell.php/b hourse.jpg 图片重绘包含马 做一个就好了 上传压缩包 配合PHP伪协议、文件协议等读取执行本地文件 数据库写文件 UDFselect查询输入

实战事例

来自Upload-labs漏洞演示靶场的文件上传的第九关示例,一看到下面这种情况,是不是感觉完全没思路?

面对这样的情况,该怎么上传绕过呐?各位不妨先思考一下!

看到这样的情况是这样思考的:

1、什么操作系统?

2、如何绕过函数?

环境是自己的windows笔记本,那么通过windows系统特征可以尝试正则绕过,文件流::$DATA,大小写绕过,换行截断等方式。

如果是linux,就有文件大小写,换行截断,解析文件上传等等方式。

分析上面的文件:黑名单限制文件后缀,限制文件后缀大小写,去除::$DATA,限制上传.htaccess,难道这个题是假的?

这里可以尝试二次上传的方式,借助windows平台的正则匹配规则:

如下符号在windows平台下等效果

" => .

> => ?
< => *
  • 首先随便上传一个shell.php,使用抓包工具(比如:burpsuite),将文件后缀修改为:shell.php:.jpg
  • 此时,会在upload目录下生成一个名为shell.php的空文件:
  • 然后,修改数据包文件名为:shell.<<<,这里在move_uploaded_file($temp_file, '../../upload/shell.<<<')类似与正则匹配,匹配到.../../upload/shell.php文件,然后会将此次上传的文件数据写入到shell.php文件中,这样就成功写入我们的小马了。

在这里,对于文件上传的练习靶场,非常推荐Uplaod-labs这个项目: https://github.com/c0ny1/upload-labs

文章部分转自: https://www.freebuf.com/articles/web/201421.html


   
Quote
Share: