如何快速有效的进行大规模常规端口渗透

扫描前奏

开始正式的说明之前,我们不妨先来简单了解下 telnet,这也是到目前为止,个人认为最靠谱的 tcp 端口扫描工具,没有之一。

如果你只是想快速地探测目标的某几个 tcp 端口是否开放,直接 telnet一下,无疑是极好的,也根本犯不着一上来就搂着专业的端口扫描工具去一通乱扫,这样做可以有效避免因某些工具动静儿过大[如,nmap之流…],而造成一些不必要的麻烦,如触发对方防护报警[后续再搞很可能就要换 ip了,tor 暂时也不是想象的那么好用],简单使用实例,如下:

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

关于端口扫描工具

除了用 telnet 对某单个机器进行快速常规高危端口探测之外,如果我们想短时间内对多个目标进行批量端口扫描,又该怎么办呢,这里就简单介绍下几款经常会用到的公网端口扫描工具 MASSCAN 和 ZMAP,同是基于无状态的的端口扫描。

这里顺便科普下什么是无状态,简单来说,普通的端口扫描工具,在发出请求包以后还有一个等待数据回应的过程,然后根据回应的数据包头标志(不同系统平台的协议栈对每种标志的数据包响应状态也是不一样的)以此来判断目标的某个端口或者服务是否开放,用的什么操作系统等等……

但这样做,无疑会很大程度上拖慢扫描速度,所以,后来大牛们就搞出了无状态扫描,这也就意味着,当请求包发送以后就被不再管了,也不再等待回应,所有的验证都放在数据包本身,这可能也是它快的主要原因。

另外,此类工具为了减少触发目标 IDS 的几率,都采用了分组扫描算法,让扫描的 IP 随机分布,尽可能规避目标防护,而不是密麻集中在某个点……

好了,简单科普就先到这里,过深的东西,也不是我目前的能力所能企及的,关键我们能把工具用起来就行,接着就来分别介绍下两款工具的一些常规用法,实际渗透中,个人还是更推荐 MASSCAN …原因我这里不多嘴了,还是留给大家,自行慢慢体会吧!

MASSCAN

扫描速度取决于你的实际带宽,默认只扫描 tcp 端口,但也可扫 udp。

项目地址:https://github.com/robertdavidgraham/masscan

MASSCAN 常用选项:

 -p 指定要扫描的端口,同时指定多个端口要用逗号隔开
 --rate 指定发包速率,根据你自己的实际带宽来定,我自己是 20 M的光纤,一般给 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

一句话快速锁定各类敏感服务特征:

# 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"

ZMAP

扫描速度依然是取决于你的实际带宽,不过,在实际测试中准确率要比 MASSCAN 稍差,同样的目标,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  加载自定配置文件进行扫描

一些注意事项

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

NMAP

最后再来看下老旧的 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

如何快速对目标网站的一些基本情况做简要判断

比如:对方用的什么 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
……

利用 httprint 识别 web 目标服务器指纹

# 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 则严格区分大小写,所以返回的页面肯定是不一样的。

观察各种报错信息,看看里面有没有泄露服务器的相关信息。

等等……

一些常见端口渗透用途汇总

端口号

端口服务/协议简要说明

关于端口可能的一些渗透用途

tcp 20,21

ftp 默认的数据和命令传输端口[可明文亦可加密传输]

允许匿名的上传下载,爆破,嗅探,win提权,远程执行(proftpd 1.3.5),各类后门(proftpd,vsftp 2.3.4)

tcp 22

ssh[数据ssl加密传输]

可根据已搜集到的信息尝试爆破,v1版本可中间人,ssh隧道及内网代理转发,文件传输,等等…常用于linux远程管理…

tcp 23

telnet[明文传输]

爆破,嗅探,一般常用于路由,交换登陆,可尝试弱口令,也许会有意想不到的收获

tcp 25

smtp[简单邮件传输协议,多数linux发行版可能会默认开启此服务]

邮件伪造,vrfy/expn 查询邮件用户信息,可使用smtp-user-enum工具来自动跑

tcp/udp 53

dns[域名解析]

允许区域传送,dns劫持,缓存投毒,欺骗以及各种基于dns隧道的远控

tcp/udp 69

tftp[简单文件传输协议,无认证]

尝试下载目标及其的各类重要配置文件

tcp 80-89,443,8440-8450,8080-8089

web[各种常用的web服务端口]

各种常用web服务端口,可尝试经典的top n,vpn,owa,webmail,目标oa,各类java控制台,各类服务器web管理面板,各类web中间件漏洞利用,各类web框架漏洞利用等等……

tcp 110

[邮局协议,可明文可密文]

可尝试爆破,嗅探

tcp 137,139,445

samba[smb实现windows和linux间文件共享,明文]

可尝试爆破以及smb自身的各种远程执行类漏洞利用,如,ms08-067,ms17-010,嗅探等……

tcp 143

imap[可明文可密文]

可尝试爆破

udp 161

snmp[明文]

爆破默认团队字符串,搜集目标内网信息

tcp 389

ldap[轻量级目录访问协议]

ldap注入,允许匿名访问,弱口令

tcp 512,513,514

linux rexec

可爆破,rlogin登陆

tcp 873

rsync备份服务

匿名访问,文件上传

tcp 1194

openvpn

想办法钓vpn账号,进内网

tcp 1352

Lotus domino邮件服务

弱口令,信息泄漏,爆破

tcp 1433

mssql数据库

注入,提权,sa弱口令,爆破

tcp 1521

oracle数据库

tns爆破,注入,弹shell…

tcp 1500

ispmanager 主机控制面板

弱口令

tcp 1025,111,2049

nfs

权限配置不当

tcp 1723

pptp

爆破,想办法钓vpn账号,进内网

tcp 2082,2083

cpanel主机管理面板登录

弱口令

tcp 2181

zookeeper

未授权访问

tcp 2601,2604

zebra路由

默认密码zerbra

tcp 3128

squid代理服务

弱口令

tcp 3312,3311

kangle主机管理登录

弱口令

tcp 3306

mysql数据库

注入,提权,爆破

tcp 3389

windows rdp远程桌面

shift后门[需要03以下的系统],爆破,ms12-020[蓝屏exp]

tcp 4848

glassfish控制台

弱口令

tcp 4899

radmin远程桌面管理工具,现在已经非常非常少了

抓密码拓展机器

tcp 5000

sybase/DB2数据库

爆破,注入

tcp 5432

postgresql数据库

爆破,注入,弱口令

tcp 5632

pcanywhere远程桌面管理工具

抓密码,代码执行,已经快退出历史舞台了

tcp 5900,5901,5902

vnc远程桌面管理工具

弱口令爆破,如果信息搜集不到位,成功几率很小

tcp 5984

CouchDB

未授权导致的任意指令执行

tcp 6379

redis未授权

可尝试未授权访问,弱口令爆破

tcp 7001,7002

weblogic控制台

java反序列化,弱口令

tcp 7778

kloxo

主机面板登录

tcp 8000

Ajenti主机控制面板

弱口令

tcp 8443

plesk主机控制面板

弱口令

tcp 8069

zabbix

远程执行,sql注入

tcp 8080-8089

Jenkins,jboss

反序列化,控制台弱口令

tcp 9080-9081,9090

websphere控制台

java反序列化/弱口令

tcp 9200,9300

elasticsearch

远程执行

tcp 10000

webmin linux主机web控制面板入口

弱口令

tcp 11211

memcached

未授权访问

tcp 27017,27018

mongodb

爆破,未授权访问

tcp 3690

svn服务

svn泄露,未授权访问

tcp 50000

SAP Management Console

远程执行

tcp 50070,50030

hadoop

默认端口未授权访问

说了这么多,想必大家应该很清楚这些端口具体该怎么利用了。

最后,在介绍个小脚本 whatportis 专门用来查询某个端口具体作用的。

如果你有兴趣,想针对某个国家网段进行大规模扫描也可以把它写成这样。当然,我这里是随便写的,你要想实际用肯定是远远不够的,单单只是提供个小 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一边跑一边认真观察分析,没有什么比数据包更能说明问题。

篇幅限制,这里我就不一一把每种扫描方式都带着大家跑一遍了,有些东西还是需要自己亲自尝试,不然,别人的东西永远都只是别的,端口这个东西,怎么说呢,有很多运气和经验敏感度的成分在里面,可能还要外加一个高质量的字典,另外,再多说一句,在没有十足的把握的情况下,直接在公网跑字典基本是不太靠谱的。

实际测试中,对一些稍有防护的目标,爆破的成率还是蛮低的,当然啦,对于端口,爆破只是很小的一个方面,比如,当我们发现某个工具或者系统服务存在远程溢出或者代码执行。不仅限于此类的可远程利用的漏洞,任何可以直接远程主动getshell 的都可以。

还是那句话,如果你手里有某个主流服务的通杀远程 0day,不管是你自己挖的还是买的,也许只有这时才能体现端口扫描的真正价值,另外,还有多如牛毛的小工具,这里都没提到,对于公网扫描,有这些暂时足矣,祝大家好运,切记不要干坏事就好!

来源:klion's blog 原文:http://t.cn/AiNFIMSN 题图:来自谷歌图片搜索 版权:本文版权归原作者所有 投稿:欢迎投稿,投稿邮箱: editor@hi-linux.com

原文发布于微信公众号 - 运维之美(Hi-Linux)

原文发表时间:2019-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券