,×01扫描前奏开始正式的说明,

0×01 扫描前奏

在开始正式的描述之前,我们先简单的看一下telnet,它是目前我认为最靠谱的tcp端口扫描工具,是的,没有,如果只是想快速检测目标是否有一些tcp [例如nmap之类…]的端口,并造成一些不必要的麻烦,例如触发对方的保护警报[后续可能会更改ip,而tor不好用暂时想象中的],简单的使用例子如下:

# telnet cc.target.edu.hk 1443
# telnet cc.target.edu.hk 3389
# telnet cc.target.edu.hk 22
...

0×02 关于端口扫描工具

除了使用telnet快速常规检测单机高危端口外,如果我们想在短时间内对多个目标进行批量端口扫描怎么办?公网端口扫描工具masscan和zmap都是基于无状态端口扫描的。顺便说一句,这是关于什么是无国籍状态的科普。简而言之,普通的端口扫描工具在发送请求包后有一个等待。数据响应的过程,然后根据响应的报文头标志(不同系统平台的协议栈对每个标志的报文响应状态的响应不同)判断目标的某个端口或服务是否开放,要做什么使用操作系统等……但是这样做无疑会在很大程度上拖慢扫描速度,所以后来大牛们想出了无状态扫描,也就是说,发送请求包的时候,就不再是用过的。不再等待响应,所有的验证都放在数据包本身,这可能是它速度快的主要原因。另外,为了降低触发目标id的概率,这类工具使用了组扫描算法【这种东西其实并不新鲜】,让扫描到的IP随机分布【尽量避免目标保护】,而不是密集地集中在某一点上……嗯,简单的科学先到这里,太深奥的东西不是我现在的能力所能达到的,关键是我们可以使用工具。然后我将介绍下两个工具的一些常规用法。在实际渗透中,我还是推荐masscan…原因是这里就不多说了,还是留给大家自己体验吧

0×03

masscan【扫描速度取决于你的实际带宽,默认好像只扫描tcp端口,但也可以扫描udp】:

https://github.com/robertdavidgraham/masscan

masscan 常用选项:

-p 指定要扫描的端口,同时指定多个端口要用逗号隔开
--rate 指定发包速率,根据你自己的实际带宽来定,我自己是20M的光纤,一般给1000足矣,一两兆的vpn,给100就差不多了,都是粗略估计的,懒的算
--open-only 仅显示开放的端口
--banners 获取banners
-c 使用自定义的扫描配置文件
--ping 扫之前是否要先ping下目标
-oL 把扫描结果存到指定文件中
--excludefile 排除不扫描的ip段

masscan配置文件格式如下:

# klion masscan config '#'表注释
rate =1000.00 # 指定发包速率,根据自己的实际带宽计算
output-format=list # 指定扫描结果保存的文件格式,这里我就用最普通的文本存,当然,它是支持直接输出成xml格式的,后续方便用程序处理
output-filename=/root/Desktop/port_hacking.txt # 指定要把扫描的结果文件保存到哪里
output-status=open # 只保留开放的端口信息
ports=80,443,8080,U:53 # 指定要扫描的端口,默认tcp,当然,你也可以指定UDP的端口,U即udp
range=203.174.48.0/24 # 指定要扫描的ip段,可以连续指定多个,中间记得逗号隔开就好了
ping=false # 扫描的时候要不要先ping下,true表示真,即ping
banners=true # 获取端口banner信息
excludefile=/etc/zmap/blacklist.conf # 指定不扫描的ip段,可以把不想扫描的一些ip段都加到这个文件中,如:内网ip段是不需要扫的

masscan实例使用[支持tcp和udp同时扫描]:

手工指定选项扫描
# masscan --rate=1000 -p21,22,23,25,U:69,110,143,U:161,80,81,82,83,88,443,445,512,513,514,1433,1521,2082,2083,2181,2601,2604,3128,3690,4848,8088,8086,8081,8080,3306,5432,3389,5984,6379,7001,7002,8069,9200,9300,11211,10000,27017,27018,50000,50070,50030 --banners 202.181.132.0/24 103.15.135.0/24 203.174.48.0/24 203.124.10.0/24 202.65.218.0/24 202.181.196.0/24 -oL port_hacking.txt

直接加载自定义配置文件进行扫描
# masscan -c masscan.conf

一句话快速锁定各种敏感服务功能。注意,如果在扫描过程中用ctrl+c终止扫描,masscan会生成一个paused.conf文件来记录上次扫描的位置索引,下次扫描遇到如果要重新扫描,删除文件即可:

# cat port_hacking.txt | egrep "ProFTPD|vsFTPd|FileZilla Server|Microsoft FTP Service|Pure-FTPd|OpenSSH|Remote Management Console|User Access Verification|Welcome to the server management|imap|smtp|pop|snmp"

0×04

zmap [ 扫描速度仍然取决于您的实际带宽。但是在实际测试中,准确率比mascan略差。同一个目标可以被masscan扫描,但不能被zmap扫描。具体内部原因暂未探明]:

其官方站点: https://zmap.io

zmap的常用选项【选项的作用和masscan没有太大区别,只是zmap默认以tcp模式扫描。如果要使用其他协议进行扫描,则必须单独指定选项]:

[注意:如果你要手工指定扫描选项,就务必先把zmap.conf文件中的所有选项都注释掉,不然会出错,原因暂未知,貌似它默认应该会先读取这个文件,一般我都是直接把它默认的配置文件选项全部注释掉,直接手工指定扫描选项]:
-p 指定要扫描的端口
-b 指定扫描ip黑名单,如,内网ip,我们是不需要扫的
-o 保存扫描结果到指定的文件中
-w 可以把要扫描的ip段事先都放在一个文件中,进行批量扫描,注意格式,一行对应一个ip段
-r 指定扫描发包速率
-B 指定你的实际带宽,比如你带宽10M,实际指定4-6M即可
-C 也可以直接加载自定义配置文件进行扫描
-s 在扫描完成后进行简单汇总
--probe-module=icmp_echoscan icmp模式扫描
--probe-module=udp udp模式扫描

zmap扫描配置文件格式说明:

interface "eth0" # 指定用于扫描的网卡接口
probe-module tcp_synscan # 扫描模式,默认是是tcp的syn
target-port 3389 # 要扫描的端口,不知道为什么在配置文件中不能同时指定多个,难道是我格式写错了,回头抽空再好好看看帮助
rate 100 # 设置发包速率
bandwidth 1M # 设置带宽
blacklist-file "/etc/zmap/blacklist.conf" # 指定扫描黑名单ip段[如,内网ip,特殊ip,所有你不想扫描的ip...]
output-file "/root/Desktop/port_res.txt" # 指定扫描结果的存放位置

zmap的一般用法【支持tcp、udp、icmp模式扫描,最好不要挂vpn扫描,原因不明,连加–vpn好像也不是很好】:

# zmap -B 1M -p [21,22,23,25,110,143,80,81,82,83,88,443,445,512,513,514,1433,1521,2082,2083,2181,2601,2604,3128,3690,4848,8088,8086,8081,8080,3306,5432,3389,5984,6379,7001,7002,8069,9200,9300,11211,10000,27017,27018,50000,50070,50030] -b /etc/zmap/blacklist.conf -r 1000 202.181.132.0/24 -o Desktop/port_res.txt

# zmap -C /etc/zmap/zmap.conf 202.181.132.0/24 加载自定配置文件进行扫描

图片[1]-,×01扫描前奏开始正式的说明,-老王博客

0×05 使用以上两个工具时,还有几点需要注意:

实际使用中,最好先根据你的实际带宽估算下最合适的发包速率,因为你的带宽和发包的速率会直接影响扫描结果的准确性
像这类的工具一般对带宽和速率的控制要求比较高,还有,在扫描之前它会预先提示你要扫描多少台机器,机器的多少也是根据你所给的掩码自动算出来的
扫完以后,先随便telnet几个ip的端口,看看精度如何,务必不要过度的依赖这些工具扫出来的结果
不单单是针对这两款工具,对所有工具都是如此,理解作者的实际编写思路比使用工具本身更重要,因为这是灵活运用的前提
即使你暂时还写不出来很优秀的代码,但总有一天你会写出来的,先把自己的基础打好
假如以后你想在这方面继续深入,这些都是很优秀的学习样板,所以过硬的编码能力在任何时候都跑不掉,贵在坚持嘛

0×06

最后,我们来看看旧的nmap。作为知名的检测工具,想必大家都非常熟悉了【一直被诟病的是老版本的速度很慢,可能是发包然后等待验证的过程比较复杂嘛,不过新版本确实提升了不少],一般对Linux目标机稍有了解的运维都会预装这个,对我们来说很方便:

# nmap -v 192.168.3.240 扫描某单个目标[目标可以是域名,ip后者ip段]
# nmap -iL ip.txt 同时扫描多个目标,把目标的ip/ip段事先放在一个文件中,每行对应一个
# nmap -Pn 192.168.3.240 扫描前先不要ping
# nmap -sV -v 192.168.3.240 探测远程机器上详细的服务信息,如,详细的名称版本,有banner的可能直接就把banner获取过来了,没banner的可能就慢慢的匹配特征,耗时会相对较长
# nmap -O -v 192.168.3.240 探测远程操作系统平台,如内核名称,版本...
扫描自己指定的端口,默认如果你不指定端口,它会自动扫描事先写死在程序中的1000个高危端口
# nmap -p 80,81,82,83,84,1433 192.168.3.189
# nmap -p U:53,111,137,T:21-25,80,139,8080 192.168.3.189
全面扫描目标主机的所有信息,包括操作系统,端口,服务,相当于-O -sV 的总和……
# nmap -A -v 192.168.3.240

快速扫描整个C段,速度级别从0到5,默认用icmp请求,极易被防火墙阻拦
# nmap -T5 -v 192.168.3.240
# nmap -T5 -v 192.168.3.0/24
# nmap -T5 --open 192.168.3.0/24
# nmap -v 192.168.3.1-10
# nmap --packet-trace 192.168.3.0/24 观察扫描时的详细发包过程
# nmap -sU 192.168.3.240 所谓隐蔽的UDP扫描,其实并不隐蔽
几种常用的扫描方式,tcp的syn和ack扫描另外还有connect(推荐用这个)
# nmap -sT 192.168.3.240 个人推荐的扫描方式
# nmap -sS 192.168.3.240
# nmap -sA 192.168.3.240
内网arp扫描,探测内网存活主机还是非常不错的,可轻易bypass掉各种应用层防火墙,既然是arp就没必要扫端口了,所以记得带上 -sn 选项 禁用端口扫描
# nmap -sn -PR 192.168.3.0/24

最常用的nmap组合,其实关于nmap的这些基本选项用法,不说大家也应该都早用的熟透了,每个选项参数作用在工具帮助里就已经说的非常清楚
# nmap --open -p port -Pn -v -sT -sV --script script_name ip/domain/cidr

0×07

如何快速对目标网站的一些基本情况做出简单的判断,比如对方使用什么web服务器,后端脚本是什么,数据库是什么,系统平台是什么等。 ..,让我们简单熟悉一下常见的web架构:

asp + access + iis5.0/6.0 + win2003/03r2
aspx + mssql2005/mssql2008 + iis7.0/iis7.5 + win2008/08r2
php[5.2,5.4,5.6] + mysql[5.1,5.5]/postgresql + apache[2.2,2.4]/iis + linux/win
php/jsp + mysql + ngnix + linux/win
java/jsp + oracle/mssql + tomcat + linux/win
……

使用httpprint来识别web目标服务器的指纹【其实是一个比较鸡肋的工具。一般可以在响应头中看到 server 字段。但是,这里不准确跑字典用服务器吗,可以很容易地更改]:

p>

# httprint -h 144.214.20.118 -s ./Desktop/signature.txt

Web服务器指纹词典下载地址:

http://www.net-square.com/signature.txt

几个常用的比较实用的firefox插件,配置渗透环境时最好预装:

hackbar
tamper data
live http headers
firebug
downthemall
...

使用whatweb【检测到的信息比较全面】,返回结果大致包括以下内容:

请求返回的状态码
web服务器版本
ip所在国家
操作系统详细的版本信息
脚本语言版本信息
域名解析到的ip
截取并显示网站标题
等等……

如何快速确定目标使用的系统平台:

在url中尝试变化大小写,进行请求,观察页面响应,windows默认对大小写不敏感,linux则严格区分大小写,所以返回的页面肯定是不一样的
观察各种报错信息,看看里面有没有泄露服务器的相关信息
等等……

0×08

一些常见的端口穿透使用总结,表太累,直接截图了:

0×09

说了这么多,我想大家应该都知道如何使用这些端口了。

0×10

最后介绍一个小脚本,whatportis用来查询一个端口的具体功能

0×11

如果你有兴趣,想对某个国家的网段进行大规模扫描,也可以这样写。当然,这里是随便写的。如果你想在实践中使用它肯定是不够的。一个小demo,还是有很多东西可以自动化的。写一个shell比较简单。还是留给大家根据自己的实际需要去玩吧。无论如何,工具就在那里,它们可以一起工作以产生结果。一个没有任何区别的外壳

#!/bin/bash
while read LINE
do
masscan -p 21 --rate=100 $LINE | tee -a 21.txt
done < hk_ip.txt
# tail -f 21.txt
# awk {'print $6'} 21.txt >> result.txt
# nmap -p 21 -iL result.txt -oN ftp_anonymous.txt -v --script ftp-anon.nse

下一句话:

关于端口穿透,如果不自己写工具,自己使用的技术含量不多。至于无状态扫描的具体内部实现,还是比较复杂的。到目前为止,我在学习过程中抛出了很多东西,如果你真的想深入了解,强烈建议你直接拿着wireshark运行,同时仔细观察分析。没有什么比数据包更能说明问题了。限于篇幅,这里不再一一解释每种扫描方式。我和大家一起跑,有些东西还是需要自己去尝试,否则,别人的东西永远只是别人的东西跑字典用服务器吗,移植这个东西,怎么说呢,里面有很多运气和经验敏感性的元素,并且可能还有额外的高质量词典,另外,我再说一点,没有完全自信的情况下,直接在公网上运行词典基本上是不可靠的。在实际测试中,对一些轻微保护的目标进行了爆破。成功率还是比较低的【虽然很低,但往往很有效,绝望的时候可以试试】,当然对于ports来说,爆破只是一个很小的方面,比如当我们发现一个工具或系统服务有远程溢出或代码执行【不限于这种可远程利用的漏洞,任何可以直接远程主动getshell的都可以】,或者那句话,如果你有远程0day干掉一个主流服务,不管你自己挖吧,也许只有在这个时候,端口扫描的真正价值才能体现出来。另外,还有这么多小工具,这里就不一一赘述了。我们稍后会在谈到内部网络时详细解释。公网扫描,有这些,暂时够用了,祝大家好运,切记不要做坏事!

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论