小迪文件上传47~ 笔记总结

Untitled

Untitled

学习前必读:

1、课前一定要明白:
无文件解析==安全问题上,格式解析是一对一的(不能jpg解析php)==
换句话来说有解析错误配置或后缀解析漏洞时才能实现格式差异解析

2、文件上传安全指的是攻击者通过利用上传实现后门的写入连接后门进行权限控制的安全问题,对于如何确保这类安全问题,一般会从原生态功能中的文件内容,文件后缀,文件类型等方面判断,但是漏洞可能不仅在本身的代码验证逻辑中出现安全问题,也会在语言版本,语言函数,中间件,引用的第三方编辑器等存在缺陷地方配合利用。另外文件上传也有多个存储逻辑,不同的文件存储方案也会给攻击者带来不一样的挑战!

#测试环境安装参考:

https://github.com/ffffffff0x/f8x

https://github.com/fuzzdb-project/fuzzdb

https://github.com/sqlsec/upload-labs-docker

1.docker安装

f8x -d 或 f8x -docker

2.进入文件夹

cd upload-labs-docker切换到upload-labs-docker目录

3.一键部署

docker-compose up -d

1、前端js

如何判断是否是前端验证呢?

首先抓包监听,如果上传文件的时候==**还没有抓取到数据包,**但是浏览器就**提示文件类型不正确**的话,==那么这个多半就是前端校验了

image-20250503135559837

查看页面源代码发现有进行过滤

image-20250503135657026

如何绕过?

第一种方式

  • 首先将木马文件的后缀修改为jpg,可以通过过滤的文件后缀
  • 通过burp抓取到数据包,修改回对应的木马文件解析后缀
  • 木马程序成功上传,即可通过哥斯拉,获取权限

image-20250505095851322

发送数据包 即可上传成功

第二种方法

  • 鼠标右击检查
  • 选取页面元素 选中upload
  • 将checkfilesuffix改为 true即可上传

image-20250505100533550

2、解析上传.htaccess(配置 Apache Web 服务器行为的配置文件)

首先上传php文件发现报错显示文件格式错误

AddType application/x-httpd-php .png

.htaccess 修改解析配置文件
借助这个配置让.png的命名文件当做类型application/x-httpd-php执行(php的类型)
当做php执行

绕过方法

如果使用哥斯拉上传的时候出现了

Untitled

修改你的有效载荷为PhpDynamicPayload

3、MIME类型-(修改文件类型,抓包修改回文件类型)

Content-Type:image/png

这里我们直接上传php文件 显示文件类型不正确

image-20250505104225612

绕过方法

  • 1.将包含木马的php文件后缀修改为png

  • 2.使用burpsuite抓包 将png文件后缀修改回php

  • 3.上传成功后访问文件url路径

  • 4.哥斯拉连接

image-20250505104634172


4、文件头判断

Untitled

image-20250505104941664

绕过方法

  • 将包含一句话木马的php文件前面加入文件头 (GIF89a8)gif文件默认的文件头
  • 将php文件上传 用burpsuite进行抓包
  • 对文件的content-type进行修改为:image/gif
  • 成功上传 访问图片链接
  • 哥斯拉获取权限

image-20250505193514290

image-20250505193234845

5、黑名单-过滤不严

Untitled

image-20250505194002036

这行代码使用str_ireplace函数来检查上传文件的名称($name),如果文件名中包含黑名单中的任何扩展名,就会将这些扩展名替换为空字符串。str_ireplace函数是不区分大小写的,这意味着即使扩展名是大写或混合大小写,也会被替换掉。

绕过方法

  • 上传php文件根据代码提示黑名单对关键字有进行过滤
  • 抓包 将php文件后缀修改为.pphphp(双写后缀绕过)或者修改为php2就能绕开过滤

6、黑名单-过滤不严(二)

image-20250505194831641

同样的跟上提一样

  • windows:大小写过滤不敏感
  • linux:大小写过滤铭感

绕过方法

  • 1.将木马文件的后缀使用大小写绕过 .phP 或者使用.php2不包含在黑名单里面的后缀即可上传成功

7.低版本GET-%00截断

URL路径出现在POST的URL中自动解码一次
/var/www/html/upload/x.php%00

原理:将木马文件以.jpg格式上传,可以获得到一个对应.jpg文件img src=”./upload/9720240216044425.jpg通过修改POST中URL路径使用%00截取,也就是说只有前面x.php被拼接到名称中,后面都被舍弃,在文件解析时候,依照被拼接的x.php进行文件解析,木马文件被成功解析
Untitled

Untitled

如何绕过

  • 上传文件 抓包发送到repeater 查看返回包数据 显示php版本为5.2.17
  • 将php修改为jpg 上传抓包 将post 中的url路径加上**/var/www/html/upload/a.php%00**
  • 访问图片地址复制到哥斯拉
  • 链接后面获取权限

8.低版本POST-%00截断

Untitled

手工解码一次
…/upload/x.php%00 二次解码

URL路径出现在POST下面的数据包中,需要手动解码

绕过方法

  • 1.上传木马文件为.jpg格式抓包 发现url路径出现在post下面的数据包中

  • 将./upload/后面加上**x.php%00,并选中该行,右键选择Convert selection → URL →URL-decode**将所选内容转换为 URL →→URL 解码(进行手动转码)

  • 访问图片地址 复制地址

  • 哥斯拉链接

  • Untitled

Untitled*


9、黑名单-过滤不严(三)

image-20250505202447011

如何绕过

  • 上传文件 抓包发送到 Intruder
  • 选择Clear$清除所有选中,选择 ∗ ∗ 木马文件后缀 p h p ,并按下 A d d 清除所有选中,选择木马文件后缀php,并按下Add清除所有选中,选择∗∗木马文件后缀php,并按下Add替换该后缀
  • 选择==Payloads,Payload Options→Load导入对应php后缀替换字典
  • 选择右上角Start attack,发现Length的长度不同,1573的是没有替换成功的,1625是替换成功的(不是绝对的,还需要通过哥斯拉验证后妈是否可以连接才能确定)
  • 使用替换成功的后缀文件 上传 复制图片地址
  • 哥斯拉拉链接
image-20250505203514278

10、条件竞争

Untitled

image-20250505205539803

如何绕过

  • 首先创建文件 写入条件竞争的一句话木马 ‘);?>
  • 上传我们包含木马的文件
  • 访问上传木马文件的url地址http://192.168.162.128:30010/upload/2.php
    • 在黑盒环境下 得先上传图片去了解图片上传的具体路径 再去访问我们的木马文件上传路径
  • 抓包 访问木马文件上传的url地址
  • image-20250505210039120
  • 点击发送到 Intruder 选中 payload type -> Null Payloads -> Continue indefinitely -> start attack进行不断的发包
  • 我们这里对文件上传进行抓包
  • image-20250505210526111
  • 和上面的步骤一样 点击发送到 Intruder 选中 payload type -> Null Payloads -> Continue indefinitely -> start attack
  • 此刻我们上传不断发包 请求不断发包 形成条件竞争
  • 最后我们再访问http://192.168.162.128:30010/upload/xiao.php
  • 就会在在生成xiao.php文件
  • image-20250505211319284

11、二次渲染

image-20250505211511192

如何绕过

  • 我们这里先上传正常的gif图片 ,导出上传后渲染过的图片
  • 将两张图片放进010编辑器进行对比 打开工具 -> 比较文件 选择文件保存地址对比保留部分 ,在保留部分添加一句话木马<?php eval($_POST["pass"]);?>
  • 这里执行文件包含漏洞 执行图片后门代码

Untitled


12、函数缺陷

image-20250505213229157

move_uploaded_file是一个用于将上传文件移动到指定位置的 PHP 函数

1
move_uploaded_file(string $filename, string $destination): bool

其中,$filename是上传文件的临时路径,$destination是目标位置的路径和文件名。

这个函数的作用是将上传的文件从临时目录移动到指定的位置。它通常用于处理文件上传功能,确保上传的文件能够被正确保存到服务器上的指定位置

绕过方法

  • 在填写文件要保存的文件名称这里 将我们的包含木马的1.php文件改为1.php/.
  • 上传成功 访问图片的url地址 复制
  • 哥斯拉链接

13、代码审计 - 数组绕过

—————————–174283082921961
Content-Disposition: form-data; name=“save_name[0]”

http://2.php/
—————————–174283082921961
Content-Disposition: form-data; name=“save_name[2]”

gif