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主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。
系统日志- 记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。系统日志中记录的时间类型由Windows NT/2000操作系统预先定义。默认位置: %SystemRoot%\System32\Winevt\Logs\System.evtx
复制代码 应用程序日志- 包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许会有助于你解决问题。 默认位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx
复制代码 安全日志- 记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。默认设置下,安全性日志是关闭的,管理员可以使用组策略来启动安全性日志,或者在注册表中设置审核策略,以便当安全性日志满后使系统停止响应。默认位置:%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/
基本查询结构- Logparser.exe –i:EVT –o:DATAGRID "SELECT * FROM c:\xx.evtx"
复制代码 使用Log Parser分析日志
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 抽取:- # 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(这是固定的)- SSH登录尝试会记录在 `/var/log/auth.log.1`**auth.log和auth.log.1有什么区别,为什么查看.1?
复制代码
接着那既然是爆破,那肯定会有很多失败的次数。
——使用grep筛选出SSH失败的登录尝试
最后
提取IP地址: 从这些日志条目中提取尝试登录的IP地址。
统计各个IP地址的尝试次数: 统计每个IP地址的尝试次数,找出所有尝试暴力破解的IP。
逻辑基本就是上面这样,如果日志少一些那还好,可以一条条进行分析,日志多的话要进行筛选
命令:- cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more
复制代码
- 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地址,统计每个用户名的失败尝试次数,并按照次数降序排列显示结果。- cat auth.log.1 | grep -a "Failed password" |perl -e 'while($_=){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
复制代码 分析命令:
总结:
4.成功登录 root 用户的 ip爆破次数
- 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。这样可以找到所有新建用户的日志条目。- 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:分析执行上下文
确认新用户的创建是否由合法用户执行,或是否有可疑的远程登录记录。
可以使用以下命令查找所有用户登录的情况,以确定是否有可疑的登录行为:- grep "Accepted" /var/log/auth.log.1
复制代码 步骤5:进一步确认
结合其他日志文件,如 /var/log/syslog,查看是否有异常的命令执行或系统变更。
总结
确定相关日志文件。
搜索特定关键字,找到新用户创建的记录。
提取并分析详细信息,确认新用户的合法性。
结合其他日志文件,确认是否有异常活动。
那这里我们肯定就是找新建用户,因为题目也已经说明了.黑客登陆主机后新建了一个后门用户;- cat auth.log.1 |grep -a "new user"
复制代码 这里的《-a》是什么意思呢?
简单来说就是在 grep 命令中,-a 选项的作用是将文件视为文本文件处理,即使文件可能包含一些二进制数据。通常,grep 会将二进制文件视为二进制数据而不是文本数据,并可能不会显示预期的结果。使用 -a 选项可以确保 grep 按文本模式处理文件中的内容。Apache日志分析
什么是apache日志分析?
日志分析是监控和优化网站性能、安全性和用户体验的重要手段。Apache日志分析是其中的一个重要组成部分,因为Apache是目前最流行的Web服务器之一。Apache日志记录了服务器上的各种活动,包括访问请求、错误信息、用户行为等。通过分析这些日志,可以获取有价值的信息,帮助网站管理员做出更好的决策。
Apache日志分析
Apache日志分析是专门针对Apache HTTP服务器生成的日志文件进行分析。Apache服务器主要生成两种类型的日志文件:
记录了所有对Web服务器的请求,包括客户端IP地址、请求时间、请求方式、请求资源、响应状态码、数据传输量等。
记录了服务器在运行过程中遇到的错误和警告信息,包括启动和停止时的信息。
例题
1.找到访问次数最多的ip
先进入日志所在目录;粗略查看一下;发现有很多条记录,用命令筛选- cut -d- -f 1 access.log.1|uniq -c | sort -rn | head -20
复制代码 2.使用的浏览器指纹是什么
先知道浏览器指纹是什么?
通俗一点的说,就是浏览器在网站上打开进行的所有操作都会留下痕迹,关闭以后仍然存在
题目
命令- cat access.log.1 |grep 192.168.200.2 |more
复制代码
大致就看哪个出现的最多,,实在不行都尝试一下
浏览器指纹部分- 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
(统计行数)
)命令:- cat access.log.1 | grep "/index.php" | wc -l
复制代码
两个命令都可以
4.查看黑客IP访问了多少次
已经有经验了
访问次数——access.log
查看黑客ip——grep "ip"
次数 wc -l
命令1
- cat access.log.1 | grep “192.168.200.2 - -” | wc -l
复制代码 那这里有人就要问了,ip后面- -是什么意思?
总结:固定格式
在 Apache 访问日志中,格式通常是标准的组合日志格式(Combined Log Format),包含了客户端 IP 地址、客户端身份验证信息、用户 ID、请求时间、请求行、状态码、响应大小、引用来源和用户代理等信息。以下是一个典型的日志条目:
例如;- 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
- cat access.log.1 | grep “192.168.200.2” | cut -d’ ’ -f1 | sort | uniq -c
复制代码
命令3
- 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
- cat access.log.1 | grep “03/Aug/2023:08:” | awk ‘{print $1}’ | sort -nr| uniq -c |wc -l
复制代码
命令2
- cat access.log.1 | grep “03/Aug/2023:08:” | awk ‘{print $1}’ | sort -nr| uniq -c
复制代码
命令3
- grep “03/Aug/2023:08:” access.log.1 | awk ‘{print $1}’ | sort -nr | uniq -c | wc -l
复制代码
flag{5}
Mysql日志分析
- 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目录- find ./ -name "*.php" | xargs grep "@eval("
复制代码
步骤2.黑客反弹shell的ip
flag{ip}
查看定时任务,发现没有
查看日志文件查看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文件
发现了发生在临时文件/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数据库中报错:
- 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,执行任意系统命令,并将退出码返回(无命令执行结果回显)。- create function sys_eval returns string soname 'udf.dll';
复制代码
7、命令执行
- select sys_eval("whoami");
复制代码
六、痕迹清除
1、删除表2、删除函数七、其他问题
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、数据库用户确保正确实施最小权限原则。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |