zoukankan      html  css  js  c++  java
  • 内网横向移动常见方法

    最近事情积压太多,想要做些什么,却不知从哪里开始

    索性啥也不干了,来,你尽管来,我就整理(水)一下内网渗透横向移动常见的方法来happy一下吧

     横向移动,根据定义是指获取内网某台机器的控制权之后,以被攻陷主机为跳板,通过搜集域内凭证,找办法访问到域内其他机器,再依次循环往复,直到获得域控权限甚至控制内网

    当然成功的横向移动的前提是先窃取好了凭证,无论明文密文,没有凭证,横向移动无从谈起(本文语境中不做特殊说明,默认已取得凭证,且不考虑木马工具免杀和跳板机;关于凭证窃取日后有机会再说)

    (填坑:在windows中抓取hash小结

    上   https://www.cnblogs.com/lcxblogs/p/13957899.html

    下   https://www.cnblogs.com/lcxblogs/p/14002468.html

    实际上,关于横向移动,实际操作过程中可以分析的细节太多,有很多大佬说的非常详细,可以去看XX社区,本文侧重于整理思路和一些朴素的思想,观点仅代表我个人

    又 workgroup和domain环境下部分方法想要成功使用可能条件存在差异,本文默认讨论域环境

     

    0x01 IPC$+计划任务/系统服务

    首先不得不提windows自带的远程连接命令IPC$。IPC$(Internet Process Connection) 是为了让进程之间通信的一种“管道”,通过提供用户名密码建立了一条安全的、加密的、用于数据交换的通道。当然,还是在同一个时间,还是同样的两个IP,他们之间只能建立一个IPC$连接,脚踏多条船无论什么时候都是不可取的。通过这个连接,可以实现在被连接的目标机器上搞文件上传、下载、命令执行......

    啊,关于IPC$+计划任务的横向,我们的目的非常明确,思路非常美好:

    (1)首先建立向目标主机的IPC$连接

    (2)其次把命令执行的脚本传到目标主机

    (3)再次创建计划任务在目标机器上执行命令脚本

    (4)最后过河拆桥删除IPC$连接

    当然想要用IPC$来横向是有条件的:

    (1)目标机器没有禁用IPC$连接,没有什么防火防盗拦截IPC$,139 445 端口也开了(能走445走445,不能则走139)

    (2)目标机器小管理员开了IPC$默认共享服务(逻辑盘、系统目录;都不开我访问个啥?)

    (图1)

    (3)获取了目标机器的小管理员的管理员权限的账号密码(最好是域管理员账号密码),明文的

    (4)目标系统能支持IPC$,且和攻击机能彼此互通(废话)

    建立连接命令:

    net use \ipipc$  "password" /user:"administrator"

    当然也可以net use \ipc$ 。。。。。。之类的,但通常情况下都是ipc$,是因为利用此连接可以访问目标机器中的文件、上传下载、运行命令获取目标机器的目录结构、用户列表

    还有很多命令不一一列举了

    (图2)

    上图中200.10就是我建立IPC$命令的IP 后期被我打码打没了。。。

     (图3)

     net use \IP /del /y

    用完了可以删掉IPC$

    当然IPC$连接并不是一帆风顺的,可能爆出各种错

    错误号 5,拒绝访问(很可能你使用的用户不是管理员权限的,先提升权限)
    错误号 51,Windows 无法找到网络路径(网络有问题)
    
    错误号 53,找不到网络路径(ip 地址错误;目标未开机;目标 lanmanserver 服务未启动;目标有防火墙(端口过滤))
    
    错误号 67,找不到网络名(你的 lanmanworkstation 服务未启动;目标删除了 ipc$;)
    
    错误号 1219,提供的凭据与已存在的凭据集冲突(你已经和对方建立了一个ipc$,请删除后再连)
    
    错误号 1326,未知的用户名或错误密码
    
    错误号 1385,登录失败:未授予用户在此计算机上的请求登录类型
    错误号 1792,试图登录,但是网络登录服务没有启动(目标NetLogon服务未启动[连接域控会出现此情况])
    
    错误号 2242,此用户的密码已经过期(目标有帐号策略,强制定期要求更改密码)

    。。。。。。祝你好运

    建立连接后,可以把生成的木马从攻击机上传、粘贴到目标机器上

    本地命令可以copy,用CS beacon的可以upload,总之把自己写的或者是工具生成的木马搞到目标机器上

    接下来创建windows计划任务,自动执行木马反弹连接到攻击机器

    值得注意的是,如何自动执行木马,在windows中常用的就是计划任务at 和 schtasks

    at和schtasks在此情此景下用于创建计划任务,让计算机在指定的时间执行木马;at比较老了,很多系统都不支持了,目前最多的还是schtasks(具体命令不写了,本贴只做思路整理)

    最后一关闭IPC$连接,完活

    (另:值得一提的是,IPC$连接中,为了获得目标机administrator用户的密码,可以尝试写弱口令脚本爆破哦

      使用计划任务什么的,系统中会有日志记录哦)

    除了IPC$配合windows计划任务之外,还可以尝试配合windows系统命令(sc)

    和上文一样的道理,需要先建立IPC$连接,再把脚本传到目标机器中,区别在于还可以创建一个服务,服务用于运行木马

      例子:

      sc \<IP> create <servicename>binpath=”<path>”

      sc \192.168.200.10 create hacker binpath=”c:shell.exe”   #创建服务

      sc \192.168.200.10 start hacker      #启动hacker服务

      sc \192.168.200.10 delete hacker  #删除hacker服务

    剩下的和计划任务一样的道理,不重复了

    0x02 smbexec

     这是一款基于psexec的域渗透工具,配套Samba服务

    下载链接 https://github.com/SecureAuthCorp/impacket

    Impacket大礼包,里面有一堆py工具,有psexec.py、 smbexec.py、 wmiexec.py、 dcomexec.py、 atexec.py等一堆工具

     smbexec也是个全交互类的工具,不用于有webshell这种的环境

    使用这个impacket套件的时候,要注意用目标机器本地管理员账号密码或者域管理员账号密码去连接目标机器哦

     

    0x03 psexec

    微软提供的一种远程命令行工具

    EXE版的下载链接 https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec

    py版本的在上一点中

     使用psexec也不需要目标机器开3389,只要开了admin$共享(这个一般都是默认开的,参见图1)就可以用

    且背靠windows这棵大树,一般杀软都睁一眼闭一眼,不会过多为难psexec

    只要防火墙你敢放行,我就敢用

    即:

    使用psexec前提条件

    (1)目标机器开了admin$共享

    (2)防火墙没开或不拦截

    (3)想连域控最好用域管理员账号密码连,不要用普通域账号密码连;连普通域内主机随便,用域管理员账号密码或者目标主机本地管理员账号密码都可以

     例如: psexec.exe -accepteula \IP -u domainadministrator -p password command

     psexec.exe -accepteula \192.168.200.10 -u ohmygodiamadmin -p 123456789 -s cmd.exe  (-s 会返回system权限的shell;-accepteula 不弹框)

     psexec.exe -accepteula \192.168.200.10 -u ohmygodiamadmin -p 123456789 whoami

     还有很多骚操作,不一一列举了

    另:msf中也有此模块(我的MSF年久失修,看看就好)

     

     下面那个psexec_psh则是powershell版本的payload,有powershell的环境就用这个payload进行混淆免杀效果更好,我就不用这个演示了

     果不其然被目标机器干了,kali虚拟机,目标机器是本地物理机上有杀软(另:psexec虽然能提供system权限,但是还是要考虑一下杀毒软件的问题)

    关掉拦截

     

    当使用psexec横向的时候,也会在目标机器中产生日志滴

    大佬推荐类似工具 scshell(没用过)

     另:CS中也有用psexec来PTH的功能

    0x04 wmic

    WMI (windows management instrumentation),从windows98起自带的工具集。可以通过/node选项使用端口135上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令......

    由于上一点中提到的原因,psexec无情陨落,所以转向了wmi的利用。wmi相比psexec隐蔽性更强,无文件,无记录,操作多

    当然,使用wmi横向还是有条件的:

    (1)目标机开启了135,445端口(135管理口,445传回显)

    (2)可以使用WMI(废话)

    单单wimc这个命令,就可以做很多事情,如

    远程查进程信息

    远程创建进程

    wmic /node:192.168.200.10 /user:administrator /password:123456 process call create "cmd.exe /c ipconfig >C:1.txt"

    目标机器中会将ipconfig的结果保存在生成的1.txt中(啊,当然我这个操作又被杀软拦截了)

    但是这个wmic执行的命令没有回显,需要ipc$一下或者type \192.168.200.10C$1.txt   查看结果

    还有很多操作可以尝试

     

    0x05 wmiexec

    wmiexec可以当做是wmic高清重置加强版

     

     当然你用py版本也可以

    除了impacket里的wmiexec之外,还有wmiexec.vbs这种通过VBS调用WMI来模拟psexec功能的脚本,还有Invoke-WmiCommand.ps1脚本(PowerSploit工具包中有)通过powershell调用WMI来执行远程命令,还有Invoke-WMIMethod也是这种功能(也在PowerSploit中有)

    (另:像这种类型的工具,往往不拘泥于明文连接,hash也可以使用)

    再比如有人推荐的结合cscript半交互式地执行一些命令如

    cscript.exe //nologo wmiexec.vbs /shell 192.168.200.10 administrator password

    什么的

     0x06 winrm

    winrm即windows remote management --windows远程管理服务,远程连接winrm模块可以操作windows命令行,默认监听端口5985(HTTP)和5986 (HTTPS)(根据winrm版本不同默认监听端口可能还有80 443的,不过这都是老版本),有些windows系统不是自动启动的需要手动启动

    所以说,要用winrm的使用条件:

    (1)目标机器开了winrm(废话)

    (2)目标主机防火墙不拦截winrm需要的端口(废话*2)

    我电脑win7是没开的    winrm quickconfig          看一下可以开启

     winrm e winrm/config/listener   查看一下监听情况

     可见成功开启5985端口且用HTTP传输,listeningon监听的是自身IP

    这是服务端配置,如果这时候你充当一个客户端去连接我这台服务端会报错,因为存在一个叫信任主机列表的东西,只有在信任主机列表中的主机才可以连接

    于是在服务端中   winrm set winrm/config/client @{TrustedHosts="*"}

    之后在攻击机的powershell中执行         Test-WsMan 服务端IP          

    看看要远程的服务端是不是开了winrm,有回显证明OK

    开了就可以搞了,用winrm成对出现的winrs命令(windows remote shell)

    服务端=目标主机用来监听; 客户端=攻击机用来连接

    在攻击机上执行命令连目标机

    winrs -r:http://目标IP:5985 -u:administrator -p:password cmd   打开交互cmd(此处IP变了是因为机器崩了换了连接目标,无所谓)

    或者

    winrs -r:http://目标IP:5985 -u:administrator -p:password ”ipconfig”    执行命令

     

    0x07  PTH

    PTH--pass the hash即哈希传递,顾名思义,可以在不知道目标明文密码的情况下,通过传递哈希值(目标机的NTLM HASH 也好,LM HASH也罢),来进行远程连接登录目标机或进行别的操作

    嗯。。。鉴于mimikatz会被杀软“一剪没”或系统不支持,要么免杀要么换工具要么改注册表,先不讨论免杀,在此演示下默认可以使用mimikatz且是免杀的

    PTH有前提是在跳板机上抓到的NTLM HASH得是有用的,即抓到的这个哈希密码是可以登录目标机器的,通常抓域管理员账号密码(不然你抓个啥,巧妇难为无米之炊),或者说内网中至少存在有一台机器可以使用当前跳板机上抓到的这个哈希密码

    本次演示我使用mimikatz以管理员权限进行PTH(实际上,PTH只是一种想法不局限于工具种类,与明文传递对应;可以像我用单独的mimikatz工具PTH,自然也可以用CS、msf调用mimikatz,可以用msf模块,可以用上文提到的smbexec、wmiexec来PTH,可以用powershell脚本PTH......随你喜欢)

     之后执行

    sekurlsa::pth /user:要用的域用户名 /domain:IP或者域名 /ntlm:要用的域账号的Hash值

    执行成功会反弹一个shell,在这个shell上用IPC$啥的连接目标机器就不需要用户名密码了

    PTH如果要用本地管理员账号,最好用sid为500的账号进行横向移动,这样会排除一些补丁的影响导致访问失败的问题

    不用mimikatz的话,还有一款叫kekeo的工具可以用来PTH

    0x08 PTT

     票据传递---pass the ticket 即票据传递,之所以说票据传递,传递的票据是指kerberos中与身份验证相关的票据,通过伪造票据获得目标机的访问权限

    如果说PTH是基于NTLM的,则PTT是基于kerberos的;

    关于PTT绕不开的三个方法:ms14068、golden ticket 、silver ticket

     有名的ms14068漏洞(我之前的文章有演示过ms14068,可以翻翻,就不多说了)主要产生原因是允许经过身份验证的用户在其TGT中插入任意PAC,这就有大问题,改变了PAC的TGT获得的票据会获取和原来不一样的权限

     利用ms14068还是需要工具的: https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

    如果目标机器没打相关补丁kb3011780,就能用ms14068一波带走(手头没有没打补丁的域控了,口述)

    攻击机上  whoami /all   看一下当前域用户的sid

    MS14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器ip地址 -p 域成员密码

    如果正常执行成功后会在MS14-068.exe工具当前目录下生成票据

    然后用mimikatz把生成的票据(写绝对路径)注入到攻击机内存中   kerberos::ptc 票据文件

    完事之后,提升到域控权限,攻击机即可连接到域中所有机器,net use \机器名  

     之前的文章说过kerberos认证过程,简单提了一下金银票据

    金银票据与其说是横向移动,不如说是拿下域控后,在目标机上留的有域管理员全部或部分权限的后门,也算另一种意义上的横向吧

    白银票据抓的是域控上计算机账号的ntlm hash(SERVER为域控计算机名),在原本不能访问域控共享目录的机器上执行相关命令,就可以使这台机器访问域控共享目录(选cifs服务时)

     

    还有,利用金银票据时,需要的域的SID填的是像红框部分这种格式的内容,后面具体的id不需要填

    关于命令什么的就不在这写了,网上有好多大佬的文章有写,可能在后期想写权限维持的时候再整理吧

    随便转载,请标明作者出处

  • 相关阅读:
    Ajax
    Linux安装SmartSVN及破解
    JQuery异步提交
    动画效果
    事件
    表单选择器
    DOM操作
    JQuery基础
    PHP环境配置
    DP--钢条切割
  • 原文地址:https://www.cnblogs.com/lcxblogs/p/13847184.html
Copyright © 2011-2022 走看看