网站内容管理系统上传图片(文件上传与绕过客户端检测与PHP代码检测原理绕过方法 )
优采云 发布时间: 2022-02-26 13:02网站内容管理系统上传图片(文件上传与绕过客户端检测与PHP代码检测原理绕过方法
)
上传文件
文件上传是现代互联网上的常见功能,用户可以上传图片、视频等各种类型的文件。提供给用户的功能越多,Web 攻击的风险就越大。
文件上传漏洞 文件上传漏洞原因
文件上传漏洞的原因(复杂),一方面是web应用开启了文件上传功能,对上传的文件没有施加足够的限制;另一方面,在程序开发部署时,没有考虑系统特性,过滤不严格;此外,攻击者通过Web服务器解析漏洞绕过限制,上传任意文件。
文件上传漏洞 文件上传漏洞利用 Pony
PHP:
ASP:
ASPX:
大多数经典的一句话木马只有两部分,一是可以执行代码的功能部分,二是接收数据的部分。
例如
eval 是执行命令的函数,$_POST['cmd'] 是接收到的数据。eval 函数将接收到的数据作为 PHP 代码执行。这样,我们可以让插入了单句木马的 网站 执行我们传入的任何 PHP 语句。
马来西亚
之所以叫大马,是因为它不同于小马(一字木马),代码比较大,但是功能比较丰富。同样,马来西亚有许多脚本格式基本相同。每个团队都有自己的自定义迷宫。
文件上传检测与绕过客户端检测与绕过检测原理Bypass方法
由于后端PHP代码不对文件进行任何检测,所以只要绕过前端JS的验证,就可以上传WebShell。
Upload a new file:
服务器检测和绕过
对于文件上传,仅从Web前端检测显然是不够的,因此服务器端尤为重要。一般的服务器端检测包括以下几个方面:
后缀检测和绕过
检测原理
通过函数pathinfo()获取文件后缀,将后缀转换为小写,判断是否为php。
绕过方法一:黑名单 - 案例绕过
绕过方法一:黑名单--列表列表绕过(黑名单以外的后缀名)
有些中间件允许解析其他文件后缀,比如asa、cer之类,或者在httpd.conf配置文件中,配置如下代码解析php、php3、phtml文件。所以上传一个后缀为 php3、phtml 的文件。
绕过方法一:黑名单--Windows 功能
Windows 下不允许使用一些特殊的文件名命名方法。使用BurpSuite抓包修改后缀名,绕过验证后上传文件。Windows 以后会自动删除添加的,但是需要注意的是 Unix/Linux 系统没有这个功能。例如:
绕过方法2:白名单
白名单绕过需要配合文件收录或解析漏洞
绕过方法三:.htaccess 文件攻击
例如:当文件名[info.php.png]收录关键字[.php],.htaccess文件内容如下时,会执行info.php.png中的代码。
setHandler application/x-httpd-php
上传htaccess文件可以让服务器将符合PHP语法规则的文件解析为PHP
绕过方法4
结合Apache文件解析机制,文件后缀从右到左解析。如果后缀名无法识别,则继续判断,直到遇到可解析的后缀。
MIME 类型检测和绕过
MIME(多用途 Internet 邮件扩展)是描述邮件内容类型的 Internet 标准。MIME 消息可以收录文本、图像、音频、视频和其他特定于应用程序的数据。常见的 MIME 类型如下:
文件扩展名Mime-Type
.js
应用程序/x-javascript
.html
文本/html
.jpg
图片/JPEG
.png
图片/png
申请/pdf
检测原理
判断$_FILES["file"]["type"]是否为图片格式(image/gif, image/jpeg, image/pjpeg),如果不是,则不允许上传。在 HTTP 协议中,文件的 MIME 类型由 Content-Type 字段表示。$_FILES["file"]["type"]的值是从请求包中的Content-Type中获取的。
旁路法
通过抓取数据请求包,上传php文件时Content--Type值为applcation/octer-stream,上传jpg文件时Content-Type值为imaag/jpeg。可以修改文件类型以绕过。
文件内容检测及绕过检测原理
使用getimagesize()函数获取图片的宽高信息。如果上传的图片不是图片,则无法获取信息。
文件相关信息检测
检测图片文件相关信息
文件幻数检测
旁路法
在脚本文件开头添加图片对应的header值,或者在图片后面写脚本代码
制作图片马
参数 /b 指定为图像/声音文件以二进制格式复制和合并文件
参数/a指定复制和合并ASCII格式的文件,用于txt等文档文件
图马上传的漏洞无法解析,需要配合文件解析或文件收录漏洞
00 截断检测与旁路检测原理
截断漏洞的核心是chr(0),这个字符不是空的(NuII),也不是空字符(" "),也不是空格。当程序输出变量chr(< @0) , chr(0) 后面的数据会被停止,也就是说被误认为是终止符,直接忽略后面的数据,导致漏洞。由于00代表终止符, PHP 会将 00 后面的所有字符都删除。
截断条件:PHP版本小于5.3.4、magic_quotes_gpc为OFF
获取方法
POST 方法
条件竞态检测和绕过检测原理
有的网站文件检测逻辑是先允许任意文件上传,然后检查文件内容是否收录可执行脚本,如果有则删除。此处使用 sleep() 函数来模拟确定是否收录脚本所需的时间。
旁路法
利用成功上传和删除文件的时间差,上传一个.php文件并在删除前立即访问会自动生成一个新的php文件,新文件不会被删除。