网络安全渗透之主机持久化
2023-4-24 19:0:15 Author: FreeBuf(查看原文) 阅读量:24 收藏

前言

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

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\RunHKLM\Software\Microsoft\Windows\CurrentVersion\RunHKCU\Software\Microsoft\Windows\CurrentVersion\RunOnceHKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
(向右滑动,查看更多)


Logon Helper

在注册表的 Winlogon(HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon) 区域提取到明文帐号密码,但实际上我们也可以用来实现持久化。我们注意到,一些条目指向可执行文件,例如 Userinit

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\UserinitHKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\NotifyHKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\shell
(向右滑动,查看更多)

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


服务

手动创建后门服务

sc create zhi binPath= "C:\Windows\System32\calc.exe" start=autosc 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.ps1C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1C:\Users\<用户名>\Documents\WindowsPowerShell\profile.ps1C:\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_keysauthorized_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 123456echo 'zhi:$1$zhi$O0srVNGaSQAETEFI5SS6X0:0:0:root:/root:/bin/bash'>> /etc/passwd
(向右滑动,查看更多)

bashrc 与 bash_profile

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

vim .bashrcbash

精彩推荐


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NjA0NjgyMA==&mid=2651223085&idx=3&sn=f7994b955f2aff740655f3199a6c76b5&chksm=bd1de6a68a6a6fb030cb63d3ccd3bf22c130cba6a9e7540e7e905665c9b6a2f237b787c85063#rd
如有侵权请联系:admin#unsafe.sh