ขอคนช่วยทีค่ะ เกิดอารายขึ้นเนี่ย ใน Dreamweaver ค่ะ เปิดใหม่ขึ้นมา และเปิดงานที่เคยทำ ทุก ๆ ไฟล์มี <iframe src="xxxxx"></iframe>
ของเข้าครับ
ระบบอาจมีจุดอ่อน พยายามลบให้หมดแล้ว หาดูช่องโหว่ แล้วอัพใหม่หมดครับ ดูเรื่อง permission ด้วยนะ
Date :
2009-06-19 13:39:31
By :
pjgunner
เครื่องคงจะติดไวรัสน่ะครับ รู้สึกว่าตัวนี้จะเจาะรหัส ftp ด้วย ต้องเปลี่ยนรหัส
และให้ทุกคนที่ upload ขึ้น host จะต้องติดตั้ง virus scan ทุกเครื่องครับ
สำหรับงานที่ถูก write ไปแล้วยากเหมือนกันครับที่จะกลับมาเหมือนเดิม
ลองดูโค้ดที่ใช้ตรวจหา virus ดูนะครับ ตอนนี้ผมเขียนตัวเขียนไฟล์แล้วแต่มี bug นิดหน่อยเลยยังไม่ได้เผยแพร่ที่ไหน
https://www.thaicreate.com/php/forum/027596.html
Date :
2009-06-19 13:53:24
By :
num
เอาโค๊ดตัวนี้ไปนะครับ แล้ว เชพ ไฟล์ ชื่ออะไรก็ได้ แล้ว อัพขึ้นโฮต แล้ว สั่งรัน เช่น ผม เชพไฟล์ชื่อ thai.php เมื่ออัพแล้ว ก็เรียกใช้ www.xxxxxxx.xxx/thai.php ที่เหลือหากไม่ตรงกับของผมไปเพิ่มเองได้นะครับ พอดีผมได้มาจากเพื่อนสมาชิก ผมทดลองใช้แล้ว แก้ได้ จริง ๆ
หาก มันเจอแล้ว ลบไม่ได้ เนื่องจาก โฟล์เดอร์ ไม่ได้เป็น 777 ให้โหลดไฟล์ นั้นลงมาในเครื่อง แล้วทำใน appserv แล้วอัพขึ้นไปทับ หรือลบแล้วอัพใหม่Code
#################################################################
<?
error_reporting(E_ALL);
## Virus Pattern (ห้ามแก้เด็ดขาด)
$virus_core = array(
"#(<\?.*?function_exists.*?fromCharCode.*?document\.write.*?</title>.*?gzencode.*?set_error_handler.*?\?>)#i", // (PHP/ScriptEngine/RSS) gumblar.cn
"#<script>document\.write\(unescape\(\'.*?(%u0)+.*?\'\)\);</script>#i",//New pattern by arak
/*
"#(<\?(php)?[^a-z0-9]*?eval\(base64_decode\(.*?'\)\);[^a-z0-9]*?\?>)#is", // (PHP/Backdoor/POST/Eval) gumblar.cn
*/
"#<iframe .*?http://.*?visibility.*?hidden.*?>[^<]?</iframe>#i", // (PHP/IFrame/Hidden) litecarexcellent.cn [Updated]
"#<iframe .*?visibility.*?hidden.*?http://.*?>[^<]?</iframe>#i", // (PHP/IFrame/Hidden) Mirror
"#\(function\(\)\{var.*?replace.*?eval\(unescape.*?\}\)\(\);#i", // (JS/ScriptEngine/RSS) gumblar.cn
"#\(function\([a-z0-9]*\)\{var.*?(replace|eval|unescape).*?\}\)\([^\)]*\);#i", // (JS/ScriptEngine/RSS) gumblar.cn
"#\(function\([a-z0-9]*\)\{eval\(unescape.*?replace.*?\}\)\([^\)]*\);#i", // (JS/ScriptEngine/RSS) gumblar.cn
);
## Core Configuration
$config['filetype'] = array("php", "css", "tpl", "js", "html", "htm", "txt", "php3", "inc");
$config['product_name'] = "PHP Virus Remover AJAX (Dreamhost Edition) - v2.5";
## Sys
define('PHPSELF', basename($_SERVER['PHP_SELF']));
define('LOCALPATH', preg_replace("#[^\\\/]+/$#", "", dirname(__FILE__)."/"));
define('HOSTPATH', "http://".preg_replace(array("#(".PHPSELF.")$#", "#/+#"), array("", "/"), $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']));
define('SUBPATH', preg_replace("#(".PHPSELF.")$#", "", $_SERVER['PHP_SELF']));
ini_set("memory_limit", "30M");
ini_set("max_execution_time", "1000");
session_start();
## AJAX (jquery-1.3.2.min.js)
if(isset($_GET['get'])) if($_GET['get'] == "jquery") {
header('Content-type: application/javascript');
echo base64_decode("LyoKIxxx");
die();
}
## Javascript Main Code
if(isset($_GET['get'])) if($_GET['get'] == "jsmain") {
header('Content-type: application/javascript');
echo '
var delay = 500;
var return_check="init";
var return_fix="init";
var proc1 = 0;
var proc2 = 0;
function getCookie(c_name) {
if (document.cookie.length>0) {
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1) {
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
function check() {
if(return_check == "init") $("#status").append("<hr><b>Run File Extension Checker...</b><br/>");
//Check file
$.get("',HOSTPATH,basename(__FILE__),'?check=1", function(data){
return_check = data;
if(return_check == "error_check_sum_fail") {
proc1 = window.clearTimeout(proc1);
alert("Error at checksum. Please refresh this page and run again.");
return true;
}
if(return_check != "return_check_finish") {
$("#status").append(data);
proc1 = window.setTimeout("check()", delay);
} else {
$("#status").append("<br/><b>FEC: Success!!! (Total File: " + getCookie("total_file") + ")</b><br/>");
$("#bt_scanner").show();
proc1 = window.clearTimeout(proc1);
}
});
}
function scan() {
if(return_fix == "init") $("#status").append("<hr><b>Run File Scanner & Fixer...</b><br/>");
//Fix
$.get("',HOSTPATH,basename(__FILE__),'?fix=1", function(data){
return_fix = data;
if(return_fix == "error_check_sum_fail") {
proc2 = window.clearTimeout(proc2);
alert("Error at checksum. Please refresh this page and run again.");
return true;
}
if(return_fix != "return_fix_finish") {
$("#status").append(data);
proc2 = window.setTimeout("scan()", delay);
} else {
$("#status").append("<br/><b>FSF: Success!!!</b><br/>");
proc2 = window.clearTimeout(proc2);
}
});
}
$(document).ready(function(){
$("#bt_scanner").hide();
$("#bt_checker").click(function () {
check();
$("#bt_checker").hide();
});
$("#bt_scanner").click(function () {
scan();
$("#bt_scanner").hide();
});
});
';
die();
}
## Function
function readdir_folder($path) {
global $config;
if(empty($path)) return false;
$end = "/"; //Unix
if (substr(PHP_OS, 0, 3) == "WIN") {
$path = str_replace("/", "\\", $path);
$end = "\\";
}
$file = array();
$folder = array();
$dir = "";
$except_dir = array("Maildir", "logs", ".", "..");
if ($handle = opendir($path)) {
while (false !== ($pt = readdir($handle))) {
$dir = $path.$pt.$end;
if(is_dir($dir) && !in_array($pt, $except_dir)) {
$folder[] = $dir;
}
$ext = end(explode(".", $pt));
if (in_array($ext, $config['filetype'])) {
$file[] = $path.$pt;
}
}
closedir($handle);
}
return array($file, $folder);
}
function clean_file($node) {
global $virus_core;
$found = 0;
$data = @file_get_contents($node);
foreach($virus_core as $code) {
preg_match($code, $data, $match);
$data = preg_replace($code, '', $data);
$found += @count($match[0]);
}
if($found > 0) {
$fp = fopen($node,"w");
fwrite($fp, trim($data));
fclose($fp);
}
return $found;
}
## AJAX Check Ext File (DATA Store in SESSION)
if(!empty($_GET['check'])) {
if(count($_SESSION['folder_array']) < 1) {
reset($_SESSION['file_array']);
$_SESSION['check_sum'] = crc32(current($_SESSION['file_array']));
$_SESSION['total_file'] = count($_SESSION['file_array']);
setcookie("total_file", $_SESSION['total_file'], time()+30);
die('return_check_finish');
}
reset($_SESSION['folder_array']);
$path = current($_SESSION['folder_array']);
if($_SESSION['check_sum'] != crc32($path)) die('error_check_sum_fail'); //ตรวจค่า hash จากรอบการทำงานที่แล้ว
if (substr(PHP_OS, 0, 3) == "WIN") {
$fix = array("/" => "\\");
$localpath = rtrim(strtr(LOCALPATH, $fix), "\\/");
$now_path = strtr($path, $fix);
$now_path = str_replace($localpath, "", $now_path);
} else {
$now_path = str_replace(rtrim(LOCALPATH, "\\/"), "", $path);
}
list($file, $folder) = readdir_folder($path);
echo "<font color='gray'><b>Checking:</b> ".$now_path."...</font><br/>";
//ตัดค่าแรกเก่าทิ้งเพราะทำเสร็จแล้ว
array_shift($_SESSION['folder_array']);
//รวมผลลัพท์
if(count($folder)) $_SESSION['folder_array'] = array_merge($_SESSION['folder_array'], $folder);
if(count($file)) $_SESSION['file_array'] = array_merge($_SESSION['file_array'], $file);
if(count($_SESSION['folder_array']) > 0) {
reset($_SESSION['folder_array']);
$path = current($_SESSION['folder_array']);
$_SESSION['check_sum'] = crc32($path);
}
die();
}
## AJAX Scan&Fix File (DATA Store in SESSION)
if(!empty($_GET['fix'])) {
if(count($_SESSION['file_array']) < 1) die('return_fix_finish');
reset($_SESSION['file_array']);
$path = current($_SESSION['file_array']);
if($_SESSION['check_sum'] != crc32($path)) die('error_check_sum_fail'); //ตรวจค่า hash จากรอบการทำงานที่แล้ว
if (substr(PHP_OS, 0, 3) == "WIN") {
$fix = array("/" => "\\");
$localpath = rtrim(strtr(LOCALPATH, $fix), "\\/");
$now_path = strtr($path, $fix);
$now_path = str_replace($localpath, "", $now_path);
} else {
$now_path = str_replace(rtrim(LOCALPATH, "\\/"), "", $path);
}
$ck = trim($now_path, "\\/");
echo "(".($_SESSION['total_file']-count($_SESSION['file_array'])+1)."/".$_SESSION['total_file'].") ";
if($ck != basename(PHPSELF)) {
$res = clean_file($path);
if($res > 0)
echo "<font color='red'><b>Cleaned:</b> ".$now_path."... [Found!] (<b>Found:</b> ".$res.")</font><br/>";
else
echo "<font color='gray'>Checked: ".$now_path."... <b>[Clean]</b></font><br/>";
} else echo "<font color='gray'><b>Skiped:</b> ".$now_path."...</font><br/>";
//ตัดค่าแรกเก่าทิ้งเพราะทำเสร็จแล้ว
array_shift($_SESSION['file_array']);
if(count($_SESSION['file_array']) > 0) {
reset($_SESSION['file_array']);
$path = current($_SESSION['file_array']);
$_SESSION['check_sum'] = crc32($path);
}
die();
}
## Run
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>'.$config['product_name'].'</title>
<style>
* {
font-size: 12pt;
font-family: Tahoma, helvetica, "MS Sans Serif";
}
</style>
<script type="text/javascript" src="'.HOSTPATH.PHPSELF.'?get=jquery"></script>
<script type="text/javascript" src="'.HOSTPATH.PHPSELF.'?get=jsmain"></script>
<script type="text/javascript">
</script>
<b>'.$config['product_name'].'</b><br/><br/>';
$_SESSION['folder_array'] = array(LOCALPATH);
$_SESSION['check_sum'] = crc32(LOCALPATH);
$_SESSION['file_array'] = array();
$_SESSION['total_file'] = "0";
echo '
โปรแกรมนี้จะทำงานทั้งหมด 2 ขั้นตอน<br/>
1. ตรวจหาไฟล์ที่มีปัญหา<br/>
2. จัดการแก้ไขไฟล์เหล่านั้น<br/><br/>
<div id="status">Idle....<br/><br/></div>
<input id="bt_checker" type="button" value="Check File Extension">
<input id="bt_scanner" type="button" value="Scan & Fix File Problem">
';
echo "</pre>";
?>
#############################################
Date :
2009-06-19 14:29:00
By :
intelman
Load balance : Server 02