DWVA-命令注入漏洞闯关(Command Injection)
前言
Vulnerability: Command Injection
LOW级别
代码:
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// 几首一个变量为ip的参数
$target = $_REQUEST[ 'ip' ];
// 判断系统
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
echo "<pre>{$cmd}</pre>";
}
?>
我们分析这个靶场的代码可以看到$_REQUEST接受用户传过来的值 我们并没有看到有什么过滤机制的代码所以 可以输入任何东西。
测试执行ping127.0.0.1没问题 我们利用管道命令来 再加命令语句


Medium级别
代码:
<?php 
if( isset( $_POST[ 'Submit' ]  ) ) { 
    $target = $_REQUEST[ 'ip' ]; 
    // 黑名单过滤
    $substitutions = array(
        '&&' => '',
        ';'  => '',
    ); 
    // 如果有黑名单字符则进行替换
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); 
    // 判断系统
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }
    echo "<pre>{$cmd}</pre>";
} 
?> 
我们注意6-9行 这里是个黑名单过滤 我们可以想办法绕过 这里虽然把&&和分号;加入了黑名单,但是我们还可以用逻辑或(||)、管道符(|)或(&)来命令执行 绕过

High级别
代码:
<?php 
if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = trim($_REQUEST[ 'ip' ]); 
    // 白名单
    $substitutions = array(
        '&'  => '',
        ';'  => '',
        '| ' => '', //主义这一行 l后面是空格说明仅仅过滤了l+空格 没过滤单独的l
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    ); 
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); 
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    } 
    echo "<pre>{$cmd}</pre>";
} 
?> 
127.0.0.1|net user照样绕过
impossible级别
代码:
<?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 ); //stripslashes()过滤删除由 addslashes() 函数添加的反斜杠。
    // 以.分割命令
    $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 ) ) {
        // 以.拼接
        $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(); 
?> 
DWVA-命令注入漏洞闯关(Command Injection)的更多相关文章
- DVWA各等级命令注入漏洞
		漏洞描述 在web程序中,因为业务功能需求要通过web前端传递参数到后台服务器上执行,由于开发人员没有对输入进行严格过滤,导致攻击者可以构造一些额外的"带有非法目的的"命令,欺骗后 ... 
- Commix命令注入漏洞利用
		介绍 项目地址:https://github.com/stasinopoulos/commix Commix是一个使用Python开发的漏洞测试工具,这个工具是为了方便的检测一个请求是否存在命令注入漏 ... 
- CVE-2020-15778 OpenSSH命令注入漏洞复现
		一.漏洞概要 OpenSSH 8.3p1及之前版本中的scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令.目前绝大多数linux系统受影响. 参考链接:https://githu ... 
- sqli-labs注入lesson1-2闯关秘籍
		·lesson1 1.判断是否存在注入,并判断注入的类型 其实根据第一关提示 判断注入类型 输入下面的语句进行测试: ?id= 返回界面如下图:说明存在 字符型注入 2. 使用order by 猜测S ... 
- CVE-2017-17215 - 华为HG532命令注入漏洞分析
		前言 前面几天国外有个公司发布了该漏洞的详情.入手的二手 hg532 到货了,分析测试一下. 固件地址:https://ia601506.us.archive.org/22/items/RouterH ... 
- sqli-labs注入lesson3-4闯关秘籍
		·lesson 3 与第一二关不同的是,这一关是基于错误的get单引号变形字符型注入 要使用 ') 进行闭合 (ps:博主自己理解为字符型注入,是不过是需要加括号进行闭合,适用于博主自己的方便记忆的 ... 
- SaltStack 命令注入漏洞(CVE-2020-16846)
		SaltStack 是基于 Python 开发的一套C/S架构配置管理工具.2020年11月SaltStack官方披露了CVE-2020-16846和CVE-2020-25592两个漏洞,其中CVE- ... 
- 【代码审计】VAuditDemo 命令注入漏洞
		一般PHP中可以使用下列函数来执行外部的应用程序或命令 system() exec() passthru() shell_exec() 跟踪$cmd --> 跟进$target,发现传递给tar ... 
- 安全性测试入门:DVWA系列研究(二):Command Injection命令行注入攻击和防御
		本篇继续对于安全性测试话题,结合DVWA进行研习. Command Injection:命令注入攻击. 1. Command Injection命令注入 命令注入是通过在应用中执行宿主操作系统的命令, ... 
随机推荐
- Spring Boot与多数据源那点事儿~
			持续原创输出,点击上方蓝字关注我 目录 前言 写这篇文章的目的 什么是多数据源? 何时用到多数据源? 整合单一的数据源 整合Mybatis 多数据源如何整合? 什么是动态数据源? 数据源切换如何保证线 ... 
- Windows下mysql5.6升级到5.7的方法
			Mysql的升级方式分为两种:原地升级和逻辑升级.这两种升级方式,本质没有什么区别的. 只是在对数据文件的处理上有些区别而已.原地升级是直接将数据文件进行拷贝,而逻辑升级对数据文件的处理方式是通过逻辑 ... 
- Spring+Hibernate+Struts2整合之实现登录功能
			前端代码: <form id="loginForm" action="${ pageContext.request.contextPath }/user_login ... 
- 如何发布代码到maven中心仓库
			deploy to sonatype 参考文章 https://blog.csdn.net/xuefu_78/article/details/52494698 https://blog.csdn.ne ... 
- matplotlib中plt用法实例
			import torch from models.models import Model import cv2 from PIL import Image import numpy as np fro ... 
- 博客主题——cnbook
			主题预览 主题下载 gshang.cnbook.rar version:2020-05-29 gshang.cnbook@2.0.rar version:2020-08-25 .source-down ... 
- day1-linux基础命令
			1.创建文件 ①touch 1.txt ②echo > 2.txt ③vim 3.txt 以上方式都能直接创建文件 批量创建文件 2.创建目录 ①mkdir /software ②创建连续目录 ... 
- django 框架模型之models常用的Field
			1. django 模型models 常用字段 1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列 如果要显式的自定义一 ... 
- spark求相同key的最大值
			需求: 求相同key的最大值 [("a", 3), ("a", 2), ("a", 5), ("b", 5), ... 
- python测试报告输出 htmltestrunner 及 中文乱码的解决方式
			下载HTMLTestRunner.py 第三方库 下载地址: python2:http://tungwaiyip.info/software/HTMLTestRunner.html 右键另存为下载HT ... 
