上传绕过(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 存入路径里
:::
:::
:::