WEB攻防-通用漏洞-文件包含

Sisuuu. 2024-05-10 17:33:44

 

一、什么是文件包含

文件包含简单来说就是引用文件。有些代码段经常能够被用到,为了避免重复敲写这一代码段,

则就将这一代码段单独放入到一个文件中,需要用时就调用出来。例如在PHP中就是利用

include进行引用(而include能够将任意种类文件(jpg、png等)中带有的代码进行解析,

为后门代码解析提供了环境)

二、文件包含种类

1、本地文件包含

2、远程文件包含

三、文件包含漏洞-黑盒

1、黑盒主要就是看参数传递的数据是否是有文件后缀

2、三种攻击方式

     1)配合文件上传进行攻击。例如图片带有脚本后门代码,但是没有解析环境,可包含这个图

    片,图片中的代码被解析触发

    2)配合日志文件或会话文件进行攻击

    3)运用相关语言可允许的协议进行攻击

php伪协议:php伪协议:[PHP伪协议总结 - 个人文章 - SegmentFault 思否](https://segmentfault.com/a/1190000018991087)

3、案例以及复现

ctfshow所有文件包含题(本笔记仅记录部分题)

     1)web78

     使用php://input协议

     使用data://协议

     2)web80 (配合日志文件)

    从代码可看出被过滤的关键字。并且使用远程包含也不可行,允许远程包含的关键函数被关闭

 

     采用另一种方法:配合日志文件

     经抓包,发现中间件为nginx,浏览器可查到nginx 的默认日志位置为/var/log/nginx

     输入,路径正确

     修改数据包UA为脚本代码,得到flag文件

    得到flag

     3)web87 (put://filter协议)

     看代码可发现过滤的了许多关键字符,日志文件也不可使用了,但可发现urldecode解码,则可采用url编码绕过

     还有一个post提交$content,这个content的内容会被放入到$file文件中,则我们可以想到put://filter/write

     将‘php://filter/write=convert.base64-decode/resource=1.php’进行url编码两次,因为浏览器会自动进行一次url解码

     因为会将content中的内容进行base64解码,所以我们需要事先将<?php @eval($_POST[a]);?>后门代码进行一次base64编码,

     其因为content被放入到file文件中时,前面被连接了一部分,并且对这一部分进行解码时,只会解码phpdie,但base64是以

     4个字节为单位进行一次解码看,phpdie只有六个字节,所以需要在前面加入两个字节,则加入了aa

  (也可以使用凯撒13 php://filter/write=string.rot13/resource=2.php content=<?cuc riny($_CBFG[1]);?>)

  (也可以使用iconv php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php contents=?<hp

    pvela$(P_SO[T]1;)>? web117中可以使用到)

这三种都是php://filter的过滤器中的一部分,剩余过滤器见文章php://filter的各种过滤器_php://filter过滤器种类-CSDN博客

     直接访问1.php并post提交可得到flag

三、文件包含漏洞-白盒

    看包含代码:

    include($action);可使用协议玩法

    include('files/'.$action.'.php');像这种带有‘前缀’、‘后缀’或者两者都有的,协议玩法肯定是用不了了

一篇很详细的文件包含漏洞文章:文件包含漏洞全面详解-CSDN博客

...全文
235 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

489

社区成员

发帖
与我相关
我的任务
社区描述
闽江学院IT领域专业的学生社区
社区管理员
  • c_university_1157
  • 枫_0329
  • 傅宣
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧