一 、前言

在我们获得初始会话之后,我们需要考虑如何让我们的访问持久化。原因很简单,如果我们是通过利用漏洞进来的,对方可能察觉到痕迹然后修补漏洞,如果是通过泄漏的密码进来的,对方可能修改密码。

二、windows持久化

计划任务

计划任务,也可成为定时任务,指的是在指定的时间执行某项任务。

手工

创建计划任务

如:计划任务名称为zhi,1分钟后以system权限运行calc.exe
schtasks /create /sc minute /mo 1 /tn zhi /tr "C:\Windows\system32\calc.exe" /ru SYSTEM
image.png
/sc与 /mo指定了执行间隔为 1 分钟,zhi为计划任务名称。然后是指定的应用以和参数 (这里没有参数),以及指定以 SYSTEM权限执行。如上诉操作就是:一分钟中以system权限运行calc.exe程序

查看计划任务

get-scheduledtask | findstr zhi
image.png

删除计划任务

schtasks /delete /tn zhi
image.png

工具

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\ 

image.png

开机自启

Startup 文件夹

只要把想执行的文件放入以下文件夹中,开机机会自己运行

C:\Users[用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

image.png

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

image.png
image.png

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

我们直接替换的话,可能影响原本功能,因此我们额外添加要运行的程序及参数。
image.png

服务

手动创建后门服务

sc create zhi binPath= "C:\Windows\System32\calc.exe" start=auto
sc start zhi 

我们可以直接将 binPath 指向我们想要的可执行文件,但服务所用的 exe 可执行文件与一般的可执行文件有所不同,如果我们直接指向一般可执行文件,例如 exe 版的 CS 或 Metasploit 载荷,会在运行后很快退出。我们也可以直接生成服务二进制文件
image.png

DLL代理

DLL劫持指的是程序启动时会加载数个的DLL文件,此时我们找出加载的dll文件的地址,再生成个与dll文件名一样的后门,这样程序启动时我们的后门也会跟着启动,但是这样的话可能会影响程序正常启动,所以我们需要DLL代理。
这里推荐** Export View** 工具 (http://www.nirsoft.net/utils/dll_export_viewer.html)
感觉相对于前面方式,dll代理有点鸡肋,就不在具体叙述

影子账户

我们只需要在创建用户时加上$符,在用net user查询时就无法被查询出来
image.png

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 

image.png
但是,显示出来的位置并不一定有现存的 profile.ps1 文件,我们可以自己新建一个
image.png

三、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

后面我们就可以用私钥登入
image.png

vim后门

在用户目录下编辑或新建 .vimrc文件,添加 :silent !touch /tmp/testvim命令。
:silent 是为了消除打开 vim 时的提示消息,一定程度上提升隐蔽性,! 后面跟着的则是 bash 命令。
image.png

crontab

/etc/crontab控制着系统上的计划任务,我们可以决定一个计划任务的间隔时间、执行的操作等。
我们可以在该文件中写入一个计划任务,例如执行命令 touch /tmp/crontab,那么我们在末尾添加 * * * * * root touch /tmp/crontab,保存,等候一分钟,如果以特定用户创建计划任务,我们可以使用 crontab-e 命令来编辑
image.png
image.png

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 

image.png

bashrc 与 bash_profile

在用户目录下,每当一个新的 shell 实例被打开,bashrc就会被执行。而 bash_profile则是在用户首次登陆进系统的时候被执行。我们可以修改这两个文件来达到持久化的效果

vim .bashrc
bash 

image.png

本文作者:zhi, 转自FreeBuf