123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- /*
- Fuzzes AssResp by testing all 256 IEs on overflow in four ways
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include <string.h>
- #include <math.h>
- #include "../frameDefinitions.h"
- //Creates Ass response frame
- u_char *Assallies(u_char *dstAddress, int *packetSize, u_char * radioTapHeader, u_char *myMAC, int step)
- {
- #define AssalliesIES (1) //number of information elements
- //definition of all info elements
- infoElem fuzzie;
- switch (step)
- {
- case 0:
- {
- fuzzie.id = 0;
- fuzzie.len = 0;
- fuzzie.len_data = 255*2;
- fuzzie.data =
- "\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00"
- "\x08\x00\x09\x00\x0A\x00\x0B\x00\x0C\x00\x0D\x00\x0E\x00\x0F\x00"
- "\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00"
- "\x18\x00\x19\x00\x1A\x00\x1B\x00\x1C\x00\x1D\x00\x1E\x00\x1F\x00"
- "\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00"
- "\x28\x00\x29\x00\x2A\x00\x2B\x00\x2C\x00\x2D\x00\x2E\x00\x2F\x00"
- "\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00"
- "\x38\x00\x39\x00\x3A\x00\x3B\x00\x3C\x00\x3D\x00\x3E\x00\x3F\x00"
- "\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00"
- "\x48\x00\x49\x00\x4A\x00\x4B\x00\x4C\x00\x4D\x00\x4E\x00\x4F\x00"
- "\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00"
- "\x58\x00\x59\x00\x5A\x00\x5B\x00\x5C\x00\x5D\x00\x5E\x00\x5F\x00"
- "\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00"
- "\x68\x00\x69\x00\x6A\x00\x6B\x00\x6C\x00\x6D\x00\x6E\x00\x6F\x00"
- "\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00"
- "\x78\x00\x79\x00\x7A\x00\x7B\x00\x7C\x00\x7D\x00\x7E\x00\x7F\x00"
- "\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00"
- "\x88\x00\x89\x00\x8A\x00\x8B\x00\x8C\x00\x8D\x00\x8E\x00\x8F\x00"
- "\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00"
- "\x98\x00\x99\x00\x9A\x00\x9B\x00\x9C\x00\x9D\x00\x9E\x00\x9F\x00"
- "\xA0\x00\xA1\x00\xA2\x00\xA3\x00\xA4\x00\xA5\x00\xA6\x00\xA7\x00"
- "\xA8\x00\xA9\x00\xAA\x00\xAB\x00\xAC\x00\xAD\x00\xAE\x00\xAF\x00"
- "\xB0\x00\xB1\x00\xB2\x00\xB3\x00\xB4\x00\xB5\x00\xB6\x00\xB7\x00"
- "\xB8\x00\xB9\x00\xBA\x00\xBB\x00\xBC\x00\xBD\x00\xBE\x00\xBF\x00"
- "\xC0\x00\xC1\x00\xC2\x00\xC3\x00\xC4\x00\xC5\x00\xC6\x00\xC7\x00"
- "\xC8\x00\xC9\x00\xCA\x00\xCB\x00\xCC\x00\xCD\x00\xCE\x00\xCF\x00"
- "\xD0\x00\xD1\x00\xD2\x00\xD3\x00\xD4\x00\xD5\x00\xD6\x00\xD7\x00"
- "\xD8\x00\xD9\x00\xDA\x00\xDB\x00\xDC\x00\xDD\x00\xDE\x00\xDF\x00"
- "\xE0\x00\xE1\x00\xE2\x00\xE3\x00\xE4\x00\xE5\x00\xE6\x00\xE7\x00"
- "\xE8\x00\xE9\x00\xEA\x00\xEB\x00\xEC\x00\xED\x00\xEE\x00\xEF\x00"
- "\xF0\x00\xF1\x00\xF2\x00\xF3\x00\xF4\x00\xF5\x00\xF6\x00\xF7\x00"
- "\xF8\x00\xF9\x00\xFA\x00\xFB\x00\xFC\x00\xFD\x00\xFE\x00\xFF\x00"
- ;
- break;
- }
- case 1:
- {
- fuzzie.id = 0;
- fuzzie.len = 1;
- fuzzie.len_data = 255*3 + 1;
- fuzzie.data =
- "\xff"
- "\x01\x01\xFF\x02\x01\xFF\x03\x01\xFF\x04\x01\xFF\x05\x01\xFF\x06\x01\xFF\x07\x01\xFF"
- "\x08\x01\xFF\x09\x01\xFF\x0A\x01\xFF\x0B\x01\xFF\x0C\x01\xFF\x0D\x01\xFF\x0E\x01\xFF\x0F\x01\xFF"
- "\x10\x01\xFF\x11\x01\xFF\x12\x01\xFF\x13\x01\xFF\x14\x01\xFF\x15\x01\xFF\x16\x01\xFF\x17\x01\xFF"
- "\x18\x01\xFF\x19\x01\xFF\x1A\x01\xFF\x1B\x01\xFF\x1C\x01\xFF\x1D\x01\xFF\x1E\x01\xFF\x1F\x01\xFF"
- "\x20\x01\xFF\x21\x01\xFF\x22\x01\xFF\x23\x01\xFF\x24\x01\xFF\x25\x01\xFF\x26\x01\xFF\x27\x01\xFF"
- "\x28\x01\xFF\x29\x01\xFF\x2A\x01\xFF\x2B\x01\xFF\x2C\x01\xFF\x2D\x01\xFF\x2E\x01\xFF\x2F\x01\xFF"
- "\x30\x01\xFF\x31\x01\xFF\x32\x01\xFF\x33\x01\xFF\x34\x01\xFF\x35\x01\xFF\x36\x01\xFF\x37\x01\xFF"
- "\x38\x01\xFF\x39\x01\xFF\x3A\x01\xFF\x3B\x01\xFF\x3C\x01\xFF\x3D\x01\xFF\x3E\x01\xFF\x3F\x01\xFF"
- "\x40\x01\xFF\x41\x01\xFF\x42\x01\xFF\x43\x01\xFF\x44\x01\xFF\x45\x01\xFF\x46\x01\xFF\x47\x01\xFF"
- "\x48\x01\xFF\x49\x01\xFF\x4A\x01\xFF\x4B\x01\xFF\x4C\x01\xFF\x4D\x01\xFF\x4E\x01\xFF\x4F\x01\xFF"
- "\x50\x01\xFF\x51\x01\xFF\x52\x01\xFF\x53\x01\xFF\x54\x01\xFF\x55\x01\xFF\x56\x01\xFF\x57\x01\xFF"
- "\x58\x01\xFF\x59\x01\xFF\x5A\x01\xFF\x5B\x01\xFF\x5C\x01\xFF\x5D\x01\xFF\x5E\x01\xFF\x5F\x01\xFF"
- "\x60\x01\xFF\x61\x01\xFF\x62\x01\xFF\x63\x01\xFF\x64\x01\xFF\x65\x01\xFF\x66\x01\xFF\x67\x01\xFF"
- "\x68\x01\xFF\x69\x01\xFF\x6A\x01\xFF\x6B\x01\xFF\x6C\x01\xFF\x6D\x01\xFF\x6E\x01\xFF\x6F\x01\xFF"
- "\x70\x01\xFF\x71\x01\xFF\x72\x01\xFF\x73\x01\xFF\x74\x01\xFF\x75\x01\xFF\x76\x01\xFF\x77\x01\xFF"
- "\x78\x01\xFF\x79\x01\xFF\x7A\x01\xFF\x7B\x01\xFF\x7C\x01\xFF\x7D\x01\xFF\x7E\x01\xFF\x7F\x01\xFF"
- "\x80\x01\xFF\x81\x01\xFF\x82\x01\xFF\x83\x01\xFF\x84\x01\xFF\x85\x01\xFF\x86\x01\xFF\x87\x01\xFF"
- "\x88\x01\xFF\x89\x01\xFF\x8A\x01\xFF\x8B\x01\xFF\x8C\x01\xFF\x8D\x01\xFF\x8E\x01\xFF\x8F\x01\xFF"
- "\x90\x01\xFF\x91\x01\xFF\x92\x01\xFF\x93\x01\xFF\x94\x01\xFF\x95\x01\xFF\x96\x01\xFF\x97\x01\xFF"
- "\x98\x01\xFF\x99\x01\xFF\x9A\x01\xFF\x9B\x01\xFF\x9C\x01\xFF\x9D\x01\xFF\x9E\x01\xFF\x9F\x01\xFF"
- "\xA0\x01\xFF\xA1\x01\xFF\xA2\x01\xFF\xA3\x01\xFF\xA4\x01\xFF\xA5\x01\xFF\xA6\x01\xFF\xA7\x01\xFF"
- "\xA8\x01\xFF\xA9\x01\xFF\xAA\x01\xFF\xAB\x01\xFF\xAC\x01\xFF\xAD\x01\xFF\xAE\x01\xFF\xAF\x01\xFF"
- "\xB0\x01\xFF\xB1\x01\xFF\xB2\x01\xFF\xB3\x01\xFF\xB4\x01\xFF\xB5\x01\xFF\xB6\x01\xFF\xB7\x01\xFF"
- "\xB8\x01\xFF\xB9\x01\xFF\xBA\x01\xFF\xBB\x01\xFF\xBC\x01\xFF\xBD\x01\xFF\xBE\x01\xFF\xBF\x01\xFF"
- "\xC0\x01\xFF\xC1\x01\xFF\xC2\x01\xFF\xC3\x01\xFF\xC4\x01\xFF\xC5\x01\xFF\xC6\x01\xFF\xC7\x01\xFF"
- "\xC8\x01\xFF\xC9\x01\xFF\xCA\x01\xFF\xCB\x01\xFF\xCC\x01\xFF\xCD\x01\xFF\xCE\x01\xFF\xCF\x01\xFF"
- "\xD0\x01\xFF\xD1\x01\xFF\xD2\x01\xFF\xD3\x01\xFF\xD4\x01\xFF\xD5\x01\xFF\xD6\x01\xFF\xD7\x01\xFF"
- "\xD8\x01\xFF\xD9\x01\xFF\xDA\x01\xFF\xDB\x01\xFF\xDC\x01\xFF\xDD\x01\xFF\xDE\x01\xFF\xDF\x01\xFF"
- "\xE0\x01\xFF\xE1\x01\xFF\xE2\x01\xFF\xE3\x01\xFF\xE4\x01\xFF\xE5\x01\xFF\xE6\x01\xFF\xE7\x01\xFF"
- "\xE8\x01\xFF\xE9\x01\xFF\xEA\x01\xFF\xEB\x01\xFF\xEC\x01\xFF\xED\x01\xFF\xEE\x01\xFF\xEF\x01\xFF"
- "\xF0\x01\xFF\xF1\x01\xFF\xF2\x01\xFF\xF3\x01\xFF\xF4\x01\xFF\xF5\x01\xFF\xF6\x01\xFF\xF7\x01\xFF"
- "\xF8\x01\xFF\xF9\x01\xFF\xFA\x01\xFF\xFB\x01\xFF\xFC\x01\xFF\xFD\x01\xFF\xFE\x01\xFF\xFF\x01\xFF"
- ;
- break;
- }
- case 2:
- {
- fuzzie.id = 0;
- fuzzie.len = 1;
- fuzzie.len_data = 255*3 + 1;
- fuzzie.data =
- "\x00"
- "\x01\x01\x00\x02\x01\x00\x03\x01\x00\x04\x01\x00\x05\x01\x00\x06\x01\x00\x07\x01\x00"
- "\x08\x01\x00\x09\x01\x00\x0A\x01\x00\x0B\x01\x00\x0C\x01\x00\x0D\x01\x00\x0E\x01\x00\x0F\x01\x00"
- "\x10\x01\x00\x11\x01\x00\x12\x01\x00\x13\x01\x00\x14\x01\x00\x15\x01\x00\x16\x01\x00\x17\x01\x00"
- "\x18\x01\x00\x19\x01\x00\x1A\x01\x00\x1B\x01\x00\x1C\x01\x00\x1D\x01\x00\x1E\x01\x00\x1F\x01\x00"
- "\x20\x01\x00\x21\x01\x00\x22\x01\x00\x23\x01\x00\x24\x01\x00\x25\x01\x00\x26\x01\x00\x27\x01\x00"
- "\x28\x01\x00\x29\x01\x00\x2A\x01\x00\x2B\x01\x00\x2C\x01\x00\x2D\x01\x00\x2E\x01\x00\x2F\x01\x00"
- "\x30\x01\x00\x31\x01\x00\x32\x01\x00\x33\x01\x00\x34\x01\x00\x35\x01\x00\x36\x01\x00\x37\x01\x00"
- "\x38\x01\x00\x39\x01\x00\x3A\x01\x00\x3B\x01\x00\x3C\x01\x00\x3D\x01\x00\x3E\x01\x00\x3F\x01\x00"
- "\x40\x01\x00\x41\x01\x00\x42\x01\x00\x43\x01\x00\x44\x01\x00\x45\x01\x00\x46\x01\x00\x47\x01\x00"
- "\x48\x01\x00\x49\x01\x00\x4A\x01\x00\x4B\x01\x00\x4C\x01\x00\x4D\x01\x00\x4E\x01\x00\x4F\x01\x00"
- "\x50\x01\x00\x51\x01\x00\x52\x01\x00\x53\x01\x00\x54\x01\x00\x55\x01\x00\x56\x01\x00\x57\x01\x00"
- "\x58\x01\x00\x59\x01\x00\x5A\x01\x00\x5B\x01\x00\x5C\x01\x00\x5D\x01\x00\x5E\x01\x00\x5F\x01\x00"
- "\x60\x01\x00\x61\x01\x00\x62\x01\x00\x63\x01\x00\x64\x01\x00\x65\x01\x00\x66\x01\x00\x67\x01\x00"
- "\x68\x01\x00\x69\x01\x00\x6A\x01\x00\x6B\x01\x00\x6C\x01\x00\x6D\x01\x00\x6E\x01\x00\x6F\x01\x00"
- "\x70\x01\x00\x71\x01\x00\x72\x01\x00\x73\x01\x00\x74\x01\x00\x75\x01\x00\x76\x01\x00\x77\x01\x00"
- "\x78\x01\x00\x79\x01\x00\x7A\x01\x00\x7B\x01\x00\x7C\x01\x00\x7D\x01\x00\x7E\x01\x00\x7F\x01\x00"
- "\x80\x01\x00\x81\x01\x00\x82\x01\x00\x83\x01\x00\x84\x01\x00\x85\x01\x00\x86\x01\x00\x87\x01\x00"
- "\x88\x01\x00\x89\x01\x00\x8A\x01\x00\x8B\x01\x00\x8C\x01\x00\x8D\x01\x00\x8E\x01\x00\x8F\x01\x00"
- "\x90\x01\x00\x91\x01\x00\x92\x01\x00\x93\x01\x00\x94\x01\x00\x95\x01\x00\x96\x01\x00\x97\x01\x00"
- "\x98\x01\x00\x99\x01\x00\x9A\x01\x00\x9B\x01\x00\x9C\x01\x00\x9D\x01\x00\x9E\x01\x00\x9F\x01\x00"
- "\xA0\x01\x00\xA1\x01\x00\xA2\x01\x00\xA3\x01\x00\xA4\x01\x00\xA5\x01\x00\xA6\x01\x00\xA7\x01\x00"
- "\xA8\x01\x00\xA9\x01\x00\xAA\x01\x00\xAB\x01\x00\xAC\x01\x00\xAD\x01\x00\xAE\x01\x00\xAF\x01\x00"
- "\xB0\x01\x00\xB1\x01\x00\xB2\x01\x00\xB3\x01\x00\xB4\x01\x00\xB5\x01\x00\xB6\x01\x00\xB7\x01\x00"
- "\xB8\x01\x00\xB9\x01\x00\xBA\x01\x00\xBB\x01\x00\xBC\x01\x00\xBD\x01\x00\xBE\x01\x00\xBF\x01\x00"
- "\xC0\x01\x00\xC1\x01\x00\xC2\x01\x00\xC3\x01\x00\xC4\x01\x00\xC5\x01\x00\xC6\x01\x00\xC7\x01\x00"
- "\xC8\x01\x00\xC9\x01\x00\xCA\x01\x00\xCB\x01\x00\xCC\x01\x00\xCD\x01\x00\xCE\x01\x00\xCF\x01\x00"
- "\xD0\x01\x00\xD1\x01\x00\xD2\x01\x00\xD3\x01\x00\xD4\x01\x00\xD5\x01\x00\xD6\x01\x00\xD7\x01\x00"
- "\xD8\x01\x00\xD9\x01\x00\xDA\x01\x00\xDB\x01\x00\xDC\x01\x00\xDD\x01\x00\xDE\x01\x00\xDF\x01\x00"
- "\xE0\x01\x00\xE1\x01\x00\xE2\x01\x00\xE3\x01\x00\xE4\x01\x00\xE5\x01\x00\xE6\x01\x00\xE7\x01\x00"
- "\xE8\x01\x00\xE9\x01\x00\xEA\x01\x00\xEB\x01\x00\xEC\x01\x00\xED\x01\x00\xEE\x01\x00\xEF\x01\x00"
- "\xF0\x01\x00\xF1\x01\x00\xF2\x01\x00\xF3\x01\x00\xF4\x01\x00\xF5\x01\x00\xF6\x01\x00\xF7\x01\x00"
- "\xF8\x01\x00\xF9\x01\x00\xFA\x01\x00\xFB\x01\x00\xFC\x01\x00\xFD\x01\x00\xFE\x01\x00\xFF\x01\x00"
- ;
- break;
- }
- case 3:
- {
- fuzzie.id = 0;
- fuzzie.len = 0;
- fuzzie.len_data = -1;
- fuzzie.data = "";
- break;
- }
- }
- //create array of information elements
- infoElem taggedParams[AssalliesIES] = {
- fuzzie
- };
- //length of all info elements, including id and len field
- int len_taggedParams = 0;
- for(int i = 0; i < AssalliesIES; i++)
- {
- if (taggedParams[i].len_data != -1) //do not include when len_data == -1
- {
- //+2 to include id and len field size
- len_taggedParams = len_taggedParams + taggedParams[i].len_data+2;
- }
- }
- //fill in struct
- assResponse assResp = {
- 36, radioTapHeader, //RadioTap hdr
- 1, "\x10", //Type
- 1, "\x00", //Flags
- 2, "\x40\x01", //Duration
- 6, dstAddress, //DST addr
- 6, myMAC, //Source addr
- 6, myMAC, //BSS addr
- 2, "\x00\x00", //Seq nr (overwritten by firmware)
- 2, "\x01\x00", //Capab info
- 2, "\x00\x00", //Status code
- 2, "\x01\xc0", //Association id
-
- len_taggedParams,
- taggedParams, //Information elements
- 4, "\x00\x00\x00\x00" //FSC (overwritten by firmware)
- };
- //calculate size of final packet
- *packetSize = assResp.len_radioTapHdr
- + assResp.len_type
- + assResp.len_flags
- + assResp.len_duration
- + assResp.len_destAddr
- + assResp.len_sourceAddr
- + assResp.len_bssAddr
- + assResp.len_seqNr
- + assResp.len_capabInfo
- + assResp.len_status
- + assResp.len_assId
- + assResp.len_taggedParams
- + assResp.len_fsc;
- //define packet
- u_char *assRespPacket = malloc(*packetSize);
- if(!assRespPacket)
- {
- printf("Memory allocation error!\n");
- exit(-1);
- }
- //copy all struct fields into packet
- int copyOffset = 0;
- memcpy(assRespPacket + copyOffset, assResp.radioTapHdr, assResp.len_radioTapHdr);
- copyOffset = copyOffset + assResp.len_radioTapHdr;
- memcpy(assRespPacket + copyOffset, assResp.type, assResp.len_type);
- copyOffset = copyOffset + assResp.len_type;
- memcpy(assRespPacket + copyOffset, assResp.flags, assResp.len_flags);
- copyOffset = copyOffset + assResp.len_flags;
- memcpy(assRespPacket + copyOffset, assResp.duration, assResp.len_duration);
- copyOffset = copyOffset + assResp.len_duration;
- memcpy(assRespPacket + copyOffset, assResp.destAddr, assResp.len_destAddr);
- copyOffset = copyOffset + assResp.len_destAddr;
- memcpy(assRespPacket + copyOffset, assResp.sourceAddr, assResp.len_sourceAddr);
- copyOffset = copyOffset + assResp.len_sourceAddr;
- memcpy(assRespPacket + copyOffset, assResp.bssAddr, assResp.len_bssAddr);
- copyOffset = copyOffset + assResp.len_bssAddr;
- memcpy(assRespPacket + copyOffset, assResp.seqNr, assResp.len_seqNr);
- copyOffset = copyOffset + assResp.len_seqNr;
- memcpy(assRespPacket + copyOffset, assResp.capabInfo, assResp.len_capabInfo);
- copyOffset = copyOffset + assResp.len_capabInfo;
- memcpy(assRespPacket + copyOffset, assResp.status, assResp.len_status);
- copyOffset = copyOffset + assResp.len_status;
- memcpy(assRespPacket + copyOffset, assResp.assId, assResp.len_assId);
- copyOffset = copyOffset + assResp.len_assId;
- //copy all information elements
- for(int i = 0; i < AssalliesIES; i++)
- {
- if (taggedParams[i].len_data != -1) //if id == -1, we do not want to include the information element
- {
- memcpy(assRespPacket + copyOffset, &taggedParams[i].id, 1);
- copyOffset = copyOffset + 1;
- memcpy(assRespPacket + copyOffset, &taggedParams[i].len, 1);
- copyOffset = copyOffset + 1;
- memcpy(assRespPacket + copyOffset, taggedParams[i].data, taggedParams[i].len_data);
- copyOffset = copyOffset + taggedParams[i].len_data;
- }
- }
-
- memcpy(assRespPacket + copyOffset, assResp.fsc, assResp.len_fsc);
- copyOffset = copyOffset + assResp.len_fsc;
- //send packet
- return assRespPacket;
- }
|