# 题目 1

1. 有多少 IP 在爆破主机 ssh 的 root 帐号,如果有多个使用 "," 分割 小到大排序 例如 flag {192.168.200.1,192.168.200.2}

echo "flag{"$(cat /var/log/auth.log* | grep -a "Failed password for root" | cut -d " " -f 12 | uniq | sort | tr '\n' ','| sed 's/,$//' | awk '{print $0 "\n"}')"}"

flag: flag{192.168.200.2,192.168.200.31,192.168.200.32}

思路:

  1. 读取日志
  2. 通过关键字筛选出登录失败的记录
  3. 排序去重
  4. 将末尾换行符转换为 ,
  5. 去除末尾的 ,
  6. 添加一个换行符

# 题目 2

2.ssh 爆破成功登陆的 IP 是多少,如果有多个使用 "," 分割

echo "flag{"$(cat /var/log/auth.log* | grep -a "Accepted" | cut -d " " -f 12 | uniq | grep -v $(echo $SSH_CLIENT | cut -d " " -f 1))"}"

flag: flag{192.168.200.2}

思路:

  1. 关键字 Accepted 筛选出登录成功的记录
  2. 提取 IP 地址
  3. 去重
  4. 去除 SSH 客户端的 IP 地址

# 题目 3

3. 爆破用户名字典是什么?如果有多个使用 "," 分割

root@ip-10-0-10-3:~# echo "flag{"$(cat /var/log/auth.log* | grep -a "Failed password" | grep -v "Jun" | awk '{if ($9 ==
"invalid" && $11 != "from") {print $11} else {print $9}}'| sort | uniq | grep -v invalid | tr '\n' ','| sed 's/,$//')"}"

flag: flag{hello,root,test1,test2,test3,user}

思路:

  1. 关键字 Failed password 提取登录失败的记录
  2. 关键字 Jun 去除当天的记录
  3. 根据特征 invalid 判断输出用户名位置
  4. 分类去重
  5. 去除 invalid 无效用户名(我的逻辑不严谨
  6. 换行符换 , ,去除末尾的 ,

flag 顺序不对,手动调整了发现是 flag{user,hello,root,test3,test2,test1}

注意我的答案里面排除了本次登录的记录,所以 Jun 要换成今天的

# 题目 4

4. 成功登录 root 用户的 ip 一共爆破了多少次

cat /var/log/auth.log* | grep -a "Failed password for root" | grep $(cat /var/log/auth.log* | grep -a "Accepted" | cut -d " " -f 12 | uniq | grep -v $(echo $SSH_CLIENT | cut -d " " -f 1)) | wc -l

flag: flag{4}

思路:

  1. 筛选登录失败的记录
  2. 提取登陆成功记录中的 IP,并使用该 IP 进一步筛选
  3. 提取 IP,去重
  4. 去除本 SSH 客户端 IP
  5. 统计条数

flag: flag{4}

# 题目 5

5. 黑客登陆主机后新建了一个后门用户,用户名是多少

cat /var/log/auth.log* | grep -a "useradd" | grep -a "linux-rz" | grep -o 'name=[^,]*' | cut -d= -f2 | uniq

flag: flag{test2}

思路:

  1. 通过 "useradd" 特征提取用户添加行为
  2. 看到了 linux-rz 用户,其他记录是本地连接,所以把他的记录单独提取出来
  3. 提取用户名并去重