第47天:漏洞利用-PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过

第47天:漏洞利用-PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过
Yatming的博客1 | 在没有解析漏洞的环境下,上传图片格式,是不会解析成脚本语言的,除非有其他错误的解析,例如文件包含之类的 |
upload-labs-docker靶场
1 | 项目地址:https://github.com/sqlsec/upload-labs-docker |
less-1-前端验证
后端是没有做任何验证的
但是由于这里是前端验证,所以可以使用:
1 | 1、禁用js,但是可能会导致页面不可用 |
这里我使用第三种
less-2-htaccess文件
这一关是因为apche中有一个htaccess的文件,这个文件有什么用?
1 | 概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。 |
先上传.htaccess
文件
上传之后可以正常访问。
less-3-MIME类型
什么是MIME类型:
MIME(Multipurpose Internet Mail Extensiions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
注:Tomcat的安装目录\conf\web.xml中就定义了大量MIME类型。
类型 | 后缀 | MIME |
---|---|---|
Microsoft Word文件 | .word | application/msword |
PDF文件 | application/pdf | |
GIF图形 | .gif | image/gif |
JPEG图形 | .jpeg .jpg | image/jpeg |
au声音文件 | .au | audio/basic |
MIDI音乐文件 | .mid .midi | audio/midi audio/x-midi |
RealAudio音乐文件 | .ra .ram | audio/x-pn-realaudio |
MPEG文件 | .mpg .mpeg | video/mpeg |
AVI文件 | .avi | video/x-msvideo |
less-4-文件头
每种类型文件的,使用二进制进行查看的时候,文件头部都会有特殊标识,这里用gif文件进行举例:
1 | JPEG (jpg),文件头:FFD8FF |
文件类型 | 文件扩展名 | 文件头标识(明文形式) | 说明 |
---|---|---|---|
GIF 图像 | .gif | GIF89a 或 GIF87a | 分别对应 89a 和 87a 版本 |
PNG 图像 | .png | 无直接可读明文 | 头部包含特定二进制序列,无 ASCII 可见字符标识 |
JPEG 图像 | .jpg/.jpeg | 无直接可读明文 | 头部为二进制标识,无明显 ASCII 字符 |
BMP 图像 | .bmp | BM | 以 “BM” 开头(ASCII 字符) |
PDF 文档 | %PDF- | 以 “% PDF-” 开头,后面通常跟版本号(如 % PDF-1.5) | |
ZIP 压缩包 | .zip | 无直接可读明文 | 头部为二进制标识 |
RAR 压缩包 | .rar | Rar! | 以 “Rar!” 开头(ASCII 字符) |
7Z 压缩包 | .7z | 无直接可读明文 | 头部为二进制标识 |
HTML 文档 | .html/.htm | <!DOCTYPE 或 <html | 通常以 HTML 标签开头,非固定唯一标识 |
XML 文档 | .xml | <?xml | 以 “<?xml” 开头(ASCII 字符) |
TIFF 图像 | .tif/.tiff | 无直接可读明文 | 头部为二进制标识 |
WAV 音频 | .wav | RIFF | 以 “RIFF” 开头(ASCII 字符),后续包含文件信息 |
这个表格是其他常见的文件头部。
在上传的时候将后缀更改为php。
less-5-黑名单双写
str_ireplace()
函数会对字符串进行不区分大小写的替换。
如果这里有对大小写进行区分的话,就可以使用大小写绕过。
less-6-黑名单大小写
和上一关不一样的就是上图的位置,这个函数是区分大小的,所以可以使用大小写绕过。
1 | 本关属于理论上漏洞,因为题目环境是 Docker 容器运行的 Linux 系统,所以本题人工修改成了 Windows 的特性。这里本人尝试使用全大写,或者大小绕过,都不行,linux都不能正常解析。 |
less-7-00截断
1 | magic_quotes_gpc = Off |
如果上传文件的路径在上图的请求路径中,就可以不用自己解码,如果在post提交的内容体中就需要自己手动解码。大致原理:可以看到我提交的路径自己加上了一个a.php
但是我post提交的里面是jpg格式,在进行文件路径+文件名进行拼接的时候就会把后面的内容进行截断。所以最后上传的就是a.php。
less-8-POST型00截断
前置条件:
1 | magic_quotes_gpc = Off |
可以看到提交的路径在请求体中,这样的情况就需要自己手动解码一次。
然后选中%00
进行URL解码。
less-9-黑名单缺陷
像这样的黑名单,在黑盒测试中使用FUZZ就行。
less-10-条件竞争
1 | <?php fputs(fopen('xiao.php','w'),'<?php @eval($_REQUEST[1]);?>');?> |
必须不断发包,和不断的请求这个上传的文件,然后你在访问这个被请求的创建的文件。
1 | 原理: |
首先将先一直上传文件:
然后在发送一个数据包,一直请求这个被上传文件
然后你在一直访问这个被创建的文件(人工)
出现这样的情况就说明文件已经被创建了,这时就可以使用webshell工具直接访问。
less-11-二次渲染
先上传一张正常的图片,然后在将渲染之后的图片下载,然后在比较两张图片没有更改的部分。
然后在没有发生变化的地方进行恶意代码的写入。
这一关有个提示,就是文件包含的地址,然后将上传的文件,使用文件包含将恶意代码进行植入。
less-12-函数缺陷
1 | temp_file, $img_path) |
less-13-代码审计
数组绕过: