黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 网管频道 >> 入侵检测 >> 文章正文
[推荐]突破WIN2003 PHP服务器的新思路
        ★★★★★
突破WIN2003 PHP服务器的新思路
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-9-29

总结一下:由于系统、IIS、PHP的版本不一样,以上提到的几个突破方法可能会有所变化,PHP还有许多扩展功能是可以利用的,走出system()那几个系统命令执行函数,你就有可能突破系统安全策略的限制!

后面附上proxy.php的代码

<?php
error_reporting(E_ALL);

/*
// 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.
//-------------------------------------------------------------------
// Class: PHProxy
// Author: ultimategamer00 (Abdullah A.)
// Last Modified: 6:28 PM 6/22/2004
*/

function __stripslashes($str)
{
return get_magic_quotes_gpc() ? stripslashes($str) : $str;
}

if (!function_exists('str_rot13'))
{
function str_rot13($str)
{
static $alpha = array('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM');
return strtr($str, $alpha[0], $alpha[1]);
}
}

class PHProxy
{
var $allowed_hosts = array();
var $version;
var $script_url;
var $url;
var $url_segments;
var $flags = array('include_form' => 1, 'remove_scripts' => 1, 'accept_cookies' => 1, 'show_images' => 1, 'show_referer' => 1);
var $socket;
var $content_type;
var $request_headers;
var $post_body;
var $response_headers;
var $response_body;

function PHProxy($flags = 'previous')
{
$this->version = '0.2';
$this->script_url = 'http'
. (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 's' : '')
. "://";
$this->set_flags($flags);
}

function start_transfer($url)
{
$this->set_url($url);
$this->open_socket();
$this->set_request_headers();
$this->set_response();

if ($this->follow_location() === false)
{
if ($this->flags['accept_cookies'] == 1)
{
$this->set_cookies();
}
$this->set_content_type();
}
else
{
$this->start_transfer($this->url);
}
}

function open_socket()
{
$this->socket = @fsockopen($this->url_segments['host'], $this->url_segments['port'], &$errno, &$errstr, 5);

if ($this->socket === false)
{
$this->trigger_error("$errstr (<b>URL:</b> )");
}
}

function set_response()
{
fwrite($this->socket, $this->request_headers);
$response = '';

do
{
$data = fread($this->socket, 8192);
$response .= $data;
}
while (strlen($data) != 0);

fclose($this->socket);
preg_match("#(.*?)\r\n\r\n(.*)#s", $response, $matches);

$this->response_headers = $matches[1];
$this->response_body = $matches[2];
}

function set_content_type()
{
preg_match("#content-type:([^\r\n]*)#i", $this->response_headers, $matches);

if (trim($matches[1]) != '')
{
$content_type_array = explode(';', $matches[1]);
$this->content_type = strtolower(trim($content_type_array[0]));
}
}

function set_url($url)
{
$this->url = $this->decode_url($url);

if (strpos($this->url, '://') === false)
{
$this->url = 'http://&#39; . $this->url;
}

$url_segments = @parse_url($this->url);

if (!empty($url_segments))
{
$url_segments['port'] = isset($url_segments['port']) ? $url_segments['port'] : 80;
$url_segments['path'] = isset($url_segments['path']) ? $url_segments['path'] : '/';
$url_segments['dir'] = substr($url_segments['path'], 0, strrpos($url_segments['path'], '/'));
$url_segments['base'] = $url_segments['scheme'] . '://' . $url_segments['host'] . $url_segments['dir'];
$url_segments['prev_dir'] = $url_segments['path'] != '/' ? substr($url_segments['base'], 0, strrpos($url_segments['base'], '/')+1) : $url_segments['base'] . '/';

$this->url_segments = $url_segments;

/*
URL: http://username:password@< wind_code_1 >
scheme // http
host // www.example.com
port // 80
user // username
pass // password
path // /dir/dir/page.php
query // ? 'foo=bar&foo2=bar2'
fragment // # 'bookmark'

dir // /dir/dir
base // http://www.example.com/dir/dir
prev_dir // http://www.example.com/dir/
*/

if (!empty($this->allowed_hosts) && !in_array($this->url_segments['host'], $this->allowed_hosts))
{
$this->trigger_error('You are only allowed to browse these websites: ' . implode(', ', $this->allowed_hosts));
}
}
else
{
$this->trigger_error('Please supply a valid URL');
}
}

function encode_url($url)
{
$url = str_rot13(urlencode(preg_replace('#^([\w+.-]+)://#i', "/", $url)));
return $url;
}

function decode_url($url)
{
$url = preg_replace('#^([\w+.-]+)/#i', "://", urldecode(str_rot13($url)));
return $url;
}

function modify_urls()
{
preg_match_all("#\s(href|src|action|codebase|url)=([\"\'])?(.*?)([\"\'])?([\s\>])#i", $this->response_body, $matches, PREG_SET_ORDER);

foreach ($matches as $match)
{
$uri = trim($match[3]);
$fragment = ($hash_pos = strpos($uri, '#') !== false) ? '#' . substr($uri, $hash_pos) : '';

if (!preg_match('#^[\w+.-]+://#i', $uri))
{
switch (substr($uri, 0, 1))
{
case '/':
$uri = $this->url_segments['scheme'] . '://' . $this->url_segments['host'] . $uri;
break;
case '#':
continue 2;
default:
$uri = $this->url_segments['base'] . '/' . $uri;
break;
}
}

$uri = $this->encode_url($uri);
$replace = ' ' . $match[1] . '=' . $match[2] . $this->script_url . '?url=' . $uri . $fragment . $match[4] . $match[5];

$this->response_body = str_replace($match[0], $replace, $this->response_body);
}
}

function set_flags($flags)
{
if (is_numeric($flags))
{
setcookie('flags', $flags, time()+(4*7*24*60*60), '', $_SERVER['HTTP_HOST']);
$this->flags['include_form'] = $flags == 1 ? 1 : 0;
$this->flags['remove_scripts'] = $flags == 1 ? 1 : 0;
$this->flags['accept_cookies'] = $flags == 1 ? 1 : 0;
$this->flags['show_images'] = $flags == 1 ? 1 : 0;
$this->flags['show_referer'] = $flags == 1 ? 1 : 0;
}
else if (isset($_COOKIE['flags']))
{
$this->set_flags($_COOKIE['flags']);
}
}

function set_request_headers()
{
$headers = " " . (isset($this->url_segments['query']) ? "?" : '') . " HTTP/1.0\r\n";
$headers .= "Host: :\r\n";
$headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
$headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1\r\n";
$headers .= "Connection: close\r\n";

if ($this->flags['show_referer'] == 1)
{
$headers .= "Referer: \r\n";
}

$cookies = $this->get_cookies();
$headers .= $cookies != '' ? "Cookie: $cookies\r\n" : '';

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$this->set_post_body($_POST);

$headers .= "Content-Type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: " . strlen($this->post_body) . "\r\n\r\n";
$headers .= $this->post_body;
}

$headers .= "\r\n";

$this->request_headers = $headers;
}

function set_post_body($array, $parent_key = null)
{
foreach ($array as $key => $value)
{
if (is_array($value))
{
$this->set_post_body($value, isset($parent_key) ? sprintf('%s[%s]', $parent_key, urlencode($key)) : urlencode($key));
}
else
{
$this->post_body .= $this->post_body != '' ? '&' : '';
$key = isset($parent_key) ? sprintf('%s[%s]', $parent_key, urlencode($key)) : urlencode($key);
$this->post_body .= $key . '=' . urlencode(__stripslashes($value));
}
}
}

function follow_location()
{
if (preg_match("#(location|uri):([^\r\n]*)#i", $this->response_headers, $matches))
{
$uri = $this->decode_url(trim($matches[2]));

if (!preg_match('#^[\w+.-]+://#i', $uri))
{
if (substr($uri, 0, 1) == '/')
{
$uri = $this->url_segments['scheme'] . '://' . $this->url_segments['host'] . $uri;
}
else
{
$uri = $this->url_segments['prefix'] . '/' . $uri;
}
}

$this->url = $uri;
return true;
}
return false;
}

function set_cookies()
{
if (preg_match_all("#set-cookie:([^\r\n]*)#i", $this->response_headers, $matches))
{
foreach ($matches[1] as $match)
{
preg_match('#^\s*([^=;,\s]*)=?([^;,\s]*)#', $match, $cookie) ? list(, $name, $value) = $cookie : null;
preg_match('#;\s*expires\s*=([^;]*)#i', $match, $cookie) ? list(, $expires) = $cookie : null;
preg_match('#;\s*path\s*=\s*([^;,\s]*)#i', $match, $cookie) ? list(, $path) = $cookie : null;
preg_match('#;\s*domain\s*=\s*([^;,\s]*)#i', $match, $cookie) ? list(, $domain) = $cookie : null;
preg_match('#;\s*(secure\b)#i', $match, $cookie) ? list(, $secure) = $cookie : null;

$expires = isset($expires) ? strtotime($expires) : 0;
$path = isset($path) ? $path : $this->url_segments['dir'];
$domain = isset($domain) ? $domain : $this->url_segments['host'];
$domain = rtrim($domain, '.');

if (!preg_match("#$domain$#i", $this->url_segments['host']))
{
continue;
}
if (preg_match('#\.(com|edu|net|org|gov|mil|int|aero|biz|coop|info|museum|name|pro)$#i', $domain))
{
if (substr_count($domain, '.') < 2)
{
continue;
}
}
else if (substr_count($domain, '.') < 3)
{
continue;
}
setcookie(urlencode("PHProxy;$name;$domain;$path"), $value, $expires, '', $_SERVER['HTTP_HOST']);
}
}
}

function get_cookies($restrict = true)
{
if (!empty($_COOKIE))
{
$cookies = '';

foreach ($_COOKIE as $cookie_name => $cookie_value)
{
$cookie_args = explode(';', urldecode($cookie_name));

if ($cookie_args[0] != 'PHProxy')
{
continue;
}

if ($restrict)
{
list(, $name, $domain, $path) = $cookie_args;
$domain = str_replace('_', '.', $domain);

if (preg_match("#$domain$#i", $this->url_segments['host']) && preg_match("#^$path#i", $this->url_segments['path']))
{
$cookies .= $cookies != '' ? '; ' : '';
$cookies .= "$name=$cookie_value";
}
}
else
{
array_shift($cookie_args);
$cookie_args[1] = str_replace('_', '.', $cookie_args[1]);
$cookie_args[] = $cookie_value;
$cookies[] = $cookie_args;
}
}
return $cookies;
}
}

function delete_cookies($hash)
{
$cookies = $this->get_cookies(false);

foreach ($cookies as $args)
{
if ($hash == 'all' || $hash == md5($args[0].$args[1].$args[2].$args[3]))
{
setcookie(urlencode("PHProxy;$args[0];$args[1];$args[2]"), '', 1);
}
}
}

function return_response($send_headers = true)
{
if (strpos($this->content_type, 'text/html') !== false || strpos($this->content_type, 'xhtml') !== false)
{
if ($this->flags['remove_scripts'] == 1)
{
$this->remove_scripts();
}
if ($this->flags['show_images'] == 0)
{
$this->remove_images();
}

$this->modify_urls();

if ($this->flags['include_form'] == 1)
{
$this->include_form();
}
}
$headers = explode("\r\n", trim($this->response_headers));
$headers[] = 'Content-Disposition: '. (strpos($this->content_type, 'octet_stream') ? 'attachment' : 'inline') .'; filename='. substr($this->url_segments['path'], strrpos($this->url_segments['path'], '/')+1);
$headers[] = 'Content-Length: '. strlen($this->response_body);

if ($send_headers)
{
foreach ($headers as $header)
{
header($header);
}
}

return $this->response_body;
}

function remove_scripts()
{
$this->response_body = preg_replace('#<script[^>]*?>.*?</script>#si', '', $this->response_body); // Remove any scripts enclosed between <script />
$this->response_body = preg_replace("#\s*(\bon\w+)=([\"\'])?(.*?)([\"\'])?([\s\>])#i", "", $this->response_body); // Remove javascript event handlers
$this->response_body = preg_replace('#<noscript>(.*?)</noscript>#si', "", $this->response_body); //expose any html between <noscript />

}

function remove_images()
{
$this->response_body = preg_replace('#<(img|image)[^>]*?>#si', '', $this->response_body);
}

function include_form()
{
ob_start();
?><script src="javascript.js" type="text/javascript"></script>
<div style="text-align: center;border: 1px solid #00c; color: #000066;background-color: #eeeeff;font-size: 11px">
<form name="proxy_form" method="get" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<input type="hidden" name="url" value="" />
<input type="hidden" name="flags" value="" />
</form>
<form name="settings" action="" method="get" onsubmit="return submit_form();">
Current URI: <input type="text" size="66" name="url" value="<?php echo $this->url ?>" />
<input type="submit" name="browse" value="Browse" onclick="return submit_form();" />
<input type="checkbox" name="new_window" value="true" /> New Window [<a href="<?php echo $this->script_url ?>?url=<?php echo $this->encode_url($this->url_segments['prev_dir']) ?>">Up One Directory</a>]<br />
<?php echo $this->options_list() ?>
</form></div><hr style="color: #000066" /><?
$form_html = ob_get_contents();
ob_end_clean();
$this->response_body = preg_replace("#\<body(.*?)\>#si", "\n$form_html", $this->response_body, 1);
}

function trigger_error($error)
{
header("Location: $this->script_url?error=$error");
exit;
}

function options_list($tabulate = false, $comments_on = false)
{
$output = '';
$comments = array();
$comments['include_form'] = 'Includes a mini URL-form on every HTML page';
$comments['remove_scripts'] = 'Remove all sorts of client-side scripting';
$comments['accept_cookies'] = 'Accept HTTP cookies';
$comments['show_images'] = 'Show images';
$comments['show_referer'] = 'Show referring website in HTTP headers';

foreach ($this->flags as $flag_code => $flag_status)
{
$interface = array(ucwords(str_replace('_', ' ', $flag_code)),
' <input type="checkbox" name="ops[]"'
. ($flag_status == 1 ? ' checked="checked"' : '') . ' /> '
);
$tabulate ? null : $interface = array_reverse($interface);

$output .= ($tabulate ? '<tr><td class="option">' : '')
. $interface[0]
. ($tabulate ? '</td><td class="option">' : '')
. $interface[1]
. ($comments_on ? $comments[$flag_code] : '')
. ($tabulate ? '</td></tr>' : '');
}

return $output;
}

}

$PHProxy = new PHProxy(isset($_GET['flags']) ? $_GET['flags'] : null);

if (isset($_GET['action'], $_GET['delete']) && $_GET['action'] == 'cookies')
{
$PHProxy->delete_cookies($_GET['delete']);
header("Location: $PHProxy->script_url?action=cookies");
exit();
}

if (isset($_GET['url']))
{
$PHProxy->start_transfer($_GET['url']);
echo $PHProxy->return_response();
exit();
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>PHProxy</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<style>
body
{
margin: 10px 0px 0px 0px;
padding: 0px;
font-size: 12px;
}

form, input
{
margin: 0px;
padding: 0px;
}

body, input
{
font-family: lucida sans unicode, lucida, helvetica, verdana, arial, sans-serif;
}

input
{
font-size: 10px;
font-weight: bold;
color: #E76B18;

}

.title
{
font-size: 25px;
color: #E67D0B;
border-bottom: 1px solid #E76B18;
}

.error
{
font-size: 12px;
background-color: #FF0000;
color: #FFFFFF;
border-bottom: 1px solid #E76B18;
}

#container
{
border: 1px solid #CCCDD7;
width: 700px;
margin: auto;
}

#menu
{
border-left: 1px solid #CCCDD7;
border-bottom: 1px solid #CCCDD7;
float: right;
height: 20px;
background-color: #EEEEEE;
}

.option
{
height: 25px;
border-bottom: 1px solid #3399FF;
}

.shade
{
background-color: #EEEEEE;
}

.head
{
background-color: #A2AACE;
}

a:link, a:visited
{
color: #21A121;
text-decoration: none;
border-bottom: 1px solid #ffb944;
}

a:hover, a:active
{
color: #3399FF;
text-decoration: none;
border-bottom: 1px solid #ffb944;
}
</style>
<script type="text/javascript">
alpha1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
alpha2 = 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM';

function str_rot13(str)
{
newStr = '';

for (i = 0; i < str.length; i++)
{
curLet = str.charAt(i);
curLetLoc = alpha1.indexOf(curLet);

if (curLet == '#')
{
document.proxy_form.action += str.substring(i, str.length)
}

newStr += (curLetLoc < 0) ? curLet : alpha2.charAt(curLetLoc);
}

return newStr;
}

function submit_form()
{
flags = '';

for (i = 0; i < document.settings.elements['ops[]'].length; i++)
{
flags += (document.settings.elements['ops[]'].checked == true) ? '1' : '0';
}

document.proxy_form.flags.value = flags;
document.proxy_form.target = (document.settings.new_window.checked == true) ? '_blank' : '_top';
searchPattern = /^([\w+.-]+):\/\//gi;
document.proxy_form.url.value = str_rot13(document.settings.url.value.replace(searchPattern, "\/"));
document.proxy_form.submit();
return false;
}
</script>
</head>
<body>
<div id="container">
<div id="menu"><a href="?action=form">URL Form</a> | <a href="?action=cookies">Manage Cookies</a></div>
<div class="title">PHProxy</div>
<?php

if (isset($_GET['error']))
{
echo '<div class="error"><b>Error:</b> ' . $_GET['error'] . '</div>';
}

if (isset($_GET['action']) && $_GET['action'] == 'cookies')
{
$cookies = $PHProxy->get_cookies(false);

if (!empty($cookies))
{
echo '<table style="width: 100%">';
echo '<tr><td class="option" colspan="5"><a href="?action=cookies&delete=all">Clear All Cookies</a></td></tr>';
echo '<tr><td class="head">Name</td><td class="head">Domain</td><td class="head">Path</td><td class="head">Value</td><td class="head">Action</td></tr>';

for ($i = 0; $i < count($cookies); $i++)
{
$j = $i&1 ? ' class="shade"' : '';
echo "<tr><td$j></td><td$j></td><td$j></td>"
. "<td$j></td><td$j><a href=". '"?action=cookies&delete='. md5(implode('', $cookies[$i])) . '">delete</a></td></tr>';
}

echo '</table>';
}
else
{
echo '<div class="error">No cookies available.</div>';
}
}
else
{
?>
<form method="get" action="<?php echo $_SERVER['PHP_SELF'] ?>" name="proxy_form">
<input type="hidden" name="url" value="" />
<input type="hidden" name="flags" value="" />
</form>
<form method="get" name="settings" action="" onsubmit="return submit_form();">
<table style="width: 100%">
<tr><td class="option" style="width: 20%">URL</td><td class="option" style="width: 80%"> <input type="text" name="url" size="70" value="" /></td></tr>
<?php echo $PHProxy->options_list(true, true) ?>
</table>
<div style="text-align: center"><input type="checkbox" name="new_window" />New Window <input type="submit" name="browse" value="Browse" onclick="return submit_form();" /><input type="reset" value="Reset Form" /></div>

<?
/*
<div style="text-align: center"><a href="PHProxyhttp://sourceforge.net/projects/poxy/">PHProxy</a> <?php echo $PHProxy->version ?> Copyright 2004 <a href="ultimategamer00http://www.whitefyre.com/">ultimategamer00</a></div>
*/
?>

</form>
<?php
}

echo '</div></body></html>';
?>

上一页  [1] [2] [3] 

文章录入:cainiaowang    责任编辑:aman 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886