This guide demonstrates a simple NAT traversal setup using tcpdump
and nc
(Netcat) for UDP communication.
On the server, use tcpdump
to monitor the incoming UDP packets on port 12345
:
sudo tcpdump -i any udp and port 12345
# Basic HMAC-based One-Time Password Algorithm in Python | |
# Based on RFC 4226 and RFC 6238 | |
import base64 | |
import datetime | |
import hashlib | |
import struct | |
import time | |
def dt(hmac_result: bytes) -> int: |
import ctypes | |
import os | |
import sys | |
buffer = bytearray(1_000_000) | |
vaddr = ctypes.addressof(ctypes.c_char.from_buffer(buffer)) | |
print(f'Allocated an array of {len(buffer)} bytes at 0x{vaddr:x}.') |
#!/usr/bin/env python3 | |
# sudo sysctl -w kernel.apparmor_restrict_unprivileged_unconfined=0 | |
# sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 | |
# unshare --user --map-user=0 | |
from dataclasses import dataclass | |
import fcntl | |
import getpass | |
import multiprocessing | |
import os |
import pathlib | |
import re | |
import os | |
import functools | |
def _translate(pat, STAR, QUESTION_MARK): | |
res = [] | |
add = res.append | |
i, n = 0, len(pat) | |
while i < n: |
import ctypes | |
import select | |
import pathlib | |
from ctypes import c_char_p, c_int, c_uint32 | |
import os | |
class EventStruct(ctypes.Structure): |
#!/bin/env python3 | |
"""This is a simple self-contained script to reload an arbitrary application | |
when its source changes (like using Flask in debug mode). It comes without | |
any 3rd party dependencies and can run standalone - a copy of this script is | |
all you need. | |
Examples: | |
./autostart.py -p '*.py' -i 'venv/*' flake8 autostart.py --max-line-length 120 | |
./autostart.py -p '*.py' -i 'venv/*' mypy ./autostart.py | |
./autostart.py -p '*.py' -i 'venv/*' "$(which python3)" ./server.py |
The following example demonstrates how to punch a hole through a stateful firewall using UDP. It opens a reverse shell on the server.
import pathlib | |
import pyais | |
from pyais.tracker import AISTrackEvent | |
def do_something(track): | |
# called every time an AISTrack is created or updated | |
print(track.mmsi, track) |
WAS_SPACE = 0 | |
NEW_LINE = 1 | |
NEW_WORD = 2 | |
WAS_WORD = 3 | |
SPACES = [9,10,11,12,13,32] | |
NEWLINE = 10 | |
def init_table(): | |
# 0 => was space |