第一章 应急响应-Linux日志分析
1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割
2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
3.爆破用户名字典是什么?如果有多个使用","分割
4.登陆成功的IP共爆破了多少次
5.黑客登陆主机后新建了一个后门用户,用户名是多少
在 Linux 系统下,日志默认存放位置目录为:/var/log/
系统日志配置文件:/etc/rsyslog.conf
相关文件关系如下表:
日志文件 |
文件说明 |
/var/log/cron |
记录了系统定时任务相关的日志。 |
/var/log/cups |
记录打印信息的日志。 |
/var/log/dmesg |
记录了系统在开机时内核自检的信息,也可以使用 dmesg 命令直接查看内核自检信息。 |
/var/log/maillog |
记录邮件信息。 |
/var/log/message |
记录系统重要信息的日志。这个日志文件中会记录 Linux 系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件。 |
/var/log/btmp |
记录错误登录日志,这个文件是二进制文件,不能直接 vim 查看,而要使用 lastb 命令查看。 |
/var/log/lastlog |
记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接 vim ,而要使用 lastlog 命令查看。 |
/var/log/wtmp |
永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接 vim ,而需要使用 last 命令来查看。 |
/var/run/utmp |
记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接 vim ,而要使用 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
1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割
第一题是看有多少IP在爆破,这里我们需要查一下登录日志,可以查/var/log/secure或者auth.log,先进/var/log目录,看一下有auth.log和auth.log.1,查看一下发现auth.log里没有日志,应该是在auth.log.1里。另外,爆破的话在日志里会显示 "Failed password for root" 。所以我们可以搜索 "Failed password for root" ,然后提取出用户名。这里需要用到grep、awk、sort、uniq等命令,这些命令具体用法后面有总结。
第一种方法
cat /var/log/auth.log.1 /var/log/auth.log | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more
第二种方法
grep -a "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
第三种方法
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
grep参数:
-a 不要忽略二进制数据。
-i:在搜索的时候忽略大小写
-n:显示结果所在行号
-c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数
-o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行
-v:输出不带关键字的行(反向查询,反向匹配)
-w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配
-Ax:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行,A:after
-Bx:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行,B:before
-Cx:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,C:context
-e:实现多个选项的匹配,逻辑or关系
-q:静默模式,不输出任何信息,当我们只关心有没有匹配到,却不关心匹配到什么内容时,我们可以使用此命令,然后,使用”echo $?”查看是否匹配到,0表示匹配到,1表示没有匹配到。
-P:表示使用兼容perl的正则引擎。
-E:使用扩展正则表达式,而不是基本正则表达式,在使用”-E”选项时,相当于使用egrep。
awk简介
awk是一种编程语言,用于linux下对文本和数据进行处理。数据可以来来自标准输入、一个或多个文件,或其他命令的输出。
更多作为脚本来使用。
awk处理数据的方式:逐行扫描文件,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定动作,则把匹配的行显示到标准输出(屏幕)。如果没有指定模式,则所有被操作所指定的行都被处理。
2、选项
选项 含义 备注
-f 从脚本文件中读取awk命令。 常用
-F 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F: (–field-separator) 常用
-v 赋值一个用户定义变量。
开始使用 awk,以了解其工作原理。在命令行中输入以下命令:
$ awk '{ print }' /etc/passwd
您将会见到 /etc/passwd 文件的内容出现在眼前。现在,解释 awk 做了些什么。调用 awk 时,我们指定 /etc/passwd 作为输入文件。执行 awk 时,它依次对 /etc/passwd 中的每一行执行 print 命令。所有输出都发送到 stdout,所得到的结果与与执行catting /etc/passwd完全相同。
现在,解释 { print } 代码块。在 awk 中,花括号用于将几块代码组合到一起,这一点类似于 C 语言。在代码块中只有一条 print 命令。在 awk 中,如果只出现 print 命令,那么将打印当前行的全部内容。
这里是另一个 awk 示例,它的作用与上例完全相同:
$ awk '{ print $0 }' /etc/passwd
在 awk 中, $0 变量表示整个当前行,所以 print 和 print $0 的作用完全一样。
如果您愿意,可以创建一个 awk 程序,让它输出与输入数据完全无关的数据。以下是一个示例:
$ awk '{ print "" }' /etc/passwd
只要将 "" 字符串传递给 print 命令,它就会打印空白行。如果测试该脚本,将会发现对于 /etc/passwd 文件中的每一行,awk 都输出一个空白行。再次说明, awk 对输入文件中的每一行都执行这个脚本。以下是另一个示例:
$ awk '{ print "hiya" }' /etc/passwd
运行这个脚本将在您的屏幕上写满 hiya。
二. 多个字段
awk 非常善于处理分成多个逻辑字段的文本,而且让您可以毫不费力地引用 awk 脚本中每个独立的字段。以下脚本将打印出您的系统上所有用户帐户的列表:
$ awk -F":" '{ print $1 }' /etc/passwd
上例中,在调用 awk 时,使用 -F 选项来指定 ":" 作为字段分隔符。awk 处理 print $1 命令时,它会打印出在输入文件中每一行中出现的第一个字段。以下是另一个示例:
$ awk -F":" '{ print $1 $3 }' /etc/passwd
以下是该脚本输出的摘录:
halt7
operator11
root0
shutdown6
sync5
bin1
....etc.
如您所见,awk 打印出 /etc/passwd 文件的第一和第三个字段,它们正好分别是用户名和用户标识字段。现在,当脚本运行时,它并不理想 -- 在两个输出字段之间没有空格!如果习惯于使用 bash 或 python 进行编程,那么您会指望 print $1 $3 命令在两个字段之间插入空格。然而,当两个字符串在 awk 程序中彼此相邻时,awk 会连接它们但不在它们之间添加空格。以下命令会在这两个字段中插入空格:
$ awk -F":" '{ print $1 " " $3 }' /etc/passwd
以这种方式调用 print 时,它将连接 $1 、" " 和 $3 ,创建可读的输出。当然,如果需要的话,我们还可以插入一些文本标签:
$ awk -F":" '{ print "username: " $1 "/t/tuid:" $3" }' /etc/passwd
这将产生以下输出:
username: halt uid:7
username: operator uid:11
username: root uid:0
username: shutdown uid:6
username: sync uid:5
username: bin uid:1
Linux sort 命令用于将文本文件内容加以排序。
sort
可针对文本文件的内容,以行为单位来排序。
语法
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]
参数说明:
·-b 忽略每行前面开始出的空格字符。
·-c 检查文件是否已经按照顺序排序。
·-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
·-f 排序时,将小写字母视为大写字母。
·-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
·-m 将几个排序好的文件进行合并。
·-M 将前面3个字母依照月份的缩写进行排序。
·-n 依照数值的大小排序。
·-u 意味着是唯一的(unique),输出的结果是去完重了的。
·-o<输出文件> 将排序后的结果存入指定的文件。
·-r 以相反的顺序来排序。
·-t<分隔字符> 指定排序时所用的栏位分隔字符。
·+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
·--help 显示帮助。
·--version 显示版本信息。
·[-k field1[,field2]] 按指定的列进行排序。
实例
在使用 sort 命令以默认的式对文件的行进行排序,使用的命令如下:
sort testfile
sort 命令将以默认的方式将文本文件的第一列以 ASCII 码的次序排列,并将结果输出到标准输出。
使用 cat 命令显示 testfile 文件可知其原有的排序如下:
$ cat testfile # testfile文件原有排序
test 30Hello95Linux85
使用 sort 命令重排后的结果如下:
$ sort testfile # 重排结果 Hello95Linux85
test 30
使用-k 参数设置对第二列的值进行重排,结果如下:
$ sort testfile -k 2
test 30Linux85Hello95
uniq命令
使用说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取。
该命令各选项含义如下:
-c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。
-d 只显示重复行。
-u 只显示文件中不重复的各行。
-n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。
+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。
-fn 与- n相同,这里n是字段数。
-sn 与+n相同,这里n是字符数。
2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
这题跟上题一样做法,爆破成功会留下accepted关键字,所以搜索这个就行了。
cat/var/log/auth.log.1 /var/log/auth.log | grep -a "Accepted " | awk '{print $11}' | sort | uniq -c | sort -nr | more
grep -a "Accepted" /var/log/auth.log.2 | awk '{print $11}' | sort | uniq -c | sort -nr | more
3.爆破用户名字典是什么?如果有多个使用","分割
爆破得用户名字典,还是查关键字Failed password,这里注意后面不加root,因为黑客会爆破其他用户。
cat/var/log/auth.log.1 /var/log/auth.log | grep -a "Failed password" | perl -e 'while($_=<>){ /for(.*?) from/; print "$1n";}'| uniq -c | sort -nr
grep -a "Failed password" /var/log/auth.log.2|perl -e 'while($_=<>){ /for(.*?) from/; print "$1n";}'|uniq -c|sort -nr
flag{user,hello,root,test3,test2,test1}
flag{root,user,hello,test3,test2,test1}
4.登陆成功的IP共爆破了多少次
登录成功的IP地址,在前面的语句里加一下,筛选出来192.168.200.2的IP地址就可以。
cat/var/log/auth.log.1 /var/log/auth.log | grep -a "Failed password" | awk '{if($11=="192.168.200.2") print $11}'|sort|uniq -c
5.黑客登陆主机后新建了一个后门用户,用户名是多少
这里可以查看/etc/passwd里面的用户,或者在auth.log里直接搜索是否添加用户,关键字useradd
各位大佬们,我们入驻知识大陆啦!
帮会简介
帮会内容和资源
2、 分析研判
3、 渗透测试
4、 帮会资源百宝箱
5、社群
帮会技术保证
权益升级活动
CTF之misc杂项解题技巧总结(四)——SWF游戏和取证分析
CTF之misc杂项解题技巧总结(七)——流量分析、搜索引擎及
CTF apk 安卓逆向考点、例题及三款移动应用安全分析平台
ctf杂项misc之文件修复,含文件结构修复、高度修复、标识修复
网络安全ctf比赛/学习资源整理,解题工具、思路、靶场、学习路线,推荐收藏!
END
网络安全研究所
更多精彩等着你
原文始发于微信公众号(网络安全实验室):蓝队应急响应-Linux日志分析及常用命令总结
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论