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获取有几个