在攻击之前需要进行网络探测以寻找漏洞,而借助成熟的脚本可以大大简化这一工作。
在Linux下,Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。
在shell中使用#进行注释,并且是单行注释,下面还是以经典的hello world 来开始我的脚本生涯:
#!/bin/bash # 上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释 # 器来执行; echo "Hello World!"
脚本一般保存为.sh文件,代表它是一个脚本。
首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。
后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。
除第 一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此行会合并为同一行。
在执行该脚本时,需要将其文件属性修改为可执行的,如若不然,则会有如下提示:
如图,提示permission denied之后我的第一想法是提权,而切换为root之后仍无法执行,才想到可能是文件属性的问题,实际赋予文件执行权限只需要
chmod +x filename.sh
就可以了,使用777是图方便。下面正式编辑用于nmap扫描的脚本:
1 #!/bin/bash 2 mkdir /opt/nmap_diff 3 d=$(date +%Y-%m-%d) 4 y=$(date -d yesterday +%Y-%m-%d) 5 /usr/bin/nmap -T4 -oX /opt/nmap_diff/scan_$d.xml 192.168.233.0/24>/dev/null 2>&1 6 if [ -e /opt/nmap_diff/scan_$y.xml ];then 7 /usr/bin/ndiff /opt/nmap_diff/scan_$y.xml /opt/nmap_diff/scan_$d.xml>/opt/nmap_diff/diff.txt 8 fi
这段代码的功能就是对192.168.233.0/24运行nmap工具,扫描默认端口,然后使用ndiff工具比较结果,在/opt/nmap_diff/目录下会生产相关的记录:
该文件中记录着扫描的结果,当有新端口时,才会生成diff.txt。首先查看一下其中的内容:
首先它记录了运行脚本的具体时间和当天的日期,并扫描了1-65389中的常见端口。
对于具体的主机,记录了其IP地址和Mac地址,并记录了每个开放的端口、协议以及往返时延。
但是,别人的脚本终归是别人的,有些命令的用意尚不明了,下面自己编写一个脚本来实现扫描、输出并保持信息的功能:
#!/bin/bash network="192.168.233.0/24" time=$(date -d today +%Y-%m-%d) echo currently scanning on $network at $time /usr/bin/nmap -sV $network > /root/chapt2/nmap1.txt cd /root/chapt2/ cat nmap1.txt
首先network和time与上述脚本的功能类似,运行脚本时,首先提示当前时间在扫描哪个网段,由于是-sV扫描所以时间可能有点久:
如图是扫描的部分结果。
当前脚本仍十分简陋,脚本的后续改进考虑将网段作为参数,以$1的方式传递给脚本,这样更有可移植性。另外,可以结合diff命令比较每天的扫描结果,这样保持每次运行结果的文件名可以考虑以一个随机种子来生成或者直接累加,将比较后的结果(例如发现打开了新端口)额外提示。