一,Nmap(tcp/ip)
1, 主机发现原理:发送探测包到目标主机,如果收到回复,就说明主机是开启的;否则是关闭的。默认情况是会发送四种不同类型的数据白来探测主机是否在线(icmp/tcp syn/tcp ack/ICMP timestamp(时间戳)
2, 端口扫描原理
————————————————
- open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
- open|filtered:端口是开放的或被屏蔽。
closed|filtered :端口是关闭的或被屏蔽。
————————————————
(1) Tcp syn : 发送SYN到目标端口,如果收到SYN/ACK回复,那么判断端口是开放的;如果收到RST包,说明该端口是关闭的。如果没有收到回复,那么判断该端口被屏蔽(Filtered)
(2) TCP connect:向目标端口发送syn完整的连接请求,如果回复rst就是端口没开放,如果回复syn/ack就是端口开启,攻击机在回复ack结束连接,rst重置连接
(3) Tcp ack:向目标主机的端口发送ACK包,如果收到RST包,没有收到RST包,说明被屏蔽。用于确定防火墙是否屏蔽某个端口。
(4) TCP FIN/Xmas/NULL:如果端口是关闭的就发送RST,如果端口是开放或屏蔽的的就不发什么
(@)Fin表示关闭连接
(@)PSH表示有 DATA数据传输
(@)NULL扫描(所有flags都为0):反向扫描----原理是将一个没有设置任何标志位的数据包发送给TCP端口,在正常的通信中至少要设置一个标志位,根据FRC 793的要求,在端口关闭的情况下,若收到一个没有设置标志位的数据字段,那么主机应该舍弃这个分段,并发送一个RST数据包,否则不会响应发起扫描的客户端计算机。也就是说,如果TCP端口处于关闭则响应一个RST数据包,若处于开放则无相应。但是应该知道理由NULL扫描要求所有的主机都符合RFC 793规定,但是windows系统主机不遵从RFC 793标准,且只要收到没有设置任何标志位的数据包时,不管端口是处于开放还是关闭都响应一个RST数据包。但是基于Unix(*nix,如Linux)遵从RFC 793标准,所以可以用NULL扫描。 经过上面的分析,我们知道NULL可以辨别某台主机运行的操作系统是什么操作系统,是为windows呢?还是Unix?
(@)Xmas-Tree扫描:通过发送带有下列标志位的tcp数据包,都置为1,
URG:指示数据时紧急数据,应立即处理。
PSH:强制将数据压入缓冲区。
Fin:在tcp会话结束时使用。
正常情况下,三个标志位不能被同时设置,但在此种扫描中可以用来判断哪些端口关闭还是开放,与上面的反向扫描情况相同,依然不能判断windows平台上的端口。
端口开放:发送URG/PSH/FIN, 没有响应
(5) idle扫描:
也被称为Idle扫描或反向扫描,在扫描主机时应用了三方僵尸计算机扫描。由僵尸主机向目标主机发送SYN包。目标主机端口开发时回应SYN|ACK,关闭时返回RST,僵尸主机对SYN|ACK回应RST,对RST不做回应。从僵尸主机上进行扫描时,进行的是一个从本地计算机到僵尸主机的、连续的ping操作。查看僵尸主机返回的Echo响应的ID字段,能确定目标主机上哪些端口是开放的还是关闭的。
例:A是nmap,B是目标主机,C是僵尸主机,C满足条件ip id是以1递增的(C一般是设备,很少是PC)
第一步:A向C发送syn ack ,C会回复RST:ip id=3337;
第二步:A用C的ip发送给B syn,B如果端口开启的就会回复给C syn ack,C会发送RST:ip id=3338
第三步:A再向C发送syn ack ,C会回复RST:ip id=3339;
从C回复的RST:IP ID的不断增大可以分析出B发送给C的是syn ack,则B的某端口开放
如果端口可能是关闭的,在第二步时,B就会回复给C RST,C不再回复给B任何包,在第三步A发送给C时,C回复的就是RST:IP ID=3338,可推断出B发送给C的是RST,该端口可能是关闭的。filtered也是这种情况所以只能说端口可能是关闭的
Idle扫描实现
http://www.wfuyu.com/Internet/24936.html
https://edu.51cto.com/center/course/lesson/index?id=107008
二,burpsuite(http/https)
参考链接:https://blog.csdn.net/write_down/article/details/78990182
https://cloud.tencent.com/developer/article/1018645(详细)图片用的这里的
1,burpsuite抓包相当于中间人攻击
内容传输的加密:生成随机的会话密钥(对称算法),会话密钥加密信息,用rsa生成的公钥私钥,公钥解密会话密钥,私钥解密会话密钥(确保接受者)
Burpsuite抓本机的包,相当于burpsuite在本机与服务器之间,burpsuite生成一对公私钥
图解:
2,SSL证书完整性和真实性的验证
SSL证书只是其中的一种,用于加密HTTP协议,也就是HTTPS。SSL证书负责传输公钥,是一种PKI(Public Key Infrastructure,公钥基础结构)证书。这些证书都是由受认证的证书颁发机构——我们称之为CA(Certificate Authority)机构来颁发, CA机构颁发的证书都是受信任的证书,对于SSL证书来说,如果访问的网站与证书绑定的网站一致就可以通过浏览器的验证而不会提示错误。
在申请SSL证书时需要向CA机构提供网站域名,营业执照,以及申请人的身份信息等。网站的域名非常重要,申请人必须证明自己对域名有所有权,一个证书一般只绑定一个域名,CA机构也提供申请通配符域名(例如,*.baidu.com),通配符域名相当于绑定了主域名下的所有域名,3在burpsuite抓包时有时会让下载一个证书添加到根证书信任区,就使得本机和浏览器都信任这个证书,burpsuite才可以进行中间人攻击
3,浏览器除了检查信任证书外,还会检查该证书是否被篡改:用CA公钥(颁布这个证书的地方的公钥)解密数字签名(HASH证书后用私钥加密的到数字签名)得到信息摘要,再将server得到的证书利用相同的hash算法再次得到一个消息摘要,对比两次的结果保证证书的完整性
4,完整流程: