Repository restructuring
This commit is contained in:
118
tools/misc/tcp_template.py
Normal file
118
tools/misc/tcp_template.py
Normal file
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import re
|
||||
import sys
|
||||
import json
|
||||
import argparse
|
||||
import urllib.parse
|
||||
|
||||
def generate_template(listen_address, listen_port, remote_host, remote_port):
|
||||
|
||||
# we could all need that
|
||||
imports = [
|
||||
"os",
|
||||
"socket",
|
||||
"threading"
|
||||
]
|
||||
|
||||
partial_imports = {
|
||||
"hackingscripts.utils": ["util"],
|
||||
"hackingscripts.utils.packeter": ["Packer", "Parser"]
|
||||
}
|
||||
|
||||
imports = "\n".join(f"import {i}" for i in sorted(imports, key=len))
|
||||
imports += "\n" + "\n".join(sorted(list(f"from {p} import {', '.join(i)}" for p, i in partial_imports.items()), key=len))
|
||||
return f"""#!/usr/bin/env python
|
||||
|
||||
#
|
||||
# THE BASE OF THIS FILE WAS AUTOMATICALLY GENERATED BY {' '.join(sys.argv)}
|
||||
# For more information, visit: https://git.romanh.de/Roman/HackingScripts
|
||||
#
|
||||
|
||||
{imports}
|
||||
|
||||
BUFFER_SIZE = 4096
|
||||
|
||||
class Packet:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def from_data(data):
|
||||
packet = Packet()
|
||||
parser = Parser(data)
|
||||
# TODO: auto-generated method stub
|
||||
return packet
|
||||
|
||||
def pack(self):
|
||||
buf = Packer()
|
||||
# TODO: auto-generated method stub
|
||||
return buf.get()
|
||||
|
||||
def forward(source, destination):
|
||||
try:
|
||||
while True:
|
||||
data = source.recv(BUFFER_SIZE)
|
||||
if not data:
|
||||
break
|
||||
|
||||
# TODO: Parse / Manipulate packet
|
||||
# packet = Packet.from_data(data)
|
||||
# repacked = packet.pack()
|
||||
|
||||
destination.sendall(data)
|
||||
except Exception:
|
||||
pass
|
||||
finally:
|
||||
source.close()
|
||||
destination.close()
|
||||
|
||||
def handle_client(client_socket, remote_host, remote_port):
|
||||
try:
|
||||
remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
remote_socket.connect((remote_host, remote_port))
|
||||
except Exception as e:
|
||||
print(f"Failed to connect to remote: {{e}}")
|
||||
client_socket.close()
|
||||
return
|
||||
|
||||
# Start bidirectional forwarding
|
||||
threading.Thread(target=forward, args=(client_socket, remote_socket), daemon=True).start()
|
||||
threading.Thread(target=forward, args=(remote_socket, client_socket), daemon=True).start()
|
||||
|
||||
def start_proxy(local_host, local_port, remote_host, remote_port):
|
||||
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
server.bind((local_host, local_port))
|
||||
server.listen(100)
|
||||
|
||||
print(f"[*] Forwarding from {{local_host}}:{{local_port}} to {{remote_host}}:{{remote_port}}")
|
||||
|
||||
while True:
|
||||
client_socket, addr = server.accept()
|
||||
print(f"[+] Connection from {{addr[0]}}:{{addr[1]}}")
|
||||
threading.Thread(
|
||||
target=handle_client,
|
||||
args=(client_socket, remote_host, remote_port),
|
||||
daemon=True
|
||||
).start()
|
||||
|
||||
if __name__ == "__main__":
|
||||
start_proxy({repr(listen_address)}, {listen_port}, {repr(remote_host)}, {remote_port})
|
||||
"""
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Exploit Template for tcp application attacks",
|
||||
formatter_class=argparse.RawTextHelpFormatter
|
||||
)
|
||||
|
||||
parser.add_argument("la", type=str, help="Listen Address")
|
||||
parser.add_argument("lp", type=int, help="Listen Port", choices=range(1,65535+1))
|
||||
parser.add_argument("rh", type=str, help="Remote Host")
|
||||
parser.add_argument("rp", type=int, help="Remote Port", choices=range(1,65535+1))
|
||||
|
||||
args = parser.parse_args()
|
||||
template = generate_template(args.la, args.lp, args.rh, args.rp)
|
||||
print(template)
|
||||
Reference in New Issue
Block a user