玄机第一章应急响应
参考(学习文章)文章
https://github.com/Bypass007/Emergency-Response-Notes
第一章 应急响应-webshell查杀
1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx}
用d盾扫可以扫出三个webshell
从上到下分别是一句话木马,哥斯拉马和混淆一句话
打开哥斯拉马可以找到flag
2.黑客使用的什么工具的shell github地址的md5 flag{md5}
哥斯拉马
https://github.com/Tas9er/ByPassBehinder
3.黑客隐藏shell的完整路径的md5 flag{md5} 注 : /xxx/xxx/xxx/xxx/xxx.xxx
我们可以用如下命令来读取web命令下的所有隐藏文件1
find /var/www/html/ -type f -name ".*"
可以发现一个php文件
读取后发现其为木马
/var/www/html/include/Db/.Mysqli.php
4.黑客免杀马完整路径 md5 flag{md5}
题目问的是免杀马,正常的免杀马是无法通过工具扫描得到的,一般得通过日志来查看
这道题目是apache的环境日志文件为/var/log/access.log
其实这个所谓的免杀马就是经过混淆的木马,而那种程度的混淆d盾完全可以扫描出来
第一章 应急响应-Linux日志分析
日志文件 | 说明 |
---|---|
/var/log/cron | 记录了系统定时任务相关的日志 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/mailog | 记录邮件信息 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
/var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
/var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
/var/log/secure | 在 Red Hat/CentOS 等系统上,记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/auth.log | 在 Debian/Ubuntu 等系统上,记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
我们要写的这到题目主要是登陆日志的审查即
/var/log/auth.log
登陆失败日志/var/log/btmp 使用lastb查看
最后一次登陆日志 /var/log/lastlog 使用lastlog
登陆成功的用户日志/var/log/wtmp 使用last
目前登陆用户 /var/log/utmp //w、who、users
1.有多少IP在爆破主机ssh的root帐号,如果有多个使用”,”分割
我们这里直接使用正则来进行日志审查
题目问爆破的ip,那么我们只要找爆破失败的即可。再auth.log中爆破失败的关机词为Failed password for root我们可以使用如下命令来直接筛选出ip1
cat /var/log/auth.log.1 |grep -a "Failed password for root"|awk '{print$11}'|sort -n|uniq -c|awk '{print $2}'
来解释一下上面的指令吧。 grep -a就将文件强制是为文本文件查找含目标字符的哪一行。
awk 一个分组指令其会对文本的每一行进行处理,默认以空格未分隔符来分组。如 awk '{print $1}'
输出第一个组 即第一列,其也可以输出多组 awk '{print $1,$2,$3}'
sort排序命令 -n 以数字排序默认是按文本进行排序
uniq 去重并计数
flag{192.168.200.2,192.168.200.31,192.168.200.32}
2.ssh爆破成功登陆的IP是多少,如果有多个使用”,”分割
其问登陆成功的ip关键词为Accepted1
cat /var/log/auth.log.1 |grep -a "Accepted "|awk '{print$11}'|sort -n|uniq -c|awk '{print $2}'
3.爆破用户名字典是什么?如果有多个使用”,”分割
该日志的格式为 for xxxx for xxx.xxx.xxx
for与form之间为用户名而from后为ip
因为我们要找字典,其实就是找登陆失败的用户名1
cat /var/log/auth.log.1 | grep "Failed password" |perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
这里解释一下perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'
的意思
perl是一个高级编程语言其特点是高效处理文本。其参数执行的代码的意思如下1
2
3
4
5while($_=<>){ ... }:
<> 是 Perl 的输入操作符,它会从标准输入中逐行读取数据,直到遇到文件结尾(EOF)。
$_ 是默认的输入变量,while($_=<>){ ... } 会循环处理每一行输入。
while循环里是一个正则匹配/for(.*?) from/其匹配for xxx from 然后再通过print "$1\n"来输出第一个捕获组也就是输出第一个括号的内容,也就是用户名
4.登陆成功的IP共爆破了多少次
前面我们就找到了爆破成功的ip为192.168.200.2那我们之间用如下代码来看其爆破次数1
cat /var/log/auth.log.1 | grep "root from 192.168.200.2"
如果爆破次数过多可以使用如下方法来统计
1 | cat /var/log/auth.log.1| grep -a "Failed password for root from 192.168.200.2"|awk '{print $11}'|uniq -c |
5.黑客登陆主机后新建了一个后门用户,用户名是多少
新建用户的代码为new user我们这里之间找就好了1
cat /var/log/auth.log.1 | grep -a "new user"
常用命令
1 | 1、定位有多少IP在爆破主机的root帐号: |
我这里之间把应急响应手册上的扒下来了。上面的命令和我们的写的有点不太一样,但大同小异,我们主要的关注点应该再正则匹配的点上
应急响应-linux入侵排查
1.web目录存在木马,请找到木马的密码提交
d盾扫一下在1.php有webshell
flag{1}
2.服务器疑似存在不死马,请找到不死马的密码提交
看index.php会发现其有写马逻辑。应该是index.php写入的马
将其md5值解密得到密码为hello
flag{hello}
3.不死马是通过哪个文件生成的,请提交文件名
上一题已经找到了
flag{index.php}
4.黑客留下了木马文件,请找出黑客的服务器ip提交
我们看目录可以发现应该shell(1).elf的可执行文件。
猜测其为远控程序之类的,那么我们只要运行然后看网络流量不就可以了1
2
3
4
5
6
7
8
netstat -antlp
-a: 显示所有的连接和监听的端口,包括已连接的和处于监听状态的端口。
-n: 显示数字形式的地址和端口号,而不是域名和服务名称。这样可以加速输出显示,因为系统不会执行域名解析。
-t: 仅显示 TCP 连接。默认情况下,netstat 会显示所有协议的连接(如 TCP、UDP),但加上 -t 后,结果只会显示 TCP 连接。
-l: 仅显示监听状态的端口。它不会显示已经建立的连接,只会显示当前正在监听的端口。
-p: 显示每个连接或监听端口的进程 ID(PID)和对应的程序名称。这样你可以看到哪些程序正在使用网络连接。
我们使用如上指令来监听
显示所有连接和监听端口
以数字格式显示地址和端口
仅显示 TCP 连接
仅显示处于监听状态的端口
显示进程 ID 和程序名称
再运行恶意的shell(1).elf文件
当然这个文件没有执行权限文件直接使用chmod来该权限接即可
注意我是再做题时进行这种操作,如果是再现实场景中我们需要再虚拟机中进行
当然我们也可以用沙箱。
但是沙箱并不能得出端口号。
flag{10.11.55.21}
5.黑客留下了木马文件,请找出黑客服务器开启的监端口提交
上面已经出了
flag{3333}