自建环境_文件上传

前言

这个是在云服务器利用docker搭建的

目标就是将php文件上传到服务器上

V1

Pasted image 20240804133609.png

Pasted image 20240804131607.png
只允许上传图片

但是发现过滤是由前端js代码实现
有一个特征就是:如果是前端不通过,那就不能发包
Pasted image 20240804131816.png

解决方法也很简单

也就是先将php文件类型重命名为.jpg
然后在发送的包里面将文件类型改为.php
Pasted image 20240804133429.png

V2

Pasted image 20240804133531.png

这一关的思路就是利用APACHE的配置文件来构造出一个文件解析漏洞
使得上传的图片文件会在服务器中当作php文件来解析

由于.htaccess 文件可以存放在任何你希望控制配置的目录中,并且会对该目录及其所有子目录生效。
所以我们上传的文件名为.htaccess
文件内容为

AddType application/x-httpd-php .jpg

也就是会将.jpg文件当作php文件来处理

V3

Pasted image 20240804142907.png

Pasted image 20240804143000.png

也就是后端过滤的逻辑是通过Content-type来确定文件类型,所以我们只需要确保是图片的type就可以实现绕过

这里还有一点不理解,那就是明明后端都把这个文件识别成图片了,为什么这个文件还能被当作php文件来被处理

V4

Pasted image 20240804143638.png

Pasted image 20240804145117.png

V5

Pasted image 20240804160944.png
这里给的提示是利用黑名单来过滤,检测到黑名单中的内容,就将其替换为空字符

但是他只是替换一次,也就是没有进行循环过滤
可以在数据包中构造后缀名为.pphphp
过滤后后缀名就变为了.php

V6

Pasted image 20240804161828.png

这一题会将php后缀修改为一个空格,所以上一题的思路也就不能用了
由于这个之过滤小写的php,所以我们可以将后缀修改为PHP phP
注意windows是对大小写不敏感的,所以如果是基于windows的服务器,可以改为大小写混杂,但是linux服务器只能都为大写或者都为小写

Note

Windows大小写不敏感
Linux大小写敏感

V7

Pasted image 20240804163108.png

注意这种漏洞只有在低版本php才有

攻击思路也就是利用结束符%00
Pasted image 20240804163449.png

现在的话我们上传的文件名就变为a.php

V8

这一题和上一题是差不多,但是又不完全一样
Pasted image 20240804172110.png

也就是他的路径并不是包含在POST头中,而是在content里面
注意,要进行一步解码
Pasted image 20240804172347.png
也就是有终止功能的符号是%00解码的结果,而如果此符号在url上面,会自动进行解码,而在post下面就需要手动进行解码

V9

Pasted image 20240804172720.png

这一关也就是利用了黑名单对文件类型进行了限制,但是可以将后缀改为其他的php类型就可以绕过,如php3

V 10 条件竞争

Pasted image 20240804174342.png
这段代码是利用白名单进行过滤,但是这段代码逻辑有漏洞可以被我们利用
也就是他这段代码是先将文件上传上去,然后再判断,如果这个文件不合规,则再删除

条件竞争

条件竞争是指一个系统的运行结果依赖于不受控制的事件的先后顺序。当这些不受控制的事件并没有按照开发者想要的方式运行时,就可能会出现 bug。尤其在当前我们的系统中大量对资源进行共享,如果处理不当的话,就会产生条件竞争漏洞。

攻击者上传了一个用来生成恶意 shell 的文件,在上传完成和安全检查完成并删除它的间隙,攻击者通过不断地发起访问请求的方法访问了该文件,该文件就会被执行,并且在服务器上生成一个恶意 shell 的文件。至此,该文件的任务就已全部完成,至于后面发现它是一个不安全的文件并把它删除的问题都已经不重要了,因为攻击者已经成功的在服务器中植入了一个 shell 文件,后续的一切就都不是问题了。

不过竞争的马因为生存周期短的原因,所以和普通的 Webshell 不太一样,他的使命是在有限的生命中等待一个有缘人的光顾,然后快速生成一个小 Webshell,落红不是无情物,化作春泥更护花(泪目)。这类的 Webshell 内容大体上如下:

<?php fputs(fopen('xiao.php','w'),'<?php eval($_REQUEST[1]);?>');?>

这段代码也就是新创建一个文件来写入后门代码

所以我们的思路也就是不断进行文件上传和对他的访问
我们可以通过brup实现
Pasted image 20240804194745.png
这样他就会不断发送这个包

Pasted image 20240804194822.png
之后就会出现后门代码

V 11 二次渲染

Pasted image 20240804195059.png

Pasted image 20240804200358.png

所以说这里用gif是最简单的,也就是我们需要将代码插入到图片不会被更改的区域

V 12

Pasted image 20240804200604.png

这一题关注于move_uploaded_file($temp_file, $img_path)函数的漏洞
也就是如果可以自己控制上传文件的重命名,也可能存在此漏洞
我们可以将文件名后缀改为
.php/.