学习文件上传最重要的两点:

1、无文件解析安全问题上,格式解析时一对一的(jpg不能解析为php)

即:只有存在错误解析配置或者后缀解析漏洞时才可以实现格式差异解析

2、文件上传安全就是攻击者利用文件上传实现后门的写入,连接后门进行权限控制的安全问题

今天主要是通过靶场的练习来进行学习的

一、实验环境配置

1、f8x的配置

在今天学习的时候使用到了一款集成化的自动化部署工具f8x,它可以直接帮我们搭建所需要的环境。

https://github.com/ffffffff0x/f8x#

首先先在服务器上下载这个工具

下载完成后使用配置所需要的环境变量,然后启动f8x

看到这个图标就表示f8x安装成功了

2、靶场的搭建

在完成f8x安装后,可以直接使用f8x来帮助我们搭建docker,

在完成docker的搭建后,进入我们所用到的靶场项目。靶场所用到的upload-labs-docker项目如下链接

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

在完成upload-labs-docker的下载后,直接进入他的目录,搭建靶场。

docker compose up -d

注:现在的版本是新版所以docker与compose之间没有"-"。

然后使用

docker ps

来查看开放的端口

至此环境搭建全部完成。

二、30001实验

进入30001靶场

当我们上传文件时可以发现jpg格式的文件可以上传,而php格式的无法上传。

判断文件过滤在前端还是后端,可以通过检查文件的源码或者抓包工具来判断

可以看到检查逻辑实在前端的。

然后我们可以尝试绕过前端的过滤来上传后门,先使用哥斯拉生成一个php的后门文件

然后把他的后缀改为合法的jpg格式,然后进行上传。同时打开burpsuit来进行抓包

抓到后,可以对抓到的数据包中的后缀进行更改,改回php格式。然后就会上传成功。上传成功后。使用哥斯拉尝试进行连接,发现可以连接成功

三、30002实验

进入靶场

通过观察前端的源代码以及抓包发现,他的文件上传的过滤逻辑是在后端的。通过页面的提示,我们可以发现他的漏洞在htaccess这个文件中。然后我门将后门文件上传,并且通过burpsuit进行抓包,对文件名进行修改为 .htaccess

将原始的数据包(如上),改成如下。

其中 AddType appication/x-httpd-php .png 作用是将文件在解析时将png的文件可以解析为php代码的执行文件

在完成这一步后,上传一个新的png后缀的后门文件,然后尝试进行连接,发现可以连接成功

这个是属于错误解析配置或者后缀解析漏洞时才可以实现格式差异解析.

四、30003实验

进入靶场、

通过页面显示可以初步判断为使用type来进行文件过滤,可以抓包进行看一下

可以看到Content-Type: application/octet-stream

然后我们尝试上传一个jpg的看一下

我们将文件后缀改为php的

发现可以上传成功,然后就可以进行后门的连接。

他的原理就是通过content-type来进行文件的过滤

五、30004实验

进入靶场

通过提示我们可以看出来,他是使用文件的头部来进行判断文件类型是否合法的。我们可以先上传一个文件按照之前的几个实验来看一下都无法上传成功。因为每个文件的头奴都是不一样的。例如

png

php

等等不一一列举,然后根据这个toubu我们可以在php文件对其进行修改

然后尝试上传,发现还是不行,说明他还有其他的过滤措施,然后进行抓包,修改他的content-type 后发现可以上传成功。

所以,本题的原理是有些过滤时进行头部过滤,并且可能采用多重的过滤。

六、30005靶场

进入靶场

可以看出来这题考查的时黑名单验证。通过页面给的源代码可以看出来,它是将出现在黑名单的文件后缀给代替为空。我们可以上传一个试一下

可以看出来这是有东西上传成功的,但是没有显示。我们可以通过抓包来进行绕过。可以将文件改成这样的形式。当中间的php被相处后,会形成完整的文件名

我们访问一下,发现可以上传成功。然后就可以进行后门链接了

原理就是:这个黑名单验证只会验证一次,无递归的验证,会存在漏洞。而且它存在大小写的漏洞

七、30006实验

进入靶场

这题考察的就是大小写的问题。我们先上传一个php的文件,发现不能成功,然后观察他所给的代码,只对小写进行了过滤。并且提示了在windows环境中,windows是对大小写不敏感的。

我们将数据包改成这样,上传发现是可以上传成功的。

这题考查的是在黑名单过滤的时候可能参在大小写的漏洞。但是只能在windows上

八、3007实验

进入靶场

这个实验他的页面给了提示是要php版本小于5.3.4。所以我们可以先上传一下,抓个包看一下他的php版本。

可以看出php版本是5.2.17

 然后我们观察数据包,如果上传的文件是jpg格式的,他的保存路径是

在请求数据包中,路径就是

然后页面告诉我们"\x00"会作为字符串结束符。所以我们可以将路径改成这个样子

来将后面的语句截断,现在我们再来上传试一下。

可以看到上传成功了

我们尝试访问一下

可以看到上传成功了。

这个方法只适用在:php版本小于5.3.4、

九、3008实验

进入靶场

可以看到这两关应该考的是相同的点

抓包看一下

这次POST没有上传路径了,上传路径在下面的位置,如果按照上一个实验那样更改。并不能上传成功

这是因为,如果路径在下面这个位置,就需要对%00进行url的解码

然后发送数据包

这次就成功了。

原理是:在浏览器中会有编码与解码的原因。

上面的位置:url %00 (自动的解码一次)

下面的位置:post %00 (手工解码一次)

十、30010

进入靶场

这一关考察的是条件竞争。条件竞争是指一个系统的运行结果依赖于不受控制的事件的先后顺序。当这些不受控制的事件并没有按照开发者想要的方式运行时,就可能会出现 bug。

原理就是:在这一关中文件的过滤是先进行了将用户提交的文件上传到服务器,在进行判断,这样文件是在服务器中出现过一瞬间的,就可以利用这一点来进行攻击。

首先我们先创建一个php文件

然后使用burpsuit持续对这个网站进行文件的上传

在上传完成和安全检查完成并删除它的间隙,对这个上传的文件不断地发起访问。

该文件就会被执行,并且在服务器上生成一个恶意 shell 的文件。

至此文件上传成功

后面几节有点懒了,没做笔记了

更多推荐