C1imber's Blog

用shell实现自动化扫描主机端口爆破服务弱口令

字数统计: 869阅读时长: 3 min
2018/05/14 Share

用shell实现自动化扫描主机端口爆破服务弱口令

最近在学习linux shell脚本的编写,学会写shell的一个好处就是能够批量执行我们要执行的命令,实现自动化工作,可以在今后的工作中提升工作效率,节省时间

需求

假设现在有一个需求,公司分配给你了一个ip列表,要求你将其中存活的主机筛选出来,检查这些主机是否开启了常用的服务,以及是否存在弱口令

一般常用的做法就是先利用nmap扫描出存活主机,然后扫描这些主机开放的端口,用hydra对这些端口进行弱口令安全检查。如果将这些命令写在一个shell脚本中,以后再次做相同的工作时直接运行我们编写的.sh文件就可以了,这样的话就能大大提高我们的工作效率,避免重复机械的工作,大大提升效率

编写shell脚本

我编写的shell脚本有以下几部分组成

ip.txt

ip列表,里面放着要扫描的ip

service.conf

配置文件,里面是我们要检查的服务和其对应的端口号,使用者可以在这里进行设置要检查的服务

比如要检查ssh与mysql服务的弱口令,里面这样写,配置文件格式:端口:服务

22:ssh
3306:mysql

这样便能灵活的对我们需要的服务进行弱口令检测
mark

user.txt

存放着常见的用户名,用于hydra爆破

passwd.txt

存放着常见的弱口令,用于hydra爆破

brute.sh

下面的就是我编写的shell脚本,可以自动化的完成上述的一系列工作

#!/bin/bash
filename=$1
for port in `awk -F ':' '{print $1}' service.conf`
do
name=`awk -F ':' '/'$port'/{print $2}' service.conf`
echo "$name weak password result:"
nmap -sn -iL $filename|awk '/Nmap scan/{print $5}'>liveip.txt
nmap -Pn -sS -p $port -iL liveip.txt|grep "open" -B "5"|awk '/Nmap scan/{print $5}'>tmpip.txt
if [ ! -s tmpip.txt ]
then
echo "no ip open port $port"
else
result=`hydra -L user.txt -P passwd.txt -M tmpip.txt $name -t 4|awk '/password:/{print $0}'`
echo $result
fi
done

首先接收命令行的第一个参数,也就是要进行检查的ip列表文件ip.txt,之后循环读取服务配置文件,使用awk工具筛选出要检查的端口号和其对应的服务并赋值给对应的变量,之后用nmap进行主机存活扫描,将存活主机使用awk匹配出来输出到一个文件中,使用nmap对这个文件里的这些存活ip进行端口扫描,利用awk将nmap扫描结果中开放端口的ip筛选出来输出到一个文件里,之后利用hydra对这些ip进行其端口对应服务的弱口令检查

脚本运行结果,以自己所在内网的ip作为测试,ip段192.168.3.0/24,可以看出针对ssh服务还是检查出很多弱口令的,mysql服务大多数都禁止了远程连接,所以没有扫出弱口令
mark

这是初步编写的成果,只是与文件进行交互,而且有着很多的不足,之后随着学习的深入,相信会写出比这个更棒更完善的脚本

CATALOG
  1. 1. 用shell实现自动化扫描主机端口爆破服务弱口令
    1. 1.0.1. 需求
    2. 1.0.2. 编写shell脚本