文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像,附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断,比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式重命名后存储在指定的目录,如果说后台对上传的文件没有进行任何的安全判断或者判断的条件不够严谨,则攻击者可能会上传一些恶意的文件,比如一句话木马,从而导致服务器权限被获取。

 

防范文件上传漏洞的方法

  1. 验证文件类型、后缀名、大小
  2. 验证文件的上传方式
  3. 对文件进行一定复杂的重命名
  4. 不要暴露文件上传后的路径
  5. 等等

 

进入第一关

 

文件上传漏洞(pikachu)

 

提示我们只允许上传图片

 

但是我们打开F12看到

 

文件上传漏洞(pikachu)

 

这里的JS调用了一个checkFileExt的方法

 

文件上传漏洞(pikachu)

 

这个方法在后面也找得到,大致的意思就是判断文件的扩展名是不是为jpg、png、gif

 

我们知道这种前端的限制只能起到辅助作用,起不到实质性的作用

 

我们只需要把之前那个input标签的onchange的属性删除,让上传的时候触发不了这个方法

 

就可以达到我们上传的目的

 

文件上传漏洞(pikachu)

 

然后我们上传我们的php一句话木马

 

文件上传漏洞(pikachu)

 

访问路径,测试一下我们的一句话是否能执行

 

文件上传漏洞(pikachu)

 

 

第二个栏目是考MIME的

 

什么是MIME可以百度一下

 

文件上传漏洞(pikachu)

 

php里有一个$_file函数来获取请求头里面的Content-Type

 

因此,我们只需要用抓包修改请求头里Content-Type的值

 

就可以绕过验证

 

文件上传漏洞(pikachu)

 

 

第三个栏目—getimagesize

 

getimagesize()这个函数返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题

 

我们可以伪造图片头

 

文件上传漏洞(pikachu)

 

我们先普及一下基础知识

 

先查看一下他们的图片头

 

用linux的xxd命令

 

文件上传漏洞(pikachu)

 

发现png图片的头部十六进制都一样

 

那我们可以用windows的cmd命令把一张图片和一个php文件合起来变成一个文件

 

文件上传漏洞(pikachu)

 

安排一手

 

文件上传漏洞(pikachu)

选择两个文件

 

合成一个新的文件叫xxx.png

 

文件上传漏洞(pikachu)

 

表面上看还是这个图片

 

我们把xxx丢进kali看看

 

文件上传漏洞(pikachu)

文件上传漏洞(pikachu)

 

发现前面还是正常的图片,但是在最后跟上了我们的一句话木马

 

 

还需要了解的是

 

PHP的文件包含

 

include在发现错误的时候会继续执行后面的代码

 

当遇到我们的png的时候,会一直往下读取,执行到我们的一句话的时候就会正确执行

 

文件上传漏洞(pikachu)

 

上传的时候我发现在21行会报错

 

文件上传漏洞(pikachu)

 

测试后把这半条代码删除就可以正常上传

 

文件上传漏洞(pikachu)

 

成功上传了我们的xxx.png

 

我们来访问一下

 

文件上传漏洞(pikachu)

 

发现可以正常访问

 

但是,他是一个png

 

那么我们要这么才能让他执行里面的php代码呢

 

就要用到我们之前的文件包含漏洞

 

那就要让本地文件包含漏洞找到我们的png图片

 

文件上传漏洞(pikachu)

 

发现我们上传的文件在这个文件夹之下那么我们就可以拼凑出

 

unsafeupload/uploads/7043985d85e8876ad12573844907.png

 

来进行测试,看看网站是否能找到我们的png

 

反正就是大概猜测在哪个目录能访问我们图片所在的路径

 

../../unsafeupload/uploads/7043985d85e8876ad12573844907.png

 

经测试我们可以用这个路径访问到我们的phpinfo

 

文件上传漏洞(pikachu)

 

往下拉就能看到

 

相关文章:

  • 2021-12-08
猜你喜欢
  • 2021-09-05
  • 2021-12-09
相关资源
相似解决方案