找回密码
 立即注册
首页 业界区 业界 应急响应-日志分析

应急响应-日志分析

山真柄 2025-10-1 18:02:57
web服务器日志


在很多时候,我们经常需要分析网站的日志,以此来查看网站运行的各种情况。比如说如果网站被攻击,我们可以通过查看日志来溯源攻击者。
Apache

日志目录:/Apache/logs/

logs目录下有两个文件,一个是 access.log ,就是用户的访问日志。还有一个是 error.log,这个是apache运行时的错误日志。

Nginx

日志目录:/Nginx/logs/

logs目录下有两个文件,一个是 access.log ,就是用户的访问日志。还有一个是 error.log,这个是apache运行时的错误日志。

Tomcat

日志目录:/Tomcat/logs/

logs目录下有五类文件:

  • catalina.日期.log:这个主要是记录tomcat启动时候的信息,类似于我们在eclipse中启动服务的时候在控制台看到的信息
  • host-manager.日期.log:这个是放tomcat的自带的manager项目的日志信息的,也没有看到有什么重要的日志信息
  • localhost.日期.log:这个类似于catalina日志,可是信息没有第一种全
  • localhost_access_log.日期.txt:这个是存放访问tomcat的请求的所有地址以及请求的路径、时间,请求协议以及返回码等信息(重要)
  • manager.日志.log:这个估计是manager项目专有的日志文件

Web日志的分析

如下,我们分析日志中第8条的更个部分的含义

  • 访问者ip:127.0.0.1
  • 访问日期:07/Nov/2019:18:11:54 +0800
  • 请求方式:GET
  • 请求链接:/dvwa/phpinfo.php
  • 请求参数:PHPE9568F34-D428-11d2-A769-00AA001ACF42
  • HTTP协议:HTTP/1.1
  • 返回转态码:200
  • 返回包的长度:2536
  • 请求包的Referer:http://127.0.0.1/dvwa/phpinfo.php
  • 访问者的浏览器信息:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

Window日志分析

01 事件日志简介

Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。
Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。
系统日志
  1. 记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。系统日志中记录的时间类型由Windows NT/2000操作系统预先定义。默认位置: %SystemRoot%\System32\Winevt\Logs\System.evtx
复制代码
应用程序日志
  1. 包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许会有助于你解决问题。 默认位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx
复制代码
安全日志
  1. 记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。默认设置下,安全性日志是关闭的,管理员可以使用组策略来启动安全性日志,或者在注册表中设置审核策略,以便当安全性日志满后使系统停止响应。默认位置:%SystemRoot%\System32\Winevt\Logs\Security.evtx
复制代码
系统和应用程序日志存储着故障排除信息,对于系统管理员更为有用。 安全日志记录着事件审计信息,包括用户验证(登录、远程访问等)和特定用户在认证后对系统做了什么,对于调查人员而言,更有帮助。
查看系统日志方法:

  • “开始”菜单上,依次指向“所有程序”“管理工具”,然后单击“事件查看器”
  • 按 "Window+R",输入 ”eventvwr.msc“ 也可以直接进入“事件查看器

02 事件日志分析

对于Windows事件日志分析,不同的EVENT ID代表了不同的意义,摘录一些常见的安全事件的说明:
事件ID说明4624登录成功4625登录失败4634注销成功4647用户启动的注销4672使用超级用户(如管理员)进行登录4720创建用户每个成功登录的事件都会标记一个登录类型,不同登录类型代表不同的方式:
登录类型描述说明2交互式登录(Interactive)用户在本地进行登录。3网络(Network)最常见的情况就是连接到共享文件夹或共享打印机时。4批处理(Batch)通常表明某计划任务启动。5服务(Service)每种服务都被配置在某个特定的用户账号下运行。7解锁(Unlock)屏保解锁。8网络明文(NetworkCleartext)登录的密码在网络上是通过明文传输的,如FTP。9新凭证(NewCredentials)使用带/Netonly参数的RUNAS命令运行一个程序。10远程交互,(RemoteInteractive)通过终端服务、远程桌面或远程协助访问计算机。11缓存交互(CachedInteractive)以一个域用户登录而又没有域控制器可用关于更多EVENT ID,详见微软官方网站上找到了“Windows Vista 和 Windows Server 2008 中的安全事件的说明”。
原文链接 :https://support.microsoft.com/zh-cn/help/977519/description-of-security-events-in-windows-7-and-in-windows-server-2008
案例1:可以利用eventlog事件来查看系统账号登录情况:

  • “开始”菜单上,依次指向“所有程序”“管理工具”,然后单击“事件查看器”
  • 在事件查看器中,单击“安全”,查看安全日志;
  • 在安全日志右侧操作中,点击“筛选当前日志”,输入事件ID进行筛选。
    4624 --登录成功
    4625 --登录失败
    4634 -- 注销成功 4647 -- 用户启动的注销
    4672 -- 使用超级用户(如管理员)进行登录
我们输入事件ID:4625进行日志筛选,发现事件ID:4625,事件数175904,即用户登录失败了175904次,那么这台服务器管理员账号可能遭遇了暴力猜解。

04 日志分析工具
Log Parser
Log Parser(是微软公司出品的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。
Log Parser 2.2下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=24659
Log Parser 使用示例:https://mlichtenberg.wordpress.com/2011/02/03/log-parser-rocks-more-than-50-examples/

基本查询结构
  1. Logparser.exe –i:EVT –o:DATAGRID "SELECT * FROM c:\xx.evtx"
复制代码
使用Log Parser分析日志
1、查询登录成功的事件
  1. 登录成功的所有事件LogParser.exe -i:EVT –o:DATAGRID  "SELECT *  FROM c:\Security.evtx where EventID=4624"指定登录时间范围的事件:LogParser.exe -i:EVT –o:DATAGRID  "SELECT *  FROM c:\Security.evtx where TimeGenerated>'2018-06-19 23:32:11' and TimeGenerated /tmp/slow_url.txt
复制代码
IP, URL 抽取:
  1. # tail -f /www/logs/access.2019-02-23.log | grep '/test.html' | awk '{print $1" "$7}'
复制代码
Linux日志分析

什么是Linux日志分析?

Linux日志分析是指对Linux系统中生成的日志文件进行检查、监控和分析的过程。在Linux系统中,各种服务和应用程序会产生日志文件,记录系统运行状态、用户操作、系统错误、安全事件等信息。分析这些日志可以帮助系统管理员理解系统的运行状况,诊断问题,并确保系统的安全和稳定运行。日志分析可以手动进行,也可以使用各种日志分析工具来自动化这一过程。常见的日志文件包括系统日志(/var/log/syslog 或 /var/log/messages)、认证日志(/var/log/auth.log)、应用程序日志等。
常见日志文件

Linux系统中的日志文件通常存储在 /var/log 目录下,常见的日志文件包括:

  • /var/log/syslog:记录系统的各种信息和错误。
  • /var/log/auth.log:记录身份验证相关的信息,如登录和认证失败。
  • /var/log/kern.log:记录内核生成的日志信息。
  • /var/log/dmesg:记录系统启动时内核产生的消息。
  • /var/log/boot.log:记录系统启动过程中的消息。
  • /var/log/messages:记录系统的广泛消息,包括启动和应用程序信息。
  • /var/log/secure:记录安全相关的消息。
  • /var/log/httpd/:记录Apache HTTP服务器的访问和错误日志(若安装了Apache)。
  • /var/log/nginx/:记录Nginx服务器的访问和错误日志(若安装了Nginx)。
常见日志文件位置
1.Apache日志

  • 访问日志:默认位置通常是/var/log/apache2/access.log.1(Debian/Ubuntu)或/var/log/httpd/access_log.1(CentOS/RHEL)。
  • 错误日志:默认位置通常是/var/log/apache2/error.log.1(Debian/Ubuntu)或/var/log/httpd/error_log.1(CentOS/RHEL)。
2.SSH日志

  • 身份验证日志:通常位于/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(CentOS/RHEL)。
3.系统日志

  • 系统日志:通常位于/var/log/syslog(Debian/Ubuntu)或/var/log/messages(CentOS/RHEL)。
例题


1.查爆破主机账号ip


遇到这种题
首先肯定是先找到日志的位置,一般来说,SSH登录尝试 会记录在 /var/log/auth.log.1(这是固定的)
  1. SSH登录尝试会记录在 `/var/log/auth.log.1`**auth.log和auth.log.1有什么区别,为什么查看.1?
复制代码

接着那既然是爆破,那肯定会有很多失败的次数。
——使用grep筛选出SSH失败的登录尝试
最后
提取IP地址: 从这些日志条目中提取尝试登录的IP地址。
统计各个IP地址的尝试次数: 统计每个IP地址的尝试次数,找出所有尝试暴力破解的IP。
逻辑基本就是上面这样,如果日志少一些那还好,可以一条条进行分析,日志多的话要进行筛选
命令:
  1. cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more
复制代码

  1. flag{192.168.200.2,192.168.200.31,192.168.200.32}
复制代码
2.找成功登陆的ip


得到上述3个ip,最多的次数是四次,直接提交尝试
3.爆破用户名字典


那首先我们得了解什么是爆破用户名字典?
简单来说指黑客在进行暴力破解攻击时使用的一系列用户名列表。黑客通过自动化工具逐个尝试这些用户名,结合常见或默认密码,试图找到有效的登录凭据。这个过程被称为“字典攻击”或“暴力破解攻击”。
具体操作步骤:

  • 识别关键日志条目:
确定日志中包含攻击相关信息的条目。例如,SSH 失败登录尝试通常包含“Failed password”关键字,成功登录则包含“Accepted”。

  • 提取有用信息:
使用文本处理工具如 grep、awk、perl 或 sed 提取出关键数据。例如,可以从日志中提取出失败尝试的用户名、IP地址、时间戳等。

  • 统计分析:
对提取出的信息进行统计分析,以确定被尝试最多的用户名和来源IP等。例如,使用 uniq 和 sort 对数据进行去重和排序。
解题

分析:
auth.log.1文件,提取出所有包含"Failed password"字符串的行,这通常表明有失败的登录尝试。
然后用命令
使用Perl脚本提取出失败尝试的用户名和来源IP地址,统计每个用户名的失败尝试次数,并按照次数降序排列显示结果。
  1. cat auth.log.1 | grep -a "Failed password" |perl -e 'while($_=){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
复制代码
分析命令:

总结:

4.成功登录 root 用户的 ip爆破次数

  1. cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more
复制代码

flag{4}
5.新建后门用户


新的知识点:问我们黑客登陆主机后新建了一个后门用户,用户名是多少?
那这种我们怎么操作呢?(其实基本也就是这五个步骤)
步骤1:确定日志文件
通常与用户登录和用户管理活动相关的日志文件是 /var/log/auth.log 或其备份文件如 /var/log/auth.log.1。
步骤2:搜索创建用户的关键字
使用 grep 命令搜索与创建用户相关的关键字,如 new user。这样可以找到所有新建用户的日志条目。
  1. cat /var/log/auth.log.1 | grep -a "new user"
复制代码
此命令会列出所有包含 new user 的日志行,这些行通常记录了用户创建的详细信息。
步骤3:提取新用户信息
从日志中提取新用户的详细信息,包括用户名、创建时间等。
例如,假设你得到了如下输出:
Jan 12 10:32:15 server useradd[1234]: new user: name=testuser, UID=1001, GID=1001, home=/home/testuser, shell=/bin/bash
这条日志显示了创建的新用户 testuser。
步骤4:分析执行上下文
确认新用户的创建是否由合法用户执行,或是否有可疑的远程登录记录。
可以使用以下命令查找所有用户登录的情况,以确定是否有可疑的登录行为:
  1. grep "Accepted" /var/log/auth.log.1
复制代码
步骤5:进一步确认
结合其他日志文件,如 /var/log/syslog,查看是否有异常的命令执行或系统变更。
总结
确定相关日志文件。
搜索特定关键字,找到新用户创建的记录。
提取并分析详细信息,确认新用户的合法性
结合其他日志文件,确认是否有异常活动。
那这里我们肯定就是找新建用户,因为题目也已经说明了.黑客登陆主机后新建了一个后门用户;
  1. cat auth.log.1 |grep -a "new user"
复制代码
这里的《-a》是什么意思呢?
简单来说就是在 grep 命令中,-a 选项的作用是将文件视为文本文件处理,即使文件可能包含一些二进制数据。通常,grep 会将二进制文件视为二进制数据而不是文本数据,并可能不会显示预期的结果。使用 -a 选项可以确保 grep 按文本模式处理文件中的内容。
  1. flag{test2}
复制代码
Apache日志分析

什么是apache日志分析?
日志分析是监控和优化网站性能、安全性和用户体验的重要手段。Apache日志分析是其中的一个重要组成部分,因为Apache是目前最流行的Web服务器之一。Apache日志记录了服务器上的各种活动,包括访问请求、错误信息、用户行为等。通过分析这些日志,可以获取有价值的信息,帮助网站管理员做出更好的决策。
Apache日志分析
Apache日志分析是专门针对Apache HTTP服务器生成的日志文件进行分析。Apache服务器主要生成两种类型的日志文件:

  • 访问日志(access log):
​        记录了所有对Web服务器的请求,包括客户端IP地址、请求时间、请求方式、请求资源、响应状态码、数据传输量等。

  • 错误日志(error log):
​        记录了服务器在运行过程中遇到的错误和警告信息,包括启动和停止时的信息。
例题


1.找到访问次数最多的ip


先进入日志所在目录;
  1. cd /var/log/apache2/
复制代码
粗略查看一下;
  1. cat access.log.1
复制代码
发现有很多条记录,用命令筛选
  1. cut -d- -f 1 access.log.1|uniq -c | sort -rn | head -20
复制代码
  1. flag{192.168.200.2}
复制代码
2.使用的浏览器指纹是什么

先知道浏览器指纹是什么?
通俗一点的说,就是浏览器网站上打开进行的所有操作都会留下痕迹,关闭以后仍然存在


题目

命令
  1. cat access.log.1 |grep 192.168.200.2 |more
复制代码

大致就看哪个出现的最多,,实在不行都尝试一下
浏览器指纹部分
  1. Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
复制代码
3.查看index.php页面被访问的次数

如果你回看的话,先问你一个问题!!!
次数的命令用什么::     wc   -l
(统计行数)

)命令:
  1. cat access.log.1 | grep "/index.php" | wc -l
复制代码

两个命令都可以
4.查看黑客IP访问了多少次


已经有经验了
访问次数——access.log
查看黑客ip——grep "ip"
次数  wc -l
命令1
  1. cat access.log.1 | grep “192.168.200.2 - -” | wc -l
复制代码
那这里有人就要问了,ip后面- -是什么意思?
总结:固定格式
在 Apache 访问日志中,格式通常是标准的组合日志格式(Combined Log Format),包含了客户端 IP 地址、客户端身份验证信息、用户 ID、请求时间、请求行、状态码、响应大小、引用来源和用户代理等信息。以下是一个典型的日志条目:
例如;
  1. 192.168.200.2 - - [03/Aug/2023:08:00:00 +0000] "GET /index.php HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
复制代码
在这个日志条目中,192.168.200.2 是客户端 IP 地址,- - 是占位符,表示客户端身份验证信息(客户端身份验证信息为空时用 - 表示)。
命令2
  1. cat access.log.1 | grep “192.168.200.2” | cut -d’ ’ -f1 | sort | uniq -c
复制代码

命令3
  1. grep “192.168.200.2” access.log.1 | cut -d’ ’ -f1 | sort | uniq -c
复制代码


5.查看时间段内有多少IP访问


还是用命令,差不多
首先把日期换成日志里面的格式
eg:2023年8月03日8时——03/Aug/2023:08:
命令1
  1. cat access.log.1 | grep “03/Aug/2023:08:” | awk ‘{print $1}’ | sort -nr| uniq -c |wc -l
复制代码

命令2
  1. cat access.log.1 | grep “03/Aug/2023:08:” | awk ‘{print $1}’ | sort -nr| uniq -c
复制代码

命令3
  1. grep “03/Aug/2023:08:” access.log.1 | awk ‘{print $1}’ | sort -nr | uniq -c | wc -l
复制代码

flag{5}
Mysql日志分析
  1. mysql应急响应 ssh账号 root  密码 xjmysqlssh env.xj.edisec.net  -p xxxxx1.黑客第一次写入的shell flag{关键字符串} 2.黑客反弹shell的ip flag{ip}3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx4.黑客获取的权限 flag{whoami后的值}
复制代码
芝士店:
mysql提权其实很容易就想到udf提权,所以这里可以提前准备好路径:/usr/lib/mysql/plugin/,这个目录下就是一些mysql给用户准备的,放udf文件的目录,将你写好的功能文件进来,就能够像查询语句一样使用你写好的一些功能函数了,这里就是黑客经常用来提权的地方。
注意,Linux下的udf提权文件后缀名一般是.so结尾,而在windows中的话一般是dll结尾文件。
步骤1.黑客第一次写入的shell

flag{关键字符串}
既然hacker要在mysql里写入shell,那么首先他一定是先拿下了网站,并上传了shell,第一次写入的shell,我们可以去web目录下查找
直接用webshell查找命令,来到web目录
  1. find ./ -name "*.php" | xargs grep "@eval("
复制代码

步骤2.黑客反弹shell的ip

flag{ip}
查看定时任务,发现没有
查看日志文件
  1. cd /var/logls
复制代码
查看mysql文件夹的文件,发现了一个error日志


  • MySQL 错误日志(error.log)可能会记录相关的错误信息,比如加载 UDF 库失败的报错,像 Can't open shared library '/path/to/malicious_udf.so'。
  • 若攻击者使用的 SQL 语句(如创建函数、调用函数执行命令)涉及到写操作,会被记录在二进制日志(binary log)中。
  • 若查询日志(general log)开启,那么创建 UDF 函数以及调用函数执行命令的 SQL 语句都会被记录下来,能直观看到攻击者的操作步骤。
    查看error.log文件
  1. cat error.log
复制代码
发现了发生在临时文件/tmp的可疑信息,保存了一个文件1.sh

列出/tmp/1.sh文件的内容

则flag为 flag{192.168.100.13},成功
步骤 3

黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
1.分析题目
提权文件,那么了解一般的提权攻击
关于 Mysql 的提权方法有四种:
<ul>UDF 提权
MOF 提权(Windows 下)
启动项提权(Windows 下)
CVE-2016-6663(MariaDB D:\phpstudy\PHPTutorial\MySQL\lib::$INDEX_ALLOCATION[/code]

Mysql数据库中报错:
  1. select "123" into dumpfile "D:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION";
复制代码

5.2 mysql小于5.1版本时:

5.2.1 有webshell时,通过webshell上传udf文件。

5.2.2 无webshell时,使用dumpfile通过16进制数据流写入udf文件。

6、创建命令执行函数

使用winhex打开udf文件,在最下方可以看到udf文件提供的函数。

sys_eval,执行任意系统命令,并将输出返回。
sys_exec,执行任意系统命令,并将退出码返回(无命令执行结果回显)。
  1. create function sys_eval returns string soname 'udf.dll';
复制代码

7、命令执行
  1. select sys_eval("whoami");
复制代码

六、痕迹清除

1、删除表
  1. drop table udf;
复制代码
2、删除函数
  1. drop function sys_eval;
复制代码
七、其他问题

1、ERROR 1125 (HY000): Function 'sys_eval' already exists

提示sys_eval 函数已经存在,可能已经被利用过了,尝试直接调用函数。

2、提示sys_eval 函数已经存在,但无法利用

尝试将udf提权相关的利用函数进行删除后重新创建
3、创建sys_eval 函数时提示已经存在,但利用与删除时提示 sys_eval

函数不存在(实战无法解决,漏洞复现可以)。**
原因是上一个人利用过后,数据库进行了重启。

之后重启mysqld服务器,再创建就可以了。
4、ERROR 1126 (HY000): Can't open shared library 'udf.dll' (errno: 193 )

在进行udf提权时碰到这个错误一般是ufd文件位数选择错误,尝试另一个位数的udf文件。
八、修复建议

1、mysql配置文件中secure_file_priv项设置为NULL或非 mysql/lib/plugin目录。

2、数据库用户确保正确实施最小权限原则。


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册