js 上传文件_CTF从入门到提升(九)文件上传以及相关例题分享

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

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

客户端校验——JavaScript

首先来看一下最简单的客户端校验,文件上传是文件从本地到传输到远程服务器,中间经过了三个步骤,在你的客户端(自己电脑)本身做一个文件检测,或者文件传到后端服务器之后,在后端服务器上对文件做检测,简单的就是客户端校验JavaScript校验。文件是在网页做上传,所以javascript就会在你的浏览器上运行。

这里有一些js代码及注释,方便大家对文件作出判断:

8d4dc868879e9639108077afb2e9133e.png

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

禁用js

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

0c755e1e0b61b0ba93b8c8458f5a9666.png

6f7ebc73e62cb4f1a2f2bb7b15ab3527.png

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

1f8296b7004315ff70959f4682f1ec69.png

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

bf106e2d664da69011462d58a1f1c9b6.png

抓包改包

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

632791c74cd77f52e152dd00f26091b4.png

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

7455c5d79377e5bbb30eac971310ec6a.png

9e1fbf5052dded8dff91db806b414f38.png

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

MIME类型检测

8bccdeeecc65e8d4159003803f85294c.png

89030a79801bd7d281894d24653f2610.png

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

2b7cb365132f0fd17b4b5d3c3e344e02.png

9290e439ca3e76b9fa6f5ee8ca14aff0.png

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

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

判断后缀名

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

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

cefcac3b254d6018cf8015de58820c9b.png

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

绕过方法

e55500ef72364e4e9b5119a5ddd340e8.png

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

12bb7b153e3bf9686051c30c185638be.png

d1c212c845c8336d18b1f9e18a4942cf.png

7fca89f779da8cee6ba179fb4585111d.png

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

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

1eb76fe53d47cf60062bb92930683a4f.png

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

284131125728e2e5aa68d0ccb5f28f84.png

ddb9b2582a8bcc49090b69418c91854e.png

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

ba8bebc24893289661b24d51bb65f0d3.png

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

使用00截断

5a26cf06c3cbccba9b0c664971edf151.png

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

举例

5203a9a1f08c7a5919fc38fc3d4bcc6d.png

0edf8330789334a08f2c2b8cf9420f3e.png

562692146d7936c33e68f2caf3b82b2b.png

6e0efbcd4e62eec309291daea4dd077f.png

81c9902289e5210b830347921b6e4a91.png

70a2153242b0c7465161dec3d5d38700.png

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

224a05b779641062dfc3077981200827.png

718b45b1d01503536e46ecaaa5f04159.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值