image.png

RCE漏洞

image.png

  • 直接用的pikachu对RCE的介绍

命令执行漏洞

命令执行

  • 命令执行(Remote Command Execution, RCE)
  • Web应用的脚本代码在执行命令的时候过滤不严,从而注入一段攻击者能够控制的代码,在服务器上以Web服务的后台权限远程执行恶意指令

成因

  • 代码层过滤不严
  • 系统的漏洞造成命令注入
  • 调用的第三方组件存在代码执行漏洞常见的命令执行函数
  1. PHP:exec、shell_exec、system、passthru、popen、proc_open等
  2. ASP.NET:System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo等
  3. Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等

常用命令执行函数

system函数

  • 该函数会将执行的结果输出并将输出结果的最后一行作为字符串返回,如果执行失败则返回false
  • 是最常使用到的
    1
    2
    3
    4
    5
    <?php
    highlight_file(__FILE__);
    system('pwd');
    system('whoami');
    ?>

exec函数

  • 该函数不会输出结果,但是会返回执行结果的最后一行,可以结合output进行结果的输出。
    1
    2
    3
    4
    5
    <?php
    highlight_file(__FILE__);
    exec('pwd',$b);
    var_dump($b);
    ?>

passthru函数

  • 该函数只调用命令,并将运行的结果原封不动的输出,没有相应的返回值。
    1
    2
    3
    4
    <?php
    highlight_file(__FILE__);
    passthru('ls');
    ?>

shell_exec函数

  • 该函数不会输出结果,返回执行结果
  • 使用反引号(``)时调用的就是此函数。
    1
    2
    3
    4
    <?php
    highlight_file(__FILE__);
    var_dump(shell_exec('ls'));
    ?>

命令执行基础

Windows基础命令

1
2
3
4
5
6
7
8
9
ping        #测试连通性
tracert #追踪路由
telnet #远程连接
dir #列出目录
ipconfig #查看ip
arp -a #查看路由表
calc #打开计算器
regedit #打开注册表
netstat -ano #查看服务器端口信息

Linux基础命令

1
2
3
4
5
6
7
8
9
10
cd                  #切换目录
ls #显示当前目录下的文件
ifconfig #查看IP地址
cat /etc/passwd #查看password文件内容
id #查看当前用户的id号
cat /etc/group #查看用户组文件内容
pwd #显示当前目录
uname -a #查看当前系统版本
natstat -pantu #查看当前服务器的端口信息
netstat -nr #查看网关和路由

拼接符

1
2
3
4
5
|  #只执行|后面的语句  
|| #如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
&  #&前面和后面命令都要执行,无论前面真假
&& #如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
;  #前后都执行,无论前面真假,类似&

实例

DVWA靶场

low级别

  • 直接输入127.0.0.1可以得到ping的结果
    image.png
  • 如果直接输入dir,是不会有结果的
    image.png
  • 在指令前加|,可以只执行后面的指令,这样就可以无视前面的ping了
  • 输入| dir
    image.png
  • 输入127.0.0.1 && dir就可以都执行
    image.png

Medium级别

  • 可以看见&&都被过滤了
    image.png
  • 那就换成|或者&

High级别

  • 这个级别只能用|
  • 但是它过滤了| 而没有过滤|

代码执行漏洞

代码执行

  • 代码执行漏洞是由于服务器对危险函数过滤不严导致用户输入的一些字符串可以被转换成代码来执行,从而造成代码执行漏洞

成因

  • 用户能够控制函数输入
  • 存在可执行代码的危险函数常见代码执行函数
  1. PHP: eval、assert、preg_replace()、+/e模式(PHP版本<5.5.0)
  2. Javascript: eval
  3. Vbscript:Execute、Eval
  4. Python: exec

常用代码执行函数

${}执行代码

  • 该执行代码会将中间的php代码进行解析
    1
    2
    3
    <?php
    ${<!-- -->phpinfo()};
    ?>

eval函数

  • 该函数会将字符串当作函数进行执行,但是需要传入一个完整的语句,同时必须以分号结尾,也是最常见的函数。
    1
    2
    3
    <?php
    eval('echo "hello";');
    ?>

assert函数

  • 该函数是判断是否为字符串,如果是则当成代码进行执行,但是在php7.0.29之后的版本不支持动态调用。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //低版本
    <?php
    assert($_POST['a']);
    ?>
    //7.0.29之后
    <?php
    $a = 'assert';
    $a(phpinfo());
    ?>

array_map函数

  • 该函数是为数组的每个元素应用回调函数。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    highlight_file(__FILE__);
    $a = $_GET['a'];
    $b = $_GET['b'];
    $array[0] = $b;
    $c = array_map($a,$array);
    ?>
    //构建的payload
    ?a=assert&b=phpinfo();

实例

pikachu靶场

  • 正常输入符号,无论输入哪个符号都是显示这样的文字
    image.png
  • 尝试输入phpinfo();,代码被正常执行了
    image.png