pass 2 服务端(后端)验证
MIME类型校验就是我们在上传文件到服务端的时候,服务端会对客户端也就是我们上传的文件的Content-Type类型进行检测,如果是白名单(值得信任允许访问或者允许通过验证的名单)所允许的,则可以正常上传,否则上传失败
无法上传.php类型文件
上传文件形式被允许上传的文件
修改文件类型为.php
修改完成
.php类型文件上传成功
pass 3 文件名后缀校验(黑名单绕过)
黑名单:不允许上传某些后缀文件
特殊的文件名绕过: .php3 .php4 .php5 .phtml .phtm .phps .phpt .php345
文件名后缀改为.php5
上传成功
pass 4 文件名后缀校验(配置文件解析控制)
黑名单过滤更加全面
但是遗漏了.htaccess
概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
这句话作用:将后续上传的文件都按照php进行执行
将3.txt改为.htaccess
先将.htaccess解析文件上传,利用其配置将白名单文件的类型解析成php文件类型。
再将.png上传,但是服务器上的1.png文件会被解析成php文件,以php形式显示
注意:.htaccess文件不能起名字,它就是.htaccess文件,如果将它改为1.htaccess或者其他什么名字是不可以的,无法解析。在实战中有可能上传上去这个文件会被自动重命名,被重命名了就不可以了。
pass 5
本关可以直接上传php文件,但是通过源代码可知,本关对于上传文件做了检测,并且对文件名大小写做了转换。
在上传文件后先是删除文件末尾的点,然后首尾去空,去除字符串::$DATA,但是这些操作只执行一次。所以我们可以抓取数据包来修改绕过。我们在数据包中把后缀名改为.php. .,首先他发现有一个点,这时会把他去掉,又发现有一个空格,也会把它去掉,我们这时还有一个点,也就是.php. 由于他只是验证一次,所以不会在去掉我们的点。
上传.php类型文件,burp抓包,在数据包中把后缀名改为.php. .
pass 6 文件名后缀校验(大小写绕过)
这一关同样是后端黑名单,但是没有strtolower()函数,可以使用大小写绕过黑名单
比如把.php格式改为.Php上传上去之后,就会自动解析为.php.
大小写绕过原理:
Windows 系统下,对于文件名中的大小写不敏感。例如:test.php 和 TeSt.PHP 是一样的
Linux 系统下,对于文件名中的大小写敏感。例如:test.php 和 TesT.php 就是不一样的
或者上传.php文件,然后抓包,将.php改变大小写
pass 7 文件名后缀校验(空格绕过)