CTF从入门到提升(九)文件上传以及相关例题分享
作者: 日期:2019年09月09日 阅:4,924

      文件上传主要是配合一些漏洞的利用,普遍意义上的文件上传是指将信息从个人计算机传送至中央计算机,也就是我们所说的远程计算机,对站点来说,就是传到运行网站的服务器上。一般网站都有自己的逻辑,比如在网站的注册页面,你想要上传个头像,网站只需要你上传头像,而不是传其他类型的文件。

       CTF上传文件的目的是get shell,我们最终目的是拿到题目的flag,如果说存在一个上传的地方,很有可能它的目的就是通过上传的方式作为辅助或最终的方式去get shell。 上传文件会做一些防护来我们进行干扰,所以需要掌握常见的文件上传的安全检测方式。针对文件上传检测的方式如何做一个绕过

客户端校验——JavaScript

首先来看一下最简单的客户端校验,文件上传是文件从本地到传输到远程服务器,中间经过了三个步骤,在你的客户端(自己电脑)本身做一个文件检测,或者文件传到后端服务器之后,在后端服务器上对文件做检测,简单的就是客户端校验JavaScript校验。文件是在网页做上传,所以javascript就会在你的浏览器上运行。这里有一些js代码及注释,方便大家对文件作出判断

校验逻辑尽管很复杂,如果它的代码无法运行这个检测是不是就没有意义了可以直接绕过。

禁用js

比如说我上传一个文件,执行后系统提示:

我们看到这个弹窗就可以判断出代码是运行本地还是远程,不确定的话可以打开开发者模式去看它的校验是存在于本地,我们可以禁用js。

我一般喜欢用一些插件比如yesscript2,浏览器本身也是可以直接设置的。 使用插件后就可以上传成功了。

抓包改包

jpg结尾的文件是可以上传的,在文件发出的过程中,我们可以把包给截住从而绕过审核。我们按照刚才的图片上传方法试一遍:

如图显示,已经跳过js验证环节,把jpg改成php上传成功。

服务器端校验——content-type字段校验

 

l content type字段检测(文件类型检测)

  • MIME类型检测

​在传文件的时候它会显示你传的文件类型,确定你传上去的文件是什么。如果在后端做判断,它会检测文件名的字段,因为这个数据包我们能抓到,所以发出去的数据我们也可以做修改。改数据的前提条件是,要知道我们去改什么内容,这里列了一些常见的文件类型:

上传时把文件名改成上面对应的MIME扩展名,浏览器就会根据你上传的文件名来做判断,再抓包然后再把文件名改回去就可以了。构造成一个发出请求的数据包,它的type字段是正确的就可以。

 服务器端校验——后缀黑名单校验

  • 判断后缀名

黑名单校验就是不允许一些文件类型上传,和js代码有点类似,js是只允许一些文件可以上传。黑名单禁止的时候只能禁止一部分,会受限于开发者本身的知识量比如漏掉一些那种后缀名,导致存在一些可以突破的后缀名做解析。

获取文件后缀名,去检测后缀名是否在数组中,如下图,后缀名是php或php3就会禁止上传,结束退出。代码逻辑其实很简单,那么你要突破的时候,第一种第一种方法去突破不在黑名单里的后缀名就能解析到;

还有一种思路去对抗检测函数,这个函数是获取后缀名,如果是php的那可以换成其他 比如jpg。

  • 绕过方法

通过配置文件,我们是能够知道哪些文件能解析,哪些文件不能解析。

黑名单会受限于开发者的一个问题,我们可以利用这些方式去做绕过。

  • 配合Apache的.htaccess文件上传解析

目录中文件可以被解析,如果把文件名改成jpg再去读下这个目录,会认为这是张图片,不会被解析:

这种情况可以尝试去传改.htaccess,

文件传上去之后,不需要去重启服务器和中间件,传上去做解析会立即生效。

  • 使用00截断

先获取文件名,然后再把文件名保存下来。

举栗子:

如果文件名被截断,我们可以给文件名做修改

​完整课程:安全牛课堂《CTF从入门到提升

课程地址:https://www.aqniukt.com/my/course/8954​​​​​​​​

 ​​​​

关键词:

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章