文件上传漏洞之upload-labs


web漏洞

文件上传之后端黑白名单绕过

文件上传常见验证:

后缀名、类型、文件头等

后缀名:黑名单、白名单

黑名单:明确不允许上传的格式后缀

php5

白名单:明确可以上传的格式后缀

相对来说更安全,

文件类型:mime信息,检测文件类型

type 是mime的值

文件头:内容头信息

来判定格式,抓包时修改

$_files[表单名 ] [‘name’ ]

upload第二关

源代码分析:

isset 判定有没有触发 ;

move-uploaded-file,移动文件

步骤

抓包修改mime信息

upload第三关

特殊解析后缀

代码分析:

isset判断有咩有被触发

$deny-ext 拒绝的后缀名

trim函数 php里过滤为空的函数

将字符串两边的空白字符去除

deldot 删除干扰符

strrchr(how are you,‘are’);

分割 这样结果就是 are you

第三关这里strrchr目的是获取真实后缀格式

in-array

判断类型在不在里面,如果不在继续执行

就是黑名单验证。

可以上传php其他格式

apache服务器能够使php解析为php5、php3

更改apache的配置文件,添加php3.或其他

这样就可以被执行,但这取决于对方服务器配置文件中的情况,支持的话就可以。

upload第四关

.htaccess解析 条件:只有apache可以用

实现解析自定义。

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

上传.htaccess文件更改apache配置

<filesmatch “ cimer”> 文件匹配,如果匹配到cimer就按照 要求的执行

伪静态使用说明,比如php写成的,访问时是一个html页面。

upload第五关

代码分析:大小写检测

upload第六关

空格绕过

代码分析:少了一行代码trim( $file-ext)

加个空格,格式匹配绕过,但不会对代码文件产生影响,因为系统会自动忽略空格

upload第七关

代码分析:少了一行代码

同上,抓包时,文件后面加.,会自动忽略

upload第八关

代码分析:

少了一行过滤 点

deldot删除末尾的点

upload第九关

前提 windows 、php

::$DATA

会把DATA之后的数据当成文件流处理,不会检测后缀名,且保持:$DATA之前的文件名。

upload第十关

少了一行过滤 点 ,再加上过滤空的代码

就是添加 .空进行绕过

更改文件名。

upload第十一关

代码分析:如果代码将字符串里的php替换为空,只写了一次循环,就可以写成 1.pphphp 绕过

白名单

upload第十二关

php5.3以下

%00截断:地址上,

例如../upload/1.php%0011111.jpg

实际接收到的是../upload/1.php

指编码后的%00,

0x00截断:文件命名上,

代码分析:验证命名里有没有多个点,循环+1,

upload第十二关或者十三

把%00编码,

get会自动解码,post要自己手动url编码。

get会直接自动识别编码值了

文件上传之内容逻辑数组绕过

文件头检测 通过文件头判断是什么格式,可以伪造。

图像文件信息判断

逻辑安全=二次渲染

逻辑安全-条件竞争

upload第十三关

到第十六关,都需要配合文件包含漏洞

图片马 就是将代码写入图片中

简单来说就是把图片代码和后门代码 写一个图片格式里。

可以 命令生成 (cmd里图片一句话制作方法:

copy 1.png /b + shell.php /a webshell.jpg)

或者手工输入

1.上传后门后,复制地址,访问

利用 文件包含漏洞(运行图片中的后门代码,将图片作为代码执行)

upload第十四关

getimagesize:获取图像大小相关信息的函数,只上传图像才会继续。其实就是验证上传的是不是图片。

upload第十五关

前提是文件包含漏洞

exif_imagetype:获取图片类型

只会获取图片里的信息,所以利用图片后门绕过。

upload第十六关

imagecreatefrom

upload第十七关

imagecreatefromjpeg 由文件或url创建一个新图像

二次渲染,

如果实战中遇到,缩览图显示,有删除或者保存按钮,

上传第一次时,已经在对方服务器上了,

move_uploaded_file移动文件

rename重命名

要符合二次渲染

条件竞争?

利用系统占用,

代码分析:不严谨语句是 过滤在第一次文件上传之后。

upload第二十关

控制文件名:%00截断,

文件夹:/.绕过

内置函数漏洞,文件目录问题

upload第二十一关

数组接受+目录命名

count获取有几个


文章作者: John Doe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 John Doe !
  目录