文件包含和命令注入漏洞

文件包含和命令注入漏洞

文件包含漏洞

介绍

  • 文件包含漏洞是代码注入的一种。其原理就是注入一段用户能控制的脚本或代码,让服务器端执行,代码注入的典型代表就是文件包含file inclusion。文件包含可能会出现在JSP、PHP、ASP中。
  • 常见的导致文件包含的函数:
    • PHP:
    • include()
    • include_once()
    • require()
    • require_once()
    • fopen()
    • readfile()
    • ….
    • JSP/Servlet:
    • ava.io.file()
    • java.io.filereader()
    • …..
    • ASP:
    • include file
    • incluide virtual
    • …..

PHP的文件包含函数

  • include(),include_once(),require(),require_once()

    • 当使用这四个函数包含一个新文件时,该文件将作为PHP代码执行,php内核并不在意该被包含的文件类型时什么

    • 代码:

    
    $test=$_GET['x'];
    include($test);
    ?>

    保存为include.php

  • 文件包含漏洞的利用条件:

    • include()等函数通过动态变量的方式引入需要包含的文件
    • 用户能控制该动态变量
  • 远程文件包含:

    • 如果php的配置选项allow_url_include开启,则include/require函数是可以加载远程文件的吗,这种漏洞被称为远程文件包含漏洞(RFI)
  • 本地文件包含漏洞利用技巧

    • 包含用户上传的文件
    • 包含data://或php://input等伪协议
    • 包含Session文件
    • 包含日志文件,比如Web Server的access log
    • 通过构造语句让服务器报错,并加入一句话随报错信息写入日志
    • 找到日志文件
    • 用菜刀连接
    • 拿下网站

命令注入漏洞

命令注入攻击

  • Command Injection,即命令注入攻击,是指由于Web应用程序对用户提交的数据过滤不严格,导致可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。

php命令执行函数

  • php中可以使用五个函数执行外部的应用程序或函数
    • system:执行一个外部的应用程序并显示输出的结果
    • exec:执行一个外部的应用程序
    • passthru:执行一个UNIX系统命令并显示原始的输出
    • shell_exec:执行shell命令并返回输出的结果的字符串
    • “”” 运算符:与shell exec函数的功能相同

System函数

  • system函数原型:string system(string command,int &return_var),command是要执行的命令,return_var存放执行命令的执行后的状态值。

  • 实例:

    • 构造PHP代码:
    
    $cmd = $_GET["cmd"];
    echo "
    ";
    system($cmd);
    echo "
    "
    ; ?>

    在浏览器中访问这个PHP文件,并提交cmd内容,如netstat,即www.xxx.com/1.php?cmd=netstat

Exec函数

  • exec函数原型:string exec (string command,array &output,int &return_var),其中command是要执行的命令,output是获得执行命令输出的每一行字符串,return_var存放执行命令后的状态值

  • 实例:

    • 构造php代码:
    
    $cmd = $_GET['cmd'];
    echo "
    "; echo shell_exec($cmd); echo ""; ?>

类别另外三个

你可能感兴趣的:(渗透)