一、服务端口介绍
在渗透测试中对服务端口的收集非常重要,通过扫描服务开放的端口可判断对应开启的服务,通过所提供的这些服务的已知漏洞就可进行攻击。知名端口(0-1023)固定分配给某些服务的,动态端口(1023-65535)不固定分配给某些服务。
常见端口:
21:ftp文件传输协议(匿名访问、弱密码等)
22:ssh专门为远程登录会话和其他网络服务提供的安全性协议,基本出现在liunx服务器、网络设备上(弱口令、防火墙ssh后门等)
23:telnet远程管理服务(弱口令探测、溢出等)
25:smtp邮件接收服务(溢出)
53:dns提供域名解析(dns域传送信息泄露、dns劫持、dns缓存投毒、dns欺骗、dns隧道技术刺穿防火墙等等)
80:http协议(sql注入、文件上传、文件包含、xss、xxe、csrf、ssrf等等)
110:pop3邮件发送服务器(溢出)
443:https服务的web浏览端口、能提供加密和通过安全端口传输的另一种http(心脏出血)
445:smb用在计算机间共享文件、打印机、串口等(永恒之蓝漏洞)
1433:oracle
3306:mysql数据库(弱口令)
3389:远程桌面
5432:postgresql
6379:redis
8080:连接代理
二、服务端口收集方法
1.nmap工具
tcp connect()扫描:
通过试图与目标主机相应的tcp端口建立一个完整的tcp连接,判断目标主机端口的开放信息
指令:nmap -sT 域名/ip地址(-sT可省略)
半开放扫描:
tcp syn:只发送一个syn报文然后等待回应,比tcp connect扫描更加安全,不建立一个完整的tcp连接,目标主机一般不会将此类型行为记入安全日志,但需要root权限
指令:namp -sS 域名/ip地址
udp端口扫描:
使用udp扫描方式确定目标主机的udp端口开放情况,也需要root权限
指令:nmap -sU www.xxx.com
扫描显示所有的udp端口是open|filterd
2.masscan工具
指令:masscan ip地址 -p 端口(1-10000)
3.御剑高速tcp端口扫描工具
4.自己造工具
指令:xxx.py -u ip地址
import threading
from socket import *
import getopt
import sys
lock = threading.Lock() # 确保 多个线程在共享资源的时候不会出现脏数据
openNum = 0 # 端口开放数量统计
threads = [] # 线程池
def start():
if len(sys.argv)==3:
opts,args=getopt.getopt(sys.argv[1:],"u:t:d:")
for k,v in opts:
if k=='-u':
target=v
main(target)
else:
print("Error Argument!")
sys.exit()
def portscanner(host, port):
global openNum
try:
s = socket(AF_INET, SOCK_STREAM)
s.connect((host, port))
lock.acquire()
openNum += 1
print(f"{port} open")
lock.release()
s.close()
except:
pass
def main(ip, ports=range(65535)): # 设置 端口缺省值0-65535
setdefaulttimeout(1)
print("---portscan v1.0---by:Edward Hopper---- ")
for port in ports:
# target定义一个要执行的函数scan,args为要向函数里面传递的参数
t = threading.Thread(target=portscanner, args=(ip, port))
threads.append(t)
t.start()
for t in threads:
t.join()
print(f"扫描完成--->>> ,共开放 {openNum}端口")
if __name__ == '__main__':
start() # 全端口扫描