在渗透测试初期,需要进行大量的信息收集。一般情况下,信息收集可以分为两大类————被动信息收集和主动信息收集。
其中,被动信息收集主要是通过各种公开的渠道来获取目标系统的信息,例如:站长工具、Google hack等。这类信息收集的特点是不与目标系统产生直接的交互,从而避免留下痕迹,但带来的缺点就是收集的信息可能是一些过时的信息,不够准确。
相反,主动信息收集是与目标系统进行直接的交互,进而得到更为准确的及时信息。例如:AWVS、Appscan等漏洞扫描工具对目标站点进行的扫描。但不可避免的就是可能会在目标系统中留下痕迹,可能会被封杀。
在利用python来进行信息收集,主要是体现在了主动信息收集方面。
在主动信息收集中,主要内容是主机发现、端口扫描、指纹识别。
在主机发现部分,主动信息收集主要是通过扫描来实现的,其中扫描是可以在不同的网络层次中实现,包括数据链路层主机发现、网络层主机发现和传输层主机发现。
下面先介绍二层主机发现。
主机发现,顾名思义,就是确定一个IP范围内存活的主机,找到潜在攻击的目标。二层主机发现主要利用的协议是ARP协议,主要用于在内网中进行探测,发现与攻击者在同一个网段内的主机。二层的主机发现,一般扫描速度都很快,并且可靠性较高,因为即便是安装了安全软件,安全软件都是默认没有防御ARP攻击的。
在Kali中,我们只要执行arping命令,就可以对外发送ARP响应包来进行主机的探测了,只要我们收到响应,即可判断对方主机在线。
我们要用到的python第一个模块,是subprocess模块,subprocess模块可以用来创建一个子进程,并且运行一个外部的程序。一般使用subprocess模块中的check_output()方法来调用系统命令。
如下:
上面是调用python模块实现的单个语句判断主机是否在线,如果使用python脚本来实现的话,如下所示:
代码如下
import subprocess
import sys
import time
from threading import Thread
def arping(ip):
try:
subprocess.check_output('arping -c 1 ' + str(ip),shell=True)
time.sleep(0,1)
print ip,'在线'
return
except:
return
def main():
host = str(sys.argv[1]).strip()
addr=host.split(".")[0]+"."+host.split(".")[1]+"."+host.split(".")[2]+"."
for i in range(1,255):
ip = addr + str(i)
t=Thread(target=arping,args=(ip,))
t.start()
if __name__=='__main__':
main()