twsupport.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-"
  3. # vim: set expandtab tabstop=4 shiftwidth=4:
  4. """
  5. $Id$
  6. This file is part of the xsser project, http://xsser.03c8.net
  7. Copyright (c) 2011/2016 psy <epsylon@riseup.net>
  8. xsser is free software; you can redistribute it and/or modify it under
  9. the terms of the GNU General Public License as published by the Free
  10. Software Foundation version 3 of the License.
  11. xsser is distributed in the hope that it will be useful, but WITHOUT ANY
  12. WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  13. FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  14. details.
  15. You should have received a copy of the GNU General Public License along
  16. with xsser; if not, write to the Free Software Foundation, Inc., 51
  17. Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  18. """
  19. import sys
  20. from twisted.internet.protocol import Protocol
  21. from twisted.internet.protocol import Factory
  22. from twisted.internet import reactor
  23. from core.main import xsser
  24. import cgi
  25. import traceback
  26. try:
  27. from orbited.start import main as orbited_main
  28. except:
  29. print "no orbited so not enabling rt swarm port"
  30. orbited_main = None
  31. traceback.print_exc()
  32. print "\nXSSer v1.7b: The Mosquito 'Zika Swarm'\n"
  33. print "Daemon(s): ready!", "//" , "Interfaz: ready!\n"
  34. print "Connect to http://127.0.0.1:19084/static/ via Web or Telnet to manage your swarm\n"
  35. print "Listening..."
  36. from twisted.web import resource, error, script, server
  37. from orbited import __version__ as version
  38. class XSSerResource(resource.Resource):
  39. def __init__(self, name, parent):
  40. self.name = str(name)
  41. self.parent = parent
  42. def render_GET(self, request):
  43. if hasattr(self.parent, "do_"+self.name):
  44. response = getattr(self.parent, "do_"+self.name)(request)
  45. else:
  46. response = "<h2>The swarm is not ready to "+self.name+"</h2>"
  47. return response
  48. def render_POST(self, request):
  49. return self.render_GET(request)
  50. class XSSerCheckerResource(resource.Resource):
  51. def __init__(self, name, parent):
  52. self.name = str(name)
  53. self.parent = parent
  54. def render_GET(self, request):
  55. print "SUCCESS!!", request
  56. self.parent.xsser.final_attack_callback(request)
  57. response = "thx for use XSSer (http://xsser.03c8.net) !!"
  58. return response
  59. def render_POST(self, request):
  60. return self.render_GET(request)
  61. class XSSerMainResource(script.ResourceScriptDirectory):
  62. def __init__(self, name, xsser):
  63. script.ResourceScriptDirectory.__init__(self, name)
  64. self.xsser = xsser
  65. def render(self, request):
  66. response = "<h2>XSSer.system</h2>"
  67. response += " version: "+version
  68. app = self.xsser()
  69. options = app.create_options(["-d","http://Bla.com"])
  70. app.set_options(options)
  71. response += "<br><br>&gt; <a href='/static'>Static</a>"
  72. response += "<br>&gt; <a href='/system/monitor'>Orbited.system.monitor</a><br><br>"
  73. response += "<h2>Options</h2>"
  74. for opt in app.options.__dict__:
  75. if not hasattr(app.options.__dict__[opt], "__call__"):
  76. response += "<b>"+str(opt) + "</b> " + str(app.options.__dict__[opt]) + "<br/>"
  77. return response
  78. def do_attack(self, request):
  79. response = "<h2>Let's go attack</h2>"
  80. return response
  81. def do_success(self, request):
  82. response = "not implemented!"
  83. if False:
  84. print "SUCCESS!!", data.split('HTTP')[0].split('/')[-1]
  85. self.factory.xsser.final_attack_callback(data.split('HTTP')[0].split('/')[-1].strip())
  86. self.sendHTTP("thx for use XSSer (http://xsser.03c8.net) !!\n")
  87. return response
  88. def do_evangelion(self, request):
  89. response = "Start Swarm Attack"
  90. reactor.callInThread(self.xsser.run)
  91. return response
  92. def getChild(self, path, request):
  93. return XSSerResource(path, self)
  94. class XSSerProtocol(Protocol):
  95. transport = None
  96. factory = None
  97. def connectionMade(self):
  98. self.factory._clients.append(self)
  99. print "new client connected..."
  100. def connectionLost(self, reason):
  101. self.factory._clients.remove(self)
  102. def sendHTTP(self, data):
  103. self.transport.write("HTTP/1.0 200 Found\n")
  104. self.transport.write("Content-Type: text/html; charset=UTF-8\n\n")
  105. self.transport.write(data)
  106. def dataReceived(self, data):
  107. print "Mosquito network ready ;)",data
  108. if (data.startswith("GET") and "evangelion" in data) or "evangelion" in data:
  109. print "EVAngelion swarm mode!\n"
  110. self.sendHTTP("Start Swarm Attack\n")
  111. app = xsser()
  112. app.set_reporter(self.factory)
  113. self.factory.xsser = app
  114. data = data.split('\n')[0]
  115. options = data.replace('GET ', '').split()[1:]
  116. print 'OPTIONS',options
  117. if len(options) > 1:
  118. reactor.callInThread(self.factory.xsser.run, options)
  119. else:
  120. reactor.callInThread(self.factory.xsser.run)
  121. elif "evangelion" in data:
  122. self.sendHTTP("Start Swarm Attack\n")
  123. reactor.callInThread(self.factory.xsser.run)
  124. elif data.startswith("GET /success"):
  125. print "SUCCESS!!", data.split('HTTP')[0].split('/')[-1]
  126. self.factory.xsser.final_attack_callback(data.split('HTTP')[0].split('/')[-1].strip())
  127. self.sendHTTP("thx for use XSSer (http://xsser.03c8.net) !!\n")
  128. self.transport.loseConnection()
  129. elif data.startswith("GET"):
  130. self.sendHTTP("XSSer Web Interface <a href='evangelion'>Try it!</a>\n")
  131. elif data.startswith("close"):
  132. reactor.stop()
  133. else:
  134. self.transport.write("1")
  135. class ServerFactory(Factory):
  136. protocol = XSSerProtocol
  137. _clients = []
  138. def __init__(self, xsser):
  139. self.xsser = xsser
  140. def post(self, data):
  141. for c in self._clients:
  142. c.transport.write(cgi.escape(data)+'<br/>')
  143. if __name__ == '__main__':
  144. if orbited_main:
  145. print "orbited!"
  146. root = orbited_main()
  147. import orbited.transports.base
  148. from orbited import cometsession
  149. tcpresource = resource.Resource()
  150. reactor.listenWith(cometsession.Port, factory=ServerFactory(xsser),
  151. resource=root, childName='xssertcp')
  152. root.putChild("xsser", XSSerMainResource("xsser", xsser))
  153. root.putChild("checker", XSSerCheckerResource("checker", xsser))
  154. else:
  155. factory = ServerFactory(None)
  156. reactor.listenTCP(19084, factory)
  157. reactor.run()