教材内容学习 网络信息收集
网络信息收集的方法
- 网络踩点(footprinting)
- Web搜索与挖掘。充分利用Web搜索的强大能力,如我们常说的google hacking。
- DNS和IP查询。通过公开的互联网基础信息服务,找出目标组织域名、IP以及地理位置之间的映射关系,以及详细的注册信息(whois查询),同时可利用DNS服务获取到组织内部系统情况。
- 网络拓扑侦查。确定目标网络的拓扑结构和可能存在的网络访问路径(通过traceroute、tracert等工具)。
- 网络扫描(scanning)
- 主机扫描。也称ping扫描,通过对目标网络IP地址范围进行自动化扫描,确定这个网络中存在的活跃设备和系统。可以利用ICMP、TCP、UDP等协议,以及nmap、fping、superscan、pingsweep等工具。
- 端口扫描。探测活跃主机上开放了哪些TCP/UDP端口。TCP端口扫描包括Connect扫描、SYN扫描两种基本类型,以及FIN扫描、ACK扫描、Null扫描、Xmas扫描、TCP窗口扫描、FTP弹射扫描等高级扫描技术;UDP端口扫描只有一种方式。
- 系统类型检查。探查活跃主机的系统及开放服务的类型,包括操作系统主动探测、操作系统被动辨识、网络服务主动探测与网络服务被动辨识。
- 漏洞扫描。探测发现目标网络中特定操作系统、网络服务与应用程序中存在的安全漏洞。安全漏洞是指硬件、软件或策略上存在的安全缺陷,从而使得攻击者能在未授权的情况下访问、控制系统。可以借助Nessus等漏洞扫描器。
- 网络查点(enumeration)
- 旗标抓取。最基本的查点技术,指利用客户端工具连接至远程网络服务并观察输出以收集信息的关键技术,一般仅限于对采用明文传输协议的网络服务。
- 网络服务查点。利用互联网上一些通用的网络应用服务协议,如web服务、FTP文件传输服务、POP3及SMTP电子邮件首发服务。最经典的网络查点技之一是利用SMTP电子邮件协议发送两条特殊的指令:VRFY和EXPN,可以可用来查看其他用户的个人资料。nmap中也实现了RPC查点的功能。
防范方法
- Web搜索与挖掘:组织安全敏感信息及个人隐私信息不要在网上发布,个人上网时尽量保持匿名,需要提供个人信息时选择良好声誉的网站,掌握google hacking技巧,对发现泄漏的个人信息及时修改或清除。
- DNS和IP查询:主要在于公共数据库中提供信息的安全问题,要求注册机构提高安全防护。个人来说,更新管理性事务联系人的信息,尤其是他离职的时候;在不违反规定的前提下尝试使用虚构的人名作为管理性事务联系人;慎重考虑提交的电话号码和地址等信息;注意域名注册机构允许更新注册信息的方式。
- 网络拓扑侦查:部署网络入侵监测系统或入侵防御系统,使用RotoRouter等软件;将网络边界路由配置成只允许特定类型的系统响应ICMP和UDP数据包。
- 主机扫描:使用诸如Snort之类的网络入侵监测系统,在网关等位置对网络中的主机扫描活动进行探测;在主机上安装可以监测扫描的软件,如OSSEC,各种商业化桌面防火墙工具。
- 端口扫描:立足于预防,禁用不必要的服务尽可能的缩小网络的攻击暴露面。可以利用网络入侵检测系统,有很多专用软件可以帮助做这种事。
- 系统类型检查:没有太好的方法,使用端口扫描监测工具可以监测系统类型主动探测行为,还是依赖可靠地防火墙比较合理。
- 漏洞扫描:最好的防范措施,就是系统管理员要赶在攻击者对网络实施漏洞扫描之前先行发现安全漏洞与不安全配置;保证所安装的操作系统和应用软件来源的安全性。
- 网络查点:把不必要的网络服务全部关掉、加强网络服务的安全配置、放弃使用不安全的网络协议、采用一些工具改变网络服务旗标。
实践内容
自己在互联网上的足迹
我在互联网上对个人信息一向是特别小心的,从来没有公开发过任何有关个人的姓名、照片、邮箱等信息,但使用博客园以来泄露了大量的个人信息,包括本课程中的学号、注册时使用的学号+姓名、另一门课程中更是要求在博客中写明姓名、学号、课程信息,虽然这些不是很关键的信息,但依然可能成为不怀好意之人的一种途径。
其实想想在如今各种生活服务都依赖个人信息的情况下,想在互联网中隐藏自己的信息已经越发困难,甚至某种程度上已经不可能了——各种购物软件、注册网站都有详尽的个人信息。但是保护个人关键信息依然十分有必要,照片、住址、邮箱、电话等个人关键信息还是尽量减少暴露面比较合理。
Nessus扫描特定靶机
nmap扫描在课上已经做过,在本文后面也有描述,这里尝试用Nessus扫描。
首先去官网下载Nessus安装包,我安装的kali已经是kali3了,但是Nessus官网能找到的最新版本还是kali1的···
不过还是顺利安装。
注册激活后需要等待初始化:
成功进入界面:
可以创建各种扫描:
选择advanced scan,扫描实验室网段:
扫描过程中或者完成后还可以点击漏洞查看详情。
不愧是传说中最流行的漏洞扫描工具,简单又好用。
视频内容学习
openVAS 安装
我安装的虚拟机是kali官网下载的最新版64位系统(2019.1a),实际安装和配置 过程和视频中还是有很大出入的。具体步骤不多说,只说经验:
- 不要用清华大学的源。在安装openVAS时会出现软件包依赖的问题,而且通过
apt-get -f
选项修复也没有起到作用,换用阿里云的源后没有出现任何问题。 - 配置时无需使用
openvas-check-up
,并按照提示一步步安装,只需openvas-setup
即可。 - 后面的配置网上各个教程基本都没问题,除用户名密码外记得修改监听地址范围。
openVAS登录界面地址:
openVAS操作界面:
kali主机探测
netstat监听状态:
netenum生成ip地址列表:
测试主机是否在线:
fping测试主机是否在线:
nbtscan扫描指定ip段(借助netbios服务):
arping获取MAC地址(借助arp协议):
ping借助icmp协议
netdiscover扫描内网信息:
使用ARP协议
使用dmitry获取目标详细信息:
对waf进行探测:
提交一定在黑名单的请求,看返回的结果和正常有何区别。
lbd 负载平衡检测:
帮助发现多个ip地址映射同一个域名
nmap主机扫描
Nmap是主机扫描工具,他的图形化界面是Zenmap,分布式框架为Dnamp。
Nmap可以完成以下任务:
- 主机探测
- 端口扫描
- 版本检测
- 系统检测
- 支持探测脚本的编写
Nmap在实际中应用场合如下:
- 通过对设备或者防火墙的探测来审计它的安全性
- 探测目标主机所开放的端口
- 通过识别新的服务器审计网络的安全性
- 探测网络上的主机
实例
分别是对windows、linux靶机和seed机进行nmap扫描的截图,以及还有man帮助文档中对UDP扫描的说明。
指纹识别
banner抓取
应用程序指纹识别而不是操作系统指纹识别
xprobe2指纹识别
新系统识别准确率不佳
被动指纹识别p0f
很好用的被动指纹识别工具,针对每个数据包都会分析指纹信息
web指纹识别whatweb
通过whatweb工具扫描web指纹信息
webscan扫描信息:
wpscan工具获取信息
sslscan:
协议分析
SMB分析
SMB可直接运行在TCP(端口445)或NetBIOS(通常是端口139,很少用到端口137或138)上。要开始一个SMB会话,两个参与者得就一个方言达成一致;进行认证;并且发起者连接到一个“树”。从大多数的意图和目的上讲,此树可以被认为是一个网络共享(网络共享是网络上的某种共享资源,可通过网络访问的驱动器或文件夹)。
SMTP分析
SMTP通常有两种工作模式。发送SMTP和接收SMTP。具体工作方式为:发送SMTP在接收到用户的邮件请求后,判断此邮件是否为本地邮件,若是则直接投送到用户的邮箱,否则向DNS查询远端邮件服务器的MX记录,并建立与远端接收SMTP之间的一个双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方向传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此反复多次。当接收者收到全部邮件后会接收到特别的序列,表示接收者成功处理了邮件,返回OK应答。
详见SMTP抓包分析
SNMP分析
SNMP是基于TCP/IP协议族的网络管理标准,是一种在IP网络中管理网络节点(如服务器、工作站、路由器、交换机等)的标准协议。SNMP能够使网络管理员提高网络管理效能,及时发现并解决网络问题以及规划网络的增长。除此之外,网络管理员还可以通过SNMP接收网络节点的通知消息以及告警事件报告等来获知网络出现的问题。
详见 【漏洞分析】StringBleed攻击:浅析SNMP协议远程代码执行漏洞
SSL协议分析
SSL/TLS是保护计算机网络通讯安全的一类加密协议,它们在传输层上给原先非安全的应用层协议提供加密保护,如非安全的HTTP协议即可被SSL/TLS保护形成安全的HTTPS协议。
SSL、TLS协议其实是有所差异的,TLS协议是继承了SSL协议并写入RFC,标准化后的产物。因此,通常使用SSL来指代SSL协议和TLS协议。
voIP vpn分析
VoIP(Voice over Internet Protocol)简而言之就是将模拟信号(Voice)数字化,以数据封包(Data Packet)的形式在IP网络(IP Network)上做实时传递。
虚拟私人网络(英语:Virtual Private Network,缩写为VPN)是一种常用于连接中、大型企业或团体与团体间的私人网络的通讯方法。它利用隧道协议(Tunneling Protocol)来达到保密、发送端认证、消息准确性等私人消息安全效果,这种技术可以用不安全的网络(例如:互联网)来发送可靠、安全的消息。需要注意的是,加密消息与否是可以控制的,如果是没有加密的虚拟专用网消息依然有被窃取的危险。
详见VOIP Hacking:攻击者是如何篡改VOIP电话的?
wireshark数据包分析工具
wireshark是一个非常常用的工具,除了掌握如何使用它抓到包以外,学会分析抓到的包也十分重要。
桥接和NAT
在课上使用nmap扫描的过程中,发现如果将kali的网络设置为NAT模式,扫描速度会非常慢,改为桥接模式则会好很多。这里整理一下VMware中桥接模式和NAT模式的区别。
在桥接模式下,VMware虚拟出来的操作系统就像是局域网中的一独立的主机,它可以访问网内任何一台机器不过你需要多于一个的IP地址,并且需要手工为 虚拟系统配置IP地址子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。
如果你想利用VMware在局域网内新建一个虚拟服务器,为局域网用户提供网络服务,就应该选择桥接模式。使用NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网也就是说,使用NAT模式可以实现在虚拟系统里访问互 联网NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,无法进行手工修改,因此虚拟系统也就无法 和本局域网中的其他真实主机进行通讯采用NAT模式最大的优势是虚拟系统接入互联网非常简单,你不需要进行任何其他的配置,只需要宿主机器能访问互联网即可。
如果你想利用VMware安装一个新的虚拟系统,在虚拟系统中不用进行任何手工配置就能直接访问互联网,建议你采用NAT模式。
那为什么采用NAT模式时扫描会进行的特别慢呢?初步推测是每次数据包发送都要经过网络地址转换拖慢了扫描速度。
Black Hat Python3
kali 安装新版本python
kali中自带的pyhton是2.7版本,显然2019年了,python2.x的版本已经逐渐过时,好多第三方库都逐步宣布不再支持python2.x版本,学习python3是比较明智的选择。
步骤也简单,下载、解压缩、进入目录、配置、编译、安装。注意在进行配置./configure
时按照给出的提示信息执行命令。我在make时遇到过错误可能就是没有执行高级configure选项造成的。
具体参考:Linux安装最新版本Python3
kali 安装配置pycharm
linux下好用的IDE并不多,免费的更少,幸亏广受好评的Pycharm可用,传说中的JetBrains大法好···。
pycharm好在哪里呢?就我个人体验而言,首先是极方便的环境管理,安装管理包可谓是傻瓜式;其次是堪称严苛的错误提示或者警告,甚至包含了对代码风格的检查,比如定义函数前一定要空两行,注释符后一定要有空格等,让新手也能写出风格良好的代码;最后则是堪称智能的拼写补齐,在候选列表中会自动把常用的提示提到前面。
安装过程属实简单,官网下载community版,解压后进入bin目录下运行pycharm.sh即可。
pycharm的配置和使用还是有点麻烦,毕竟每种IDE都有不低的学习成本,在学习Pycharm中付出的成本绝对让你觉得物有所值。打开pycharm后选择解释器环境,之前安装好的python3.7可以自动识别到。其次就是掌握运行和在python console中运行的技巧,关于这些网上有大量教程,这里就不再多说了。
kali 安装git并连接github
kali已经自带了git,只需建立和github的链接即可,步骤如下:
- 安装并启动ssh服务。
- ssh-keygen -t rsa -C "woider@gmail.com" 生成对应邮箱的ssh-key。注意这一步很关键,简单点的话连按三次回车即可,也可自己输入文件目录文件名自行配置。生成的xxx.pub即为ssh公钥。
- 将公钥复制到Github中的ssh-key处。
- git clone 仓库到本地。(这个克隆到本地的仓库和github中的仓库是自动关联的)
- git add filename 到缓冲区
- git commit -m "message"为上传文件添加说明信息。
- git push origin master将文件push到github仓库。
升级代码符合Python3规范
实际上python2.7和python3.x还是有不少区别的,但在本章的代码中主要只需注意两点就好:
- print格式
- bytes和str类型和互相转换
具体python2.7和pyhton3.x的区别详见:在Python 2.7即将停止支持时,我们为你准备了一份3.x迁移指南
关键代码分析
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.socket()返回套接字对象,可以进行连接、收发、读写。第一个参数为地址簇,AF_INET为ipv4地址,AF_INET6为ipv6地址,AF_UNIX只能够用于单一的Unix系统进程间通信;第二个参数为连接类型,SOCK_STREAM,流式socket,用于TCP连接,SOCK_DGRAM,数据报式socket,用于UDP通信,SOCK_RAW,原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头,SOCK_RDM是一种可靠的UDP形式,即保证交付数据报但不保证顺序,SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。SOCK_SEQPACKET可靠的连续数据包服务。
部分运行结果
TCP客户端和服务端:
替代netcat的工具:
连接接ssh服务器,这个在服务器端应该还需要一些配置,没有运行成功。