1.网络安全之文件包含漏洞总结
2.网络安全篇php伪协议-漏洞及其原理
3.文件上传和文件包含的文件伪协伪协各种姿势
4.文件包含漏洞相关知识总结
5.phar反序列化学习
网络安全之文件包含漏洞总结
文件包含漏洞属于代码注入漏洞,引入文件包含函数以减少重复代码编写,包含通过函数将文件包含进来。议源议使用简单来说,码文木马文件内部包含其他文件或多个文件。包句话 然而,含中flash日历源码除了常规代码文件,写入任何后缀文件在被包含时都可能被当作代码执行。文件伪协伪协因此,包含若允许用户控制包含文件路径,议源议使用则很可能包含非预期文件,码文木马从而执行非预期代码,包句话导致安全问题。含中 几乎所有脚本语言提供文件包含功能,写入但在PHP Web Application中居多,文件伪协伪协而在JSP、ASP中较少,问题在于语言设计的局限性。后续讨论以PHP为主。 文件包含漏洞分为本地文件包含和远程文件包含。 本地文件包含 (LFI):包含文件内容遵守PHP语法规范,任何扩展名都可被解析。 远程文件包含 (RFI):需要开启PHP远程包含功能(php.ini中设置),允许通过URL加载远程文件。无论扩展名如何,只要符合PHP语法规范,解析器都会执行。品优购源码全套 PHP文件包含函数包括include()、include_once()、require()和require_once()。这些函数都能进行文件包含,但作用各异。 漏洞示例代码展示如何快速启动解析php的web server,测试LFI和RFI。 利用任意文件读取:如果内容不符合PHP语法,直接返回文件内容,相当于读取任意文件。 使用PHP封装协议:PHP内建URL风格封装协议,如php://filter,用于读取文件源码。 RFI getshell:开启远程包含功能后,直接加载远程文件即可实现getshell。 LFI+文件上传 getshell:利用LFI漏洞,通过上传包含恶意代码的任意文件,利用文件路径实现getshell。 LFI+日志文件 getshell:将恶意代码写入日志文件,通过文件包含漏洞执行。 LFI+/proc/self/environgetshell:利用CGI方式运行时的请求头信息实现getshell。 LFI+phpinfo getshell:结合LFI和phpinfo()页面,通过POST上传文件实现getshell。 LFI+session getshell:利用控制session内容实现getshell,通过检查session保存路径进行。 绕过指定前缀:使用../回溯符跳转到其他目录。拿别人辅助源码出售 指定后缀:利用伪协议zip://和phar://绕过限制,或在php版本限制下使用长度截断。 修复建议:过滤特殊字符、关闭远程包含功能、使用open_basedir配置限制文件访问范围、设置文件白名单。 网络安全学习路线图:初期入门,掌握基本技术后,逐渐深入,包括视频学习、白帽子书籍、安全大厂内部资源、面试题、CTF题目、工具包、应急响应等。 网络安全学习资源:免费领取全套G学习资料包,涵盖入门到进阶的所有内容,详情请访问官方链接。网络安全篇php伪协议-漏洞及其原理
支持协议的函数,如 include()、include_once()、require() 和 require_once(),用于包含文件内容并执行其中的PHP代码。例如,include(文件名);会执行文件名下的火车票App源码PHP代码,其余部分直接输出。
文件操作类函数包括fopen()、file()、readfile()和file_get_contents()等,用于读取、写入或操作文件内容。例如file_get_contents(文件名);直接读取文件内容。
伪协议file://允许访问本地文件系统,不受allow_url_fopen和allow_url_include的影响。使用方法包括/path/to/file.ext、relative/path/to/file.ext、fileInCwd.ext、C:/path/to/winfile.ext等。
访问/file.php?var1=val1&var2=val2和user:password@example.com。
ftp://伪协议用于访问ftp(s)URLs,同样需要开启allow_url_fopen和allow_url_include。
php://伪协议提供访问各种输出流,如php://input,用于读取原始数据流。利用php://filter,可以实现数据筛选和过滤。本地文件无论allow_url_fopen和allow_url_include状态如何,都可以使用此功能。例如,php://filter/read=convert.base-encode/resource=c:/windows/win.ini。
数据流封装器data://允许直接插入数据,邮件群发机源码格式为data://text/plain或data://text/plain;base,PD9waHAgcGhwaW5mbygpPz4=。前者直接执行PHP代码,后者将base编码内容解码后执行,以绕过过滤。
压缩伪协议,如compress.zlib://、compress.bzip2://和zip://,用于压缩或解压文件,格式包括compress.zlib://file.gz、compress.bzip2://file.bz2和zip://archive.zip#dir/file.txt。
WRITE-BUG数字空间是一款面向个人和小团队的知识管理工具,提供多人即时聊天、云文档、代码托管、云批注笔记等服务,功能丰富。它适用于学生和大学生社交交流,提供代码托管无需**,内置代码质量评估,支持Git版本管理。
WRITE-BUG数字空间支持自定义组合和选择,是程序员必备工具,提供全新的创作和管理体验。您可以加入学习圈直接参与讨论和交流。此平台颜值高,操作简单,是新时代个人和团队知识管理的理想选择。
文件上传和文件包含的各种姿势
这篇文章探讨了文件上传和文件包含的多种情况和安全问题,特别关注在前端和后端开发中可能遇到的漏洞。
前端处理时,JavaScript防护至关重要,可以通过抓包手段和禁用插件来防止恶意文件上传。例如,IIS服务器的6.0版本中,解析漏洞可能导致.asp文件的扩展名解析问题,而Apache的2.4.0-2.4.版本存在换行解析漏洞,需要特别注意。
在后端,文件包含操作也需谨慎。本地文件包含可能造成安全风险,而远程文件包含依赖于allow_url_fopen和allow_url_include的设置。PHP的伪协议如file://和php://input/filter允许访问特定类型的资源,但需确保正确配置以防止恶意利用。此外,zip://和data://协议可访问压缩文件,但同样可能被恶意利用。
防止文件包含被绕过是防御的关键,如通过中间件日志监控,尤其是处理可能的木马插入和ssh登录日志。将敏感信息的session保存在非常规路径,如在定时重置的日志文件中,可以降低被恶意访问的风险。
文件包含漏洞相关知识总结
文件包含漏洞概念:通过PHP函数引入文件时,若文件名未经过合理验证,可能导致操作未预期的文件,甚至发生意外文件泄漏或恶意代码注入。
文件包含漏洞的环境要求:允许远程服务器或网站检索数据的配置allow_url_fopen必须为On状态,而allow_url_include则在php5.2之后默认为Off状态。
常见文件包含函数:include与require的区别在于,include在文件不存在时会产生警告但脚本继续执行,而require则会引发致命错误并停止脚本。
文件包含漏洞的利用方法:通过php://input或data://伪协议注入代码,以及利用file://、zip://、compress.zlib://、bzip2://、phar://和php://filter获取或执行文件内容。这些方法可以结合文件上传漏洞进行利用。
文件包含漏洞的截断:利用%截断或路径长度截断,前者针对php版本低于5.3.4且magic_quotes_gpc为off状态的场景,后者则适用于php版本低于5.2.8的情况。
包含Apache日志文件:通过构造请求,将PHP代码插入到日志文件中,借助文件包含漏洞执行日志中的PHP代码,获取用户访问记录信息。
包含SSH log日志:通过ssh连接并输入密码后,结合文件包含漏洞,可以访问并利用SSH日志文件。
包含SESSION:通过获取Session内的可控变量,如phpsessid,利用可读写的Session文件,实现对session内容的访问。
包含environ:在php以cgi方式运行时,environ会保留UA头信息。通过插入PHP代码到environ文件中,再利用文件包含漏洞执行代码。
包含/proc/self/fd/[environreferer]:利用burpsuite的测试器模块fuzz方法,挖掘并利用/proc/self/fd目录下的文件结构,包含SSH log日志。
包含临时文件:通过上传文件创建的临时文件,利用文件包含漏洞在文件被删除前访问。可以通过暴力猜测文件名或利用PHPinfo页面获取上传文件的存储路径和临时文件名。
文件包含漏洞的绕过方法:特定前缀绕过,如目录遍历和编码绕过,以及指定后缀绕过,利用url编码、二次编码等技巧实现绕过。
phar反序列化学习
了解phar反序列化,首先需明确,phar是一种类似于jar的打包文件,但实质上是一种压缩文件,自php5.3版本起默认启用。通过使用phar伪协议读取文件,系统将自动执行一次反序列化操作。此过程涉及四大主要组成部分:标识符、文件内容、压缩文件信息以及签名格式。
标识符是phar文件的起点,其结构需以`**__HALT_COMPILER();?>`结尾,内容则无限制,如`xxx\`。phar文件内部包含被压缩文件的信息,其中`meta-data`部分以序列化形式存储,此点是漏洞执行的关键。
在未有特别要求的情况下,文件内容自由编写,最终目的仅为通过序列化生成所需内容。在phar反序列化中,一些特定函数受到影响,通过伪协议解析phar文件时触发反序列化,进而执行恶意代码。
构造实验步骤中,生成vfree.phar文件,并利用受影响函数包含phar文件,实现远程代码执行。vfree.txt虽功能不明,但其作用在于输出特定信息,作为执行过程的验证点。
实战案例演示了如何利用phar反序列化漏洞,如在SWPUCTF的SimplePHP题目中,通过读取文件内容,发现并利用了任意文件读取漏洞。在后续审计中,通过包含多个文件,最终定位至关键文件并分析其内容和功能。
深入分析,发现关键类如Cer、Show和Test等,其中Test类的__get魔术方法在特定条件下触发,通过构造特定参数,实现漏洞利用。在编写exp文件时,需注意特定参数的使用,如`source`,以确保正确触发魔术方法。总结,phar反序列化漏洞利用涉及构建特定链路,最终通过调用函数实现文件读取,展示了从漏洞识别到利用的完整过程。