(渗透脚本)TCP创建连接脚本----解题----极客大挑战2019HTTP

#原因:自己本来已经写过这个题目了,但是最近看了一本关于使用python去写一些脚本的书,刚好想起来这道题目的情况很符合,而且也可以写出来让大家学习一下如何去写这个关于TCP连接的脚本#

一.前置知识及条件

1.前置知识

Ⅰ.关于TCP/IP协议:可靠,有序的连接,通过三次握手与服务器构成连接:SYN → SYN-ACK → ACK

Ⅱ.网络层的ipv4协议,将内容封装成ip数据包进行传输

Ⅲ.python自带的Socket包:Python 内置的网络通信模块,用于创建 TCP/UDP 连接,是所有网络脚本的基础

2.条件

Ⅰ.电脑没有相应的拦截请求工具如wireshark,burpsuite,Hackbar

Ⅱ.用于伪造一些请求头等等...

二.题目突破点

具体解题流程不在说明,先强调几点解题内容:

1.访问Secret.php的时候显示需要你使用从Sycsecret.buuoj.cn来跳转到这个页面

伪造部分:

2.要求你使用Syclover这个搜索引擎

伪造部分:

3.要求你使用本地进行连接访问

伪造部分:

最后得到:

通过以上三点可以得到三个需要我们修改的地方(我这边是一步到位,这道题目的情况基本上是一步一步得到这三个要求)

1:使用get协议去跳转到Secret.php然后伪造Referer:https://Sycsecret.buuoj.cn

2.伪造User-Agent:Syclover

3.伪造本地连接:X-Forwarded-For:127.0.0.1

三.脚本书写

1.导入相应的包

复制代码
import socket

2.定义参数

复制代码
target_host = "node5.buuoj.cn"  # 目标服务器域名/IP
target_port = 25112             # 目标服务器端口(HTTP非默认端口必须指定)

我们既然要去连接,所以会有相应的网址以及端口需要我们进行填写,这边参数名可以随便填,但是我这边为了规范

3.创建TCP连接的Socket对象

复制代码
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • socket.socket():创建 socket 实例,参数是固定搭配:
    • socket.AF_INET:使用 IPv4 协议(几乎所有场景都用这个);
    • socket.SOCK_STREAM:使用 TCP 协议(面向连接、可靠传输,HTTP/HTTPS 基于 TCP);
    • 如果是 UDP 协议,第二个参数用 socket.SOCK_DGRAM(无连接、不可靠)。

4.建立TCP连接(握手)

复制代码
client.connect((target_host, target_port))
  • connect():发起 TCP 三次握手,建立和目标服务器的连接;
  • 参数是元组(主机, 端口),必须严格按「字符串 + 整数」格式;

5.构造HTTP请求(核心解题部分:按协议格式拼接字符串)

复制代码
request = (
    "GET /Secret.php HTTP/1.1\r\n"         # 请求行:方法 + 路径 + 协议版本
    f"Host: {target_host}:{target_port}\r\n"  # Host头:指定目标站点(必选)
    "User-Agent: Syclover\r\n"               # 客户端标识(伪造浏览器)
    "Referer: https://Sycsecret.buuoj.cn\r\n" # 来源页面(伪造)
    "X-Forwarded-For: 127.0.0.1\r\n"        # 伪造客户端IP
    "Connection: close\r\n"                 # 响应后关闭连接
    "\r\n"                                  # 空行:分隔请求头和请求体
)
client.send(request.encode('utf-8'))

encode('utf-8'):把字符串转成字节流(TCP 传输的是二进制数据,不是文本);

send():把构造好的 HTTP 请求通过 TCP 连接发送给服务器

6.接受服务器返回的报文

复制代码
full_response = b""  # 存储完整响应(字节类型)
while True:
    chunk = client.recv(4096)  # 每次最多接收4KB数据
    if not chunk:  # 无数据返回 → 连接关闭,接收完毕
        break
    full_response += chunk  # 拼接数据块,避免截断
  • recv(4096):从 TCP 连接中读取数据,参数是「缓冲区大小」(通常设 4096/8192);
  • 循环接收:因为服务器响应可能超过 4KB(比如网页内容),必须循环读取直到无数据;
  • full_response:用字节类型存储(b""),避免拼接时编码混乱。

7.打印数据

复制代码
print("=== 响应结果 ===")
print(full_response.decode('utf-8', errors='ignore'))

对得到的内容进行utf-8解码

8.关闭连接

复制代码
client.close()

四.总结

注意缩进问题,因为python不是使用括号进行,python通过缩进来判断代码部分

脚本数据的整体流动流程:

复制代码
脚本构造的 HTTP 字符串 
  ↓ (应用层):按 HTTP 规则拼格式
转成字节流 → Socket 发送
  ↓ (传输层):TCP 分割成「数据段」,加端口(25112)
  ↓ (网络层):封装成「IP 数据包」,加目标 IP(node5.buuoj.cn 解析后的 IP)
  ↓ (数据链路层/物理层):通过网线/网卡发往服务器
  ↓ 服务器端:反向解析(IP→端口→TCP→HTTP),处理后返回响应

五.完整精修脚本

复制代码
import socket

# 步骤1:定义目标
target_host = "test.com"
target_port = 8080

# 步骤2:创建socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    # 步骤3:连接
    client.connect((target_host, target_port))
    client.settimeout(5)

    # 步骤4:构造POST请求
    post_data = "user=admin&pass=123"
    request = (
        "POST /login HTTP/1.1\r\n"
        f"Host: {target_host}:{target_port}\r\n"
        "User-Agent: Chrome\r\n"
        "Content-Type: application/x-www-form-urlencoded\r\n"
        f"Content-Length: {len(post_data)}\r\n"
        "Connection: close\r\n"
        "\r\n"
        f"{post_data}"
    )
    client.send(request.encode('utf-8'))

    # 步骤5:接收响应
    full_response = b""
    while True:
        chunk = client.recv(4096)
        if not chunk:
            break
        full_response += chunk

    print("响应结果:\n", full_response.decode('utf-8', errors='ignore'))

except Exception as e:
    print(f"请求失败:{e}")
finally:
    client.close()

如有问题及时提出,互相学习。

/#

我后面发现我这个脚本好像可以拿来作为一个基础脚本用来修改成Ddos攻击的攻击脚本,如果大家有兴趣,可以给我评论或者找我,我后面可以出一期关于将其修改成Ddos攻击的脚本(上述的所有学习内容,以及提供的方法仅作为学习内容,不存在任何的违法行为)

#/

相关推荐
r i c k2 小时前
办公小程序开发----提高工作效率
python·python程序开发
qq_356196952 小时前
day39模型的可视化和推理@浙大疏锦行
python
深蓝电商API2 小时前
从 “能爬” 到 “稳爬”:Python 爬虫中级核心技术实战
开发语言·爬虫·python
濊繵2 小时前
Linux网络--网络层协议 IP
服务器·网络·tcp/ip
Upper9992 小时前
简单记录:TCP数据包的抓取--3次握手、4次挥手
网络·网络协议·tcp/ip
czlczl200209252 小时前
如何添加“默认给Sql查询语句加上租户条件”的功能
数据库·python·sql
破烂pan2 小时前
Python 长连接实现方式全景解析
python·websocket·sse
高洁012 小时前
一文了解图神经网络
人工智能·python·深度学习·机器学习·transformer
咸鱼加辣2 小时前
按“最近是否用过”删(LRU)
python