目录
【360】 勒索病毒搜索引擎,支持检索超过800种常见勒索病毒
【腾讯】 勒索病毒搜索引擎,支持检索超过 300 种常见勒索病毒
【启明】VenusEye勒索病毒搜索引擎,超300种勒索病毒家族
举例1:可以利用eventlog事件来查看系统账号登录情况:
举例2:可以利用eventlog事件来查看计算机开关机的记录:(步骤同上)
查看日志配置情况:more /etc/rsyslog.conf
第二种:攻击者在入侵网站后,通常会留下后门维持权限,以方便再次访问,我们可以找到该文件,并以此为线索来展开分析。
11.5 勒索病毒自救指南
11.5.1 前言
- 经常会有一些同学问:中了勒索病毒,该怎么办,可以解密吗?
- 第一次遇到勒索病毒是在早几年的时候,我因网站访问异常,进而师傅协助我进行排查。登录服务器,在站点目录下发现所有的脚本文件及附件后缀名被篡改,每个文件夹下都有一个文件打开后显示勒索提示信息,这便是勒索病毒的特征。
- 出于个人习惯,我打包了部分加密文件样本和勒索病毒提示信息用于留档,就在今天,我又重新上传了样本,至今依然无法解密。
- 作为一个网络安全攻城狮,而非一个专业的病毒分析师,我们可以借助各大安全公司的能力,寻找勒索病毒的解密工具。
- 本文整理了一份勒索病毒自救指南,通过勒索病毒索引引擎查找勒索病毒相关信息,再通过各个安全公司提供的免费勒索软件解密工具解密。当然,能否解密全凭运气,so,平时还是勤打补丁多备份。
11.5.2 勒索病毒搜索引擎
- 在勒索病毒搜索引擎输入病毒名、勒索邮箱、被加密后文件的后缀名,或直接上传被加密文件、勒索提示信息,即可可快速查找到病毒详情和解密工具。
- 这些网站的解密能力还在持续更新中,是值得收藏的几个勒索病毒工具型网站。
【360】 勒索病毒搜索引擎,支持检索超过800种常见勒索病毒
- 官网:安全卫士勒索病毒专题:文件恢复_安全卫士离线救灾版_文档卫士
【腾讯】 勒索病毒搜索引擎,支持检索超过 300 种常见勒索病毒
- 官网:勒索病毒拦截|文件恢复_文档守护者保护文档安全 - 腾讯电脑管家
【启明】VenusEye勒索病毒搜索引擎,超300种勒索病毒家族
- 官网:VenusEye勒索病毒搜索引擎
【奇安信】勒索病毒搜索引擎
- 官网:勒索病毒搜索
【深信服】勒索病毒搜索引擎
- 官网:深信服EDR
11.5.3 勒索软件解密工具集
- 很多安全公司都提供了免费的勒索病毒解密工具下载,收集和整理相关下载地址,可以帮助我们了解和获取最新的勒索病毒解密工具。
【腾讯哈勃】勒索软件专杀工具
- 官网:腾讯哈勃分析系统
【金山毒霸】勒索病毒免疫工具
- 官网:金山毒霸防范勒索病毒
【火绒】安全工具下载
- 官网:火绒安全工具 - 火绒安全软件
【瑞星】解密工具下载
- 官网:瑞星防勒索病毒专题 - 瑞星
【nomoreransom】勒索软件解密工具集
- 官网:主页面 | The No More Ransom Project
【MalwareHunterTeam】勒索软件解密工具集
- 官网:ID Ransomware
【卡巴斯基】免费勒索解密器
- 官网:No Ransom: Free ransomware file decryption tools by Kaspersky
【Avast】免费勒索软件解密工具
- 官网:免费勒索软件解密工具 | 解锁您的文件 | Avast
【Emsisoft】免费勒索软件解密工具
- 官网:Emsisoft: Free Ransomware Decryption Tools
【GitHub 项目】勒索病毒解密工具收集汇总
- 官网:https://github.com/jiansiting/Decryption-Tools
日志分析篇
11.6 Windows日志分析
11.6.1 Windows事件日志简介
- Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。
- Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。
系统日志
记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。系统日志中记录的时间类型由Windows NT/2000操作系统预先定义。 默认位置: %SystemRoot%\System32\Winevt\Logs\System.evtx
应用程序日志
包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许会有助于你解决问题。 默认位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx
安全日志
记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。默认设置下,安全性日志是关闭的,管理员可以使用组策略来启动安全性日志,或者在注册表中设置审核策略,以便当安全性日志满后使系统停止响应。 默认位置:%SystemRoot%\System32\Winevt\Logs\Security.evtx
- 系统和应用程序日志存储着故障排除信息,对于系统管理员更为有用。 安全日志记录着事件审计信息,包括用户验证(登录、远程访问等)和特定用户在认证后对系统做了什么,对于调查人员而言,更有帮助。
11.6.2 审核策略与事件查看器
- Windows Server 2008 R2 系统的审核功能在默认状态下并没有启用 ,建议开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等。
- PS:默认状态下,也会记录一些简单的日志,日志默认大小20M
- 设置1:开始 → 管理工具 → 本地安全策略 → 本地策略 → 审核策略,参考配置操作:
- 设置2:设置合理的日志属性,即日志最大大小、事件覆盖阀值等:
查看系统日志方法:
在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”
按 "Window+R",输入 ”eventvwr.msc“ 也可以直接进入“事件查看器”
11.6.3 事件日志分析
- 对于Windows事件日志分析,不同的EVENT ID代表了不同的意义,摘录一些常见的安全事件的说明:
- 事件ID
- 说明
- 4624
- 登录成功
- 4625
- 登录失败
- 4634
- 注销成功
- 4647
- 用户启动的注销
- 4672
- 使用超级用户(如管理员)进行登录
- 4720
- 创建用户
- 每个成功登录的事件都会标记一个登录类型,不同登录类型代表不同的方式:
- 登录类型
- 描述
- 说明
- 2
- 交互式登录(Interactive)
- 用户在本地进行登录。
- 3
- 网络(Network)
- 最常见的情况就是连接到共享文件夹或共享打印机时。
- 4
- 批处理(Batch)
- 通常表明某计划任务启动。
- 5
- 服务(Service)
- 每种服务都被配置在某个特定的用户账号下运行。
- 6
- 解锁(Unlock)
- 屏保解锁。
- 7
- 网络明文(NetworkCleartext)
- 登录的密码在网络上是通过明文传输的,如FTP。
- 8
- 网络明文(NetworkCleartext)
- 使用带/Netonly参数的RUNAS命令运行一个程序。
- 9
- 远程交互,(RemoteInteractive)
- 通过终端服务、远程桌面或远程协助访问计算机。
- 10
- 缓存交互(CachedInteractive
- 通过终端服务、远程桌面或远程协助访问计算机。
- 关于更多EVENT ID,详见微软官方网站上找到了“Windows 7 和 Windows Server 2008 中的安全事件的说明”。
举例1:可以利用eventlog事件来查看系统账号登录情况:
在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”;
在事件查看器中,单击“安全”,查看安全日志;
在安全日志右侧操作中,点击“筛选当前日志”,输入事件ID进行筛选。
4624 --登录成功 4625 --登录失败 4634 -- 注销成功 4647 -- 用户启动的注销 4672 -- 使用超级用户(如管理员)进行登录
- 我们输入事件ID:4625进行日志筛选,发现事件ID:4625,事件数175904,即用户登录失败了175904次,那么这台服务器管理员账号可能遭遇了暴力猜解。
举例2:可以利用eventlog事件来查看计算机开关机的记录:(步骤同上)
- 1、在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”;
- 2、在事件查看器中,单击“系统”,查看系统日志;
- 3、在系统日志右侧操作中,点击“筛选当前日志”,输入事件ID进行筛选。
- 其中事件ID 6006 ID6005、 ID 6009就表示不同状态的机器的情况(开关机)。 6005 信息 EventLog 事件日志服务已启动。(开机) 6006 信息 EventLog 事件日志服务已停止。(关机) 6009 信息 EventLog 按ctrl、alt、delete键(非正常)关机
- 我们输入事件ID:6005-6006进行日志筛选,发现了两条在2024/8/24:10:51左右的记录,也就是我刚才对系统进行重启的时间。
11.6.4 日志分析工具
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 使用示例:Log Parser Rocks! More than 50 Examples! | LichtenBytes
基本查询结构
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<'2018-06-20 23:34:00' and EventID=4624" 提取登录成功的用户名和IP: LogParser.exe -i:EVT –o:DATAGRID "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as Username,EXTRACT_TOKEN(Message,38,' ') as Loginip FROM c:\Security.evtx where EventID=4624"
2、查询登录失败的事件
登录失败的所有事件: LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where EventID=4625" 提取登录失败用户名进行聚合统计: LogParser.exe -i:EVT "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,EXTRACT_TOKEN(Message,19,' ') as user,count(EXTRACT_TOKEN(Message,19,' ')) as Times,EXTRACT_TOKEN(Message,39,' ') as Loginip FROM c:\Security.evtx where EventID=4625 GROUP BY Message"
3、系统历史开关机记录:
LogParser.exe -i:EVT –o:DATAGRID "SELECT TimeGenerated,EventID,Message FROM c:\System.evtx where EventID=6005 or EventID=6006"
LogParser Lizard
- 对于GUI环境的Log Parser Lizard,其特点是比较易于使用,甚至不需要记忆繁琐的命令,只需要做好设置,写好基本的SQL语句,就可以直观的得到结果。
- 下载地址:Log Parser Lizard: Advanced SQL Analysis for Log Files
- 依赖包:Microsoft .NET Framework 4 .5
- 下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=42642
Event Log Explorer
- Event Log Explorer是一款非常好用的Windows日志分析工具。可用于查看,监视和分析跟事件记录,包括安全,系统,应用程序和其他微软Windows 的记录被记载的事件,其强大的过滤功能可以快速的过滤出有价值的信息。
- 下载地址:Event Log Explorer - Download
- 参考链接:
- Windows日志分析 第三十一期 取证实战篇-Windows日志分析
11.7 Linux日志分析
11.7.1 前言
- Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。 本文简介一下Linux系统日志及日志分析技巧。
11.8.1 日志简介
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
- 日志文件
- 说明
- /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
- 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
比较重要的几个日志:
- 登录失败记录:
/var/log/btmp //lastb
- 最后一次登录:
/var/log/lastlog //lastlog
- 登录成功记录:
/var/log/wtmp //last
- 登录日志记录:
/var/log/secure
- 目前登录用户信息:
/var/run/utmp //w、who、users
- 历史命令记录:history
- 仅清理当前用户:
history -c
11.9.1日志分析技巧
A、常用的shell命令
- Linux下常用的shell命令如:find、grep 、egrep、awk、sed
- 小技巧:
1、grep显示前后几行信息:
标准unix/linux下的grep通过下面參数控制上下文: grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行 grep -B 5 foo file 显示foo及前5行 grep -A 5 foo file 显示foo及后5行 查看grep版本号的方法是 grep -V
2、grep 查找含有某字符串的所有文件
grep -rn "hello,world!" * : 表示当前目录所有文件,也可以是某个文件名 -r 是递归查找 -n 是显示行号 -R 查找所有文件包含子目录 -i 忽略大小写
3、如何显示一个文件的某几行:
cat input_file | tail -n +1000 | head -n 2000 #从第1000行开始,显示2000行。即显示1000~2999行
4、在目录/etc中查找文件init
find /etc -name init
5、只是显示/etc/passwd的账户
`cat /etc/passwd |awk -F ':' '{print $1}'` //awk -F指定域分隔符为':',将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。
6.删除历史操作记录,只保留前153行
sed -i '153,$d' .bash_history
B、日志分析技巧
1、/var/log/secure
1、定位有多少IP在爆破主机的root帐号: grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more 定位有哪些IP在爆破: grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c 爆破用户名字典是什么? grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr 2、登录成功的IP有哪些: grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more 登录成功的日期、用户名、IP: grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' 3、增加一个用户kali日志: Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001 Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali , shell=/bin/bash Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali #grep "useradd" /var/log/secure 4、删除用户kali日志: Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali' Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali' Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali' # grep "userdel" /var/log/secure 5、su切换用户: Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0) sudo授权执行: sudo -l Jul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now
2、/var/log/yum.log
- 软件安装升级卸载日志:
yum install gcc [root@bogon ~]# more /var/log/yum.log Jul 10 00:18:23 Updated: cpp-4.8.5-28.el7_5.1.x86_64 Jul 10 00:18:24 Updated: libgcc-4.8.5-28.el7_5.1.x86_64 Jul 10 00:18:24 Updated: libgomp-4.8.5-28.el7_5.1.x86_64 Jul 10 00:18:28 Updated: gcc-4.8.5-28.el7_5.1.x86_64 Jul 10 00:18:28 Updated: libgcc-4.8.5-28.el7_5.1.i686
11.8 Web日志分析
11.8.1 Web日志
- Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还原攻击路径,找到网站存在的安全漏洞并进行修复。
- 我们来看一条Apache的访问日志:
`127.0.0.1 - - [11/Jun/2018:12:47:22 +0800] "GET /login.html HTTP/1.1" 200 786 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"`
- 通过这条Web访问日志,我们可以清楚的得知用户在什么IP、什么时间、用什么操作系统、什么浏览器的情况下访问了你网站的哪个页面,是否访问成功。
- 本文通过介绍Web日志安全分析时的思路和常用的一些技巧。
11.8.2 日志分析技巧
- 在对WEB日志进行安全分析时,一般可以按照两种思路展开,逐步深入,还原整个攻击过程。
第一种:确定入侵的时间范围
- 以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程。
第二种:攻击者在入侵网站后,通常会留下后门维持权限,以方便再次访问,我们可以找到该文件,并以此为线索来展开分析。
常用分析工具:
- Window下,推荐用 EmEditor 进行日志分析,支持大文本,搜索效率还不错。
- Linux下,使用Shell命令组合查询分析。
- Shell+Linux命令实现日志分析,一般结合grep、awk等命令等实现了几个常用的日志分析统计技巧。
- Apache日志分析技巧:
1、列出当天访问次数最多的IP命令: cut -d- -f 1 log_file|uniq -c | sort -rn | head -20 2、查看当天有多少个IP访问: awk '{print $1}' log_file|sort|uniq|wc -l 3、查看某一个页面被访问的次数: grep "/index.php" log_file | wc -l 4、查看每一个IP访问了多少个页面: awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file 5、将每个IP访问的页面数进行从小到大排序: awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n 6、查看某一个IP访问了哪些页面: grep ^111.111.111.111 log_file| awk '{print $1,$7}' 7、去掉搜索引擎统计当天的页面: awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l 8、查看2018年6月21日14时这一个小时内有多少IP访问: awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc -l
11.8.3 日志分析举例
- Web日志分析实例:通过nginx代理转发到内网某服务器,内网服务器某站点目录下被上传了多个图片木马,虽然II7下不能解析,但还是想找出谁通过什么路径上传的。
- 在这里,我们遇到了一个问题:由于设置了代理转发,只记录了代理服务器的ip,并没有记录访问者IP?这时候,如何去识别不同的访问者和攻击源呢?
- 这是管理员日志配置不当的问题,但好在我们可以通过浏览器指纹来定位不同的访问来源,还原攻击路径。
1、定位攻击源
- 首先访问图片木马的记录,只找到了一条,由于所有访问日志只记录了代理IP,并不能通过IP来还原攻击路径,这时候,可以利用浏览器指纹来定位。
- 浏览器指纹:
`Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1;+WOW64;+Trident/7.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+.NET4.0C;+.NET4.0E)`
2、搜索相关日志记录
- 通过筛选与该浏览器指纹有关的日志记录,可以清晰地看到攻击者的攻击路径。
3、对找到的访问日志进行解读
- 攻击者大致的访问路径如下:
A、攻击者访问首页和登录页 B、攻击者访问MsgSjlb.aspx和MsgSebd.aspx C、攻击者访问Xzuser.aspx D、攻击者多次POST(怀疑通过这个页面上传模块缺陷) E、攻击者访问了图片木马 //打开网站,访问Xzuser.aspx,确认攻击者通过该页面的进行文件上传了图片木马, 同时,发现网站了存在越权访问漏洞,攻击者访问特定URL,无需登录即可进入后台界面。 通过日志分析找到网站的漏洞位置并进行修复。
11.8.4 日志统计分析技巧
统计爬虫:
grep -E 'Googlebot|Baiduspider' /www/logs/access.2019-02-23.log | awk '{ print $1 }' | sort | uniq # 从日志文件中提取包含 "Googlebot" 或 "Baiduspider" 的行 grep -E 'Googlebot|Baiduspider' /www/logs/access.2019-02-23.log | # 从这些行中提取第一个字段 (通常是 IP 地址) awk '{ print $1 }' | # 对提取出的 IP 地址进行排序 sort | # 去除重复的 IP 地址,保留唯一的 IP uniq
统计浏览器:
cat /www/logs/access.2019-02-23.log | grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | sort | uniq -c | sort -r -n | head -n 100 # 显示日志文件内容,并传递给管道的下一个命令 cat /www/logs/access.2019-02-23.log | # 排除包含指定浏览器标识的行 grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | # 对排除后的记录进行排序 sort | # 对排序后的记录进行去重,并统计每个唯一记录的出现次数 uniq -c | # 根据出现次数对结果进行降序排序 sort -r -n | # 输出出现次数最多的前100条记录 head -n 100
IP 统计:
grep '23/May/2019' /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r -n | head -n 10 2206 219.136.134.13 1497 182.34.15.248 1431 211.140.143.100 1431 119.145.149.106 1427 61.183.15.179 1427 218.6.8.189 1422 124.232.150.171 1421 106.187.47.224 1420 61.160.220.252 1418 114.80.201.18 # 从日志文件中提取包含特定日期 (23/May/2019) 的所有行 grep '23/May/2019' /www/logs/access.2019-02-23.log | # 从这些行中提取第一个字段 (假设为 IP 地址) awk '{print $1}' | # 将 IP 地址转换为网络前缀格式 (例如,192.168.1.1 转换为 192.168.1.0) awk -F'.' '{print $1"."$2"."$3"."$4}' | # 对网络前缀格式的 IP 地址进行排序 sort | # 统计每个网络前缀的出现次数,并显示这些次数 uniq -c | # 按出现次数的降序对统计结果进行排序 sort -r -n | # 提取出现次数最多的前 10 个网络前缀及其出现次数 head -n 10
统计网段:
cat /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3".0"}' | sort | uniq -c | sort -r -n | head -n 200 # 显示日志文件的内容 cat /www/logs/access.2019-02-23.log | # 提取每一行的第一个字段 (假设为 IP 地址) awk '{print $1}' | # 将 IP 地址转换为网络前缀格式 (例如,192.168.1.5 转换为 192.168.1.0) awk -F'.' '{print $1"."$2"."$3".0"}' | # 对网络前缀格式的 IP 地址进行排序 sort | # 统计每个网络前缀的出现次数,并显示这些次数 uniq -c | # 按出现次数的降序对统计结果进行排序 sort -r -n | # 提取出现次数最多的前 200 个网络前缀及其出现次数 head -n 200
统计域名:
cat /www/logs/access.2019-02-23.log |awk '{print $2}'|sort|uniq -c|sort -rn|more # 显示日志文件内容,并传递给管道的下一个命令 cat /www/logs/access.2019-02-23.log | # 排除包含指定浏览器标识的行 grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | # 对排除后的记录进行排序 sort | # 对排序后的记录进行去重,并统计每个唯一记录的出现次数 uniq -c | # 根据出现次数对结果进行降序排序 sort -r -n | # 输出出现次数最多的前100条记录 head -n 100
HTTP Status:
cat /www/logs/access.2019-02-23.log |awk '{print $9}'|sort|uniq -c|sort -rn|more 5056585 304 1125579 200 7602 400 5 301 # 显示日志文件的内容 cat /www/logs/access.2019-02-23.log | # 提取每一行的第九个字段 (通常是 HTTP 响应状态码) awk '{print $9}' | # 对提取出的状态码进行排序 sort | # 统计每个唯一状态码的出现次数,并显示这些次数 uniq -c | # 按出现次数的降序对统计结果进行排序 sort -rn | # 分页显示排序后的结果,便于查看 more
URL 统计:
cat /www/logs/access.2019-02-23.log |awk '{print $7}'|sort|uniq -c|sort -rn|more #同统计网段
文件流量统计:
cat /www/logs/access.2019-02-23.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|more grep ' 200 ' /www/logs/access.2019-02-23.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|more #第一部分 # 显示日志文件的内容 cat /www/logs/access.2019-02-23.log | # 使用 awk 计算每个 URL 路径的总响应字节数,并打印结果 awk '{sum[$7]+=$10} END {for(i in sum) {print sum[i], i}}' | # 对计算结果按总响应字节数降序排序 sort -rn | # 分页显示排序后的结果,便于查看 more #第二部分 # 从日志文件中过滤出状态码为 200 的行 grep ' 200 ' /www/logs/access.2019-02-23.log | # 使用 awk 计算每个 URL 路径的总响应字节数,并打印结果 awk '{sum[$7]+=$10} END {for(i in sum) {print sum[i], i}}' | # 对计算结果按总响应字节数降序排序 sort -rn | # 分页显示排序后的结果,便于查看 more
URL访问量统计
:cat /www/logs/access.2019-02-23.log | awk '{print $7}' | egrep '\?|&' | sort | uniq -c | sort -rn | more # 显示日志文件的内容并提取 URL 路径 cat /www/logs/access.2019-02-23.log | # 使用 awk 打印 URL 路径 awk '{print $7}' | # 使用 egrep 过滤出包含问号或与号的 URL 路径 egrep '\?|&' | # 对过滤后的 URL 路径进行排序 sort | # 统计每个 URL 路径的出现次数,并去重 uniq -c | # 对统计结果按出现次数降序排序 sort -rn | # 分页显示排序后的结果,以便逐页查看 more
脚本运行速度:查出运行速度最慢的脚本
grep -v 0$ /www/logs/access.2019-02-23.log | awk -F '\" ' '{print $4" " $1}' web.log | awk '{print $1" "$8}' | sort -n -k 1 -r | uniq > /tmp/slow_url.txt # 从日志文件中排除结尾为0的行,并将结果传递给下一条命令 grep -v 0$ /www/logs/access.2019-02-23.log | # 使用 awk 以双引号后的空格作为分隔符,提取第四列和第一列,格式化为"第四列 第一列",并将结果输出到 web.log 文件 awk -F '\" ' '{print $4" " $1}' web.log | # 使用 awk 从每行中提取第一列和第八列,格式化为"第一列 第八列" awk '{print $1" "$8}' | # 对提取后的数据按第一列(数字)进行降序排序 sort -n -k 1 -r | # 对排序后的结果进行去重 uniq > # 将最终的结果输出到临时文件 /tmp/slow_url.txt / tmp/slow_url.txt
IP, URL 抽取
tail -f /www/logs/access.2019-02-23.log | grep '/test.html' | awk '{print $1" "$7}' # 实时监控日志文件的新增内容 tail -f /www/logs/access.2019-02-23.log | # 过滤出包含 '/test.html' 的行 grep '/test.html' | # 使用 awk 提取每行的 IP 地址和 URL 路径 awk '{print $1" "$7}'