上传绕过(burp)
先传txt,提示需要jpg;
再传jpg,,提示需要php(见下图)
再传php,提示需要jpg。
em.......….到底需要上传jpg还是php呢?
::: {.image-package}
\
::: {.image-caption}
:::
:::
::: {.image-package}
\
::: {.image-caption}
:::
:::
分析:首先,知道题目只允许jpg,gif,png,如果是其他名称就会显示”不被允许的文件类型.....................”。
如果要用上传漏洞获取webshell,那么应该让服务器把我们的文件当作php脚本执行。
末尾只能以.jpg(或.gif、.png)结尾,无法用大小写绕过、特别文件名构造等方式。
看writeup,利用了00(php是由C写的,C语言中%00是截断符,一旦看到%00,就停止执行)
参考:上传验证绕过全解析
可以知道,这个是服务端验证方式(通过在服务端查看上传的文件是否符合要求)
** 0x00 截断绕过** - 这个是基于一个组合逻辑漏洞造成的
给个简单的伪代码
name = getname(http request) //假如这时候获取到的文件名是 help.asp
.jpg(asp 后面为 0x00)type = gettype(name) //而在
gettype()函数里处理方式是从后往前扫描扩展名,所以判断为 jpg if
(type == jpg)SaveFileToPath(UploadPath.name, name) //但在这里却是以 0x00
作为文件名截断//最后以 help.asp 存入路径里
:::
:::
:::