中国领先的IT技术网站
|
|

黑客为你讲述:如何快速进行常规端口渗透

关于端口渗透,如果不是你自己写工具的情况下,其实本身使用上并没多少技术含量,至于无状态扫描的具体内部实现还是比较复杂的。

作者:花椒和邻居来源:威客安全|2017-10-12 16:17

沙龙活动 | 去哪儿、陌陌、ThoughtWorks在自动化运维中的实践!10.28不见不散!


1. 扫描前奏

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

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

2. 关于端口扫描工具

除了用telnet对某单个机器进行快速常规高危端口探测之外,如果我们想短时间内对多个目标进行批量端口扫描,又该怎么办呢,这里就简单介绍下几款经常会用到的公网端口扫描工具,masscan和zmap,同是基于无状态的的端口扫描,这里顺便科普下什么是无状态,简单来说,普通的端口扫描工具,在发出请求包以后还有一个等待数据回应的过程,然后根据回应的数据包头标志(不同系统平台的协议栈对每种标志的数据包响应状态也是不一样的)以此来判断目标的某个端口或者服务是否开放,用的什么操作系统等等……但这样做,无疑会很大程度上拖慢扫描速度,所以,后来大牛们就搞出了无状态扫描,这也就意味着,当请求包发送以后就被不再管了,也不再等待回应,所有的验证都放在数据包本身,这可能也是它快的主要原因,另外,此类工具为了减少触发目标ids的几率,都采用了分组扫描算法[这种东西其实并不算新奇],让扫描的ip随机分布[尽可能规避目标防护],而不是密麻集中在某个点……好了,简单科普就先到这里,过深的东西,也不是我目前的能力所能企及的,关键我们能把工具用起来就行,接着就来分别介绍下两款工具的一些常规用法,实际渗透中,个人还是更推荐masscan…原因我这里不多嘴了,还是留给大家,自行慢慢体会吧

3.

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即udprange=203.174.48.0/24 # 指定要扫描的ip段,可以连续指定多个,中间记得逗号隔开就好了ping=false # 扫描的时候要不要先ping下,true表示真,即pingbanners=true # 获取端口banner信息

excludefile=/etc/zmap/blacklist.conf # 指定不扫描的ip段,可以把不想扫描的一些ip段都加到这个文件中,如:内网ip段是不需要扫的

masscan 实例用法 [ 支持同时进行tcp及udp扫描 ]:

  1. 手工指定选项扫描# 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文件来记录上次扫描到的位置索引,下次扫描会上次的索引位置开始,如果想重新扫描,删掉该文件即可:

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

4

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的syntarget-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貌似也不太好使]:

  1. # 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 加载自定配置文件进行扫描

5. 在用上面两款工具时,有些地方还是需要注意下:

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

6.

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

7. 

如何快速对目标网站的一些基本情况做简要判断,如,对方用的什么web服务器,后端脚本是啥,数据库是啥,系统平台又是啥等……,下面就来简单熟悉一些常见的web架构:

  1. # 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 

利用httprint 识别web目标服务器指纹 [ 其实是个比较鸡肋的一个小工具,一般看下响应头中的server字段就有了,不过,这里的并不准,很容易被改掉 ]:

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

web服务器指纹字典下载地址:

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

常用的几个相对比较实用的firefox插件,自己在配置渗透环境的时候最好都预先装上:

  1. hackbartamper datalive http headersfirebugdownthemall... 

使用 whatweb [探测到的信息相对比较全面],返回的结果中大致包括以下内容:请求返回的状态码web服务器版本ip所在国家操作系统详细的版本信息脚本语言版本信息域名解析到的ip截取并显示网站标题等等……

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

8.

一些常见端口渗透用途汇总,表格实在是太累了,所以就直接截了图:

9.

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

10.

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

11.

如果你有兴趣,想针对某个国家网段进行大规模扫描也可以把它写成这样,当然,我这里是随便写的,你要想实际用肯定是远远不够的,单单只是提供个小demo,能自动化的事情还有很多,写个shell还是比较简单的,还是留给大家根据自己的实际需求自行发挥吧,反正工具就在那里,相互配合才能出效果,各自为战是很难有所作为的shell

  1. #!/bin/bashwhile read LINEdomasscan -p 21 --rate=100 $LINE | tee -a 21.txtdone < 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,不管是你自己挖的还是买的,也许只有这时才能体现端口扫描的真正价值,另外,还有多如牛毛的小工具,这里都没提到,后续涉及到内网时我们再仔细说明,对于公网扫描,有这些,暂时足矣,祝大家好运,切记不要干坏事就好!

【编辑推荐】

  1. 黑客如何隐藏恶意软件? 主要靠这三种技术!
  2. 最好用的17个渗透测试工具
  3. 揭秘:黑客究竟对你的“被盗数据”做了什么?
  4. 大战黑客,一路披荆斩棘,百亿互联网金融平台救火故事!
  5. 揭秘:黑客究竟对你的「被盗数据」做了什么?
【责任编辑:赵宁宁 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

黑客入侵的主动防御

本书是一本非常全面地讲述黑客入侵主动防御技术的网络安全工具书。本书的重点是介绍黑客的攻击手段和提供相应的主动防御保护措施,在组织结...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× Python最火的编程语言