- #!/usr/bin/perl
- # By NaN
- #
- # Requirements:
- # aha https://github.com/masukomi/aha
- # sslscan https://github.com/rbsec/sslscan
- # testssl https://github.com/drwetter/testssl.sh
- # securityheaders https://github.com/juerkkil/securityheaders
- # nmap https://nmap.org
- # nikto https://github.com/sullo/nikto
- # dirb https://sourceforge.net/projects/dirb/files/
- # wig https://github.com/jekyc/wig
- # davtest https://github.com/cldrn/davtest
- # wafw00f https://github.com/EnableSecurity/wafw00f
- # whatweb https://github.com/urbanadventurer/whatweb
- # metagoofil https://github.com/kurobeats/metagoofil
- # spaghetti https://github.com/m4ll0k/Spaghetti
-
- use Socket;
- use URI;
-
- # command or path to pentest tools
- # comment out to disable - e.g. nmap
- my $sslscan = "sslscan"; # sslscan
- my $testssl = "testssl"; # testssl.sh
- my $headers = "/opt/securityheaders/securityheaders.py"; # securityheaders
- #my $nmap = "nmap"; # nmap
- my $nikto = "nikto"; # nikto
- #my $dirb = "dirb"; # dirb
- my $wig = "/opt/wig/wig.py"; # wig
- my $davtest = "davtest"; # davtest
- my $wafw00f = "wafw00f"; # wafw00f
- my $whatweb = "whatweb"; # whatweb
- #my $metagoo = "metagoofil"; # metagoofil
- #my $spaghet = "/opt/Spaghetti/spaghetti.py"; # spaghetti
-
- # misc
- my $aha = "aha"; # aha
- my $browser = "thunar"; # your file browser - remove to disable
-
- if($#ARGV < 1){
- print "Pre-Pentest Enumeration and Scanning v0.1\n";
- print "Usage: ./PEaS.pl </full/directory/path> <https://www.url.com>\n";
- exit(-1);
- }else{
-
- my $dir = $ARGV[0];
- my $url = $ARGV[1];
- my @children_pids;
-
- if($url =~ /^(?:(?:http?|s))/i){}else{
- die "[!] Not a valid URL!\n";
- }
-
- print "[i] Directory: $dir \n";
- print "[i] URL: $url \n";
-
- my $uri = URI->new( $url );
- my $ip_addr = gethostbyname( $uri->host );
- $ip_addr = inet_ntoa( $ip_addr );
- print "[i] IP address: $ip_addr \n";
-
-
- print "[+] Creating Directory\n";
- unless(mkdir($dir, 0755)) {
- die "[!] Unable to create!\n";
- }
-
- if(defined($sslscan)){
- my $pid = fork();
- if( $pid == 0 ){
- push @children_pids, $pid;
- if($url =~ /https/){
- print "[+] Launching SSLScan\n";
- system("$sslscan $url | aha >$dir/sslscan.html");
- print "[+] Finished SSLScan\n";
- }else{
- print "[-] Skipping SSLScan\n";
- }
- exit 0;
- }
- }
-
- if(defined($testssl)){
- my $pid2 = fork();
- if( $pid2 == 0){
- push @children_pids, $pid2;
- if($url =~ /https/){
- print "[+] Launching testssl.sh\n";
- system("$testssl $url | aha >$dir/testssl.html");
- print "[+] Finished testssl.sh\n";
- }else{
- print "[-] Skipping testssl.sh\n";
- }
- exit 0;
- }
- }
-
- if(defined($headers)){
- my $pid3 = fork();
- if( $pid3 == 0 ){
- push @children_pids, $pid3;
- print "[+] Checking Headers\n";
- system(" echo \"curl -Is --insecure $url\n\" > $dir/headers.txt");
- system("curl -Is --insecure $url >> $dir/headers.txt");
- system("python $headers $url | aha >$dir/headers.html");
- print "[+] Finished Headers\n";
- exit 0;
- }
- }
-
- if(defined($nmap)){
- my $pid4 = fork();
- if( $pid4 == 0 ){
- push @children_pids, $pid4;
- print "[+] Launching nmap\n";
- system("$nmap -p- -A -Pn -sT -oA $dir/nmap $ip_addr >/dev/null");
- print "[+] Finished nmap\n";
- exit 0;
- }
- }
-
- if(defined($nikto)){
- my $pid5 = fork();
- if( $pid5 == 0 ){
- push @children_pids, $pid5;
- print "[+] Launching nikto\n";
- system("$nikto -nointeractive -output $dir/nikto.txt -host $url >/dev/null");
- print "[+] Finished nikto\n";
- exit 0;
- }
- }
-
- if(defined($dirb)){
- my $pid6 = fork();
- if( $pid6 == 0 ){
- push @children_pids, $pid6;
- print "[+] Launching dirb\n";
- system("$dirb $url -o $dir/dirb.txt >/dev/null");
- print "[+] Finished dirb\n";
- exit 0;
- }
- }
-
- if(defined($wig)){
- my $pid7 = fork();
- if( $pid7 == 0 ){
- push @children_pids, $pid7;
- print "[+] Launching wig\n";
- system("python3 $wig -q $url | aha >$dir/wig.html");
- print "[+] Finished wig\n";
- exit 0;
- }
- }
-
- if(defined($davtest)){
- my $pid8 = fork();
- if( $pid8 == 0 ){
- push @children_pids, $pid8;
- print "[+] Launching davtest\n";
- system("$davtest -cleanup -quiet -url $url >$dir/davtest.txt");
- print "[+] Finished davtest\n";
- exit 0;
- }
- }
-
- if(defined($wafw00f)){
- my $pid9 = fork();
- if( $pid9 == 0 ){
- push @children_pids, $pid9;
- print "[+] Launching wafw00f\n";
- system("$wafw00f $url >$dir/wafw00f.txt");
- print "[+] Finished wafw00f\n";
- exit 0;
- }
- }
-
- if(defined($whatweb)){
- my $pid10 = fork();
- if( $pid10 == 0 ){
- push @children_pids, $pid10;
- print "[+] Launching whatweb\n";
- system("$whatweb --no-errors -a 3 $url | aha >$dir/whatweb.html");
- print "[+] Finished whatweb\n";
- exit 0;
- }
- }
-
- if(defined($metagoo)){
- my $pid11 = fork();
- if( $pid11 == 0 ){
- push @children_pids, $pid10;
- print "[+] Launching metagoofil\n";
- print "[+] Creating Directory\n";
- mkdir("$dir/downloaded_docs", 0755);
- system("$metagoo -d $url -t pdf,doc,xls,ppt,docx,xlsx,pptx -l 100 -h yes -o $dir/downloaded_docs -f $dir/metagoofil.html");
- print "[+] Finished metagoofil\n";
- exit 0;
- }
- }
-
- if(defined($spaghet)){
- my $pid12 = fork();
- if( $pid12 == 0 ){
- push @children_pids, $pid3;
- print "[+] Launching spaghetti\n";
- system("python $spaghet -u $url | aha >$dir/spaghetti.html");
- print "[+] Finished spaghetti\n";
- exit 0;
- }
- }
-
- my $loop = 1;
- $SIG{CHLD} = 'DEFAULT'; # turn off auto reaper
- $SIG{INT} = $SIG{TERM} = sub {$loop = 0; kill -15 => @children_pids};
- while ($loop && getppid() != 1) {
- my $child = waitpid(-1, 0);
- last if $child == -1;
- }
-
- if( length $browser ){
- print "[!] Launching file browser\n";
- system("$browser $dir &");
- }else{
- print "[!] Complete\n";
- }
- exit();
- }
-