解题思路

拿到文件上传的题目,应该思考三点:

1)文件上传漏洞

2)文件解析漏洞

3)语言特性(比如prel语言的ARGV文件句柄)

  • 一般来说文件上传漏洞大多数是

1.后缀名(php,php3,php4,php5,phtml.pht)

2.文件头内容 3.content-type的绕过 4.前端js检验

  • 文件解析漏洞大多都是针对服务器的(1,2主要还是看配置文件)

1.Apache: 多后缀漏洞 .htaccess的利用 .user.ini的利用

2.Nginx: PHP CGI解析漏洞 空字节代码执行漏洞 .user.ini的利用

3.IIS5.x-6.x: 文件解析 目录解析漏洞 .user.ini的利用

  • 语言特性主要还是看情况,百度多收集吧

正常解题过程

我们拿极客大挑战的一道题来说

一道题引发对文件上传类型的思考 - 图1

这是一道很标准的文件上传的题目

一道题引发对文件上传类型的思考 - 图2

我们上传一句话木马

<?php eval(POST[‘shell’]);?>

一道题引发对文件上传类型的思考 - 图3

这种情况就要加文件头幻数并抓包查看content-type的值是否为image/jpeg

一道题引发对文件上传类型的思考 - 图4

修改为如下:

一道题引发对文件上传类型的思考 - 图5

这种情况就是PHP后缀名的检测了,如上所述,尝试phtml可以绕过

一道题引发对文件上传类型的思考 - 图6

又被检测出来了 解码也行意思就是就是不允许有 “<?” 出现,那就修改为

一道题引发对文件上传类型的思考 - 图7

终于成功上传

访问文件(自己一个个浏览目录啥的吧,直接最后一步读文件)

一道题引发对文件上传类型的思考 - 图8

一道题引发对文件上传类型的思考 - 图9

这题就这样结束了


这里有别的想法,会不会有服务器的解析漏洞呢


另外的思考

我们看看服务器解析漏洞,那我们就要知道他是什么服务器(随便修改URL就可以)

一道题引发对文件上传类型的思考 - 图10

可以看到这是个Apache的服务器试想用他的解析漏洞来实现

一道题引发对文件上传类型的思考 - 图11

先尝试多后缀漏洞

一道题引发对文件上传类型的思考 - 图12

刚刚不是不允许我们用php作为后缀名,我们利用这个漏洞传上去试试

一道题引发对文件上传类型的思考 - 图13

也是成功上传,我们访问一下文件

一道题引发对文件上传类型的思考 - 图14

很明显不成功。为什么,记住我之前说的,配置配置配置

一道题引发对文件上传类型的思考 - 图15

所以应该被防御了

利用.htaccess(配置配置配置)

而要想.htaccess文件生效有两个条件

一道题引发对文件上传类型的思考 - 图16

尝试上传

一道题引发对文件上传类型的思考 - 图17

上传成功。然后再上传123.jpg

一道题引发对文件上传类型的思考 - 图18

上传成功。但是访问还是那个样子

一道题引发对文件上传类型的思考 - 图19

不成功说明压根不满足解析.htaccess的条件

.user.ini

这个条件需要包含.user.ini的文件夹下有正常能被解析的php文件

可惜没有,别想了