分享一个写扫描器和POC时的小技巧。 有时候有的漏洞需要一些特殊的数据包,比如说畸形的HTTP头、畸形的Multipart、畸形的chunk包等,此时用编程语言自己的HTTP库可能构造不出这种数据包,此时通常我们需要用原生socket发包,比如:

 import socket

 p = b'''GET /get?a=1 HTTP/1.1
Host: httpbin.org
User-Agent: raw-socket\x00\x01aaa '''.replace(b'\n', b'\r\n')
with socket.create_connection(('52.22.188.80', '80'), timeout=5) as conn:
conn.send(p)
print(conn.recv(10240).decode())

实际情况下你还需要解析HTTP包,但我这里只是一个demo,运行后成功获取结果:

可见,httpbin.org忽略了User-Agent中\0后的内容。这样,我们用原生socket编写代码,发送了畸形数据包。那么,如果对方使用了HTTPS,我们又如何发送原生数据包呢?其实也很简单,HTTPS实际上就是原生socket外面套一层TLS,所以我们改改代码,访问badssl.com试试:

 import ssl
import socket context = ssl.create_default_context()
p = b'''GET / HTTP/1.1
Host: sha512.badssl.com
User-Agent: raw-socket '''.replace(b'\n', b'\r\n')
with socket.create_connection(('sha512.badssl.com', 443), timeout=5) as conn:
with context.wrap_socket(conn, server_hostname='sha512.badssl.com') as sconn:
sconn.send(p)
print(sconn.recv(10240).decode())

没有任何问题:

之前经常看到网上很多人使用socket,还在使用最原始的方式,实际上Python包装了很多有价值的高层API,多多探索,提升你的编程能力。

用原生socket发送HTTP数据包的更多相关文章

  1. C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全

    简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...

  2. python网络编程-socket发送大数据包问题

    一:什么是socket大数据包发送问题 socket服务器端或者客户端在向对方发送的数据大于对方接受的缓存时,会出现第二次接受还接到上次命令发送的结果.这就出现象第一次接受结果不全,第二次接果出现第一 ...

  3. “ping”命令的原理就是向对方主机发送UDP数据包,HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”

    Socket  是一套建立在TCP/IP协议上的接口不是一个协议 应用层:  HTTP  FTP  SMTP  Web 传输层:  在两个应用程序之间提供了逻辑而不是物理的通信(TCP  UDP) T ...

  4. A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包

    A7139 拥有电磁波唤醒以及10mW的发射功率,很easy实现长距离通信,眼下測试有障碍物能够轻松达到300m以上. 通过几天的调试,眼下能够发送随意大小的数据包,大小为1-16KB.所有使用中断收 ...

  5. 转载: Erlang Socket解析二进制数据包

    转自:http://www.itkee.com/developer/detail-318.html 今天在家里闲来无事,实践了一下Erlang的Socket的功能.记录一下在过程中遇到的一些问题,以及 ...

  6. 复刻smartbits的国产网络测试工具minismb功能特点-如何加载、发送PCAP数据包

    复刻smartbits的网络性能测试工具minismb,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太网测试工具测试任何ip网络设备的端口吞吐率,带宽,并发 ...

  7. ping 命令 指定特定网卡 发送 ICMP 数据包

    Windows : ping -S Linux : ping -I <device> -I interface interface is either an address, or an ...

  8. 012_使用死循环实时显示 eth0 网卡发送的数据包流量

    #!/bin/bash while : do echo '本地网卡 eth0 流量信息如下: ' #grep输出所找整行,awk直接输出第5列 ifconfig eth0 | grep "R ...

  9. Windows下底层数据包发送实战

    1.简介 所谓“底层数据包”指的是在“运行”于数据链路层的数据包,简单的说就是“以太网帧”,而我们常用的Socket只能发送“运行”在传输层的TCP.UDP等包,这些传输层数据包已经能满足绝大部分需求 ...

随机推荐

  1. Python爬虫的简单入门(一)

    Python爬虫的简单入门(一) 简介 这一系列教学是基于Python的爬虫教学在此之前请确保你的电脑已经成功安装了Python(本教程使用的是Python3).爬虫想要学的精通是有点难度的,尤其是遇 ...

  2. [安洵杯 2019]easy_web

    0x00 知识点 md5强类型的绕过 方法比较固定: POST: a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%d ...

  3. kube-apiserver常用配置项

    KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"                                        ...

  4. Python自学之路---Day01

    目录 Python自学之路---Day01 注释 单行注释 多行注释 print()函数 语法 参数 实例 input()函数 语法 参数 实例 查看Python的关键字 代码 变量与常量 变量 如何 ...

  5. Windbg 实践之结合条件断点

    Case 1 1.bu USER32!PostMessageW "r $t0=@$t0+1;.printf\"PostMessageW Call Count:%d\",@ ...

  6. 远程桌面,出现身份验证错误,要求的函数不正确,这可能是由于CredSSP加密Oracle修正

    问题点: 升级至win10 最新版本10.0.17134,安装最新补丁后无法远程win server 2016服务器,报错信息如下: 出现身份验证错误,要求的函数不正确,这可能是由于CredSSP加密 ...

  7. ABP 切换mysql 数据库报错mysqlexception: incorrect string value: ‘\xe7\xae\x80\xe4\xbd\x93…’ for column display name

    刚折腾了ABP框架,为了跨平台,将SQL Server数据库换成了MySQL数据库,ABP框架上支持多语言,中间被字符集折腾的够呛,翻了N个博客,最后终于在StackOverFlow 上找到了最终的解 ...

  8. 微信小程序返回页面传值

    一.通过url传递参数,但由于navigateTo无法跳转到导航页,所以无法往导航页传递参数 wx.navigateTo({ url: 'test?id=1' }) 二.通过wx.navigateBa ...

  9. Pmw大控件(二)

    Pmw大控件英文名Pmw Python megawidgets 官方参考文档:Pmw 1.3 Python megawidgets 一,如何使用Pmw大控件 下面以创建一个计数器(Counter)为例 ...

  10. win10查看显卡算力

    1.查看笔记本自带算力 运行C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\extras\demo_suite目录下的deviceQue ...