是否可以配置NGINX(或任何反向代理)在访问我网站上的特定路径时发送TCP重置数据包(例如
www.mysite.com/tcp-reset
)。
我尝试将路径指向执行此操作的 python 套接字服务器,但我从客户端得到 502。我的目标是强制浏览器重新解析域名以进行dns重新绑定攻击。
这是我使用的Python脚本(直接访问端口时有效):
import socket
import struct
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(("127.0.0.1", 1234))
s.listen(5)
while True:
conn, addr = s.accept()
print(f"Connection from {addr}")
l_onoff = 1
l_linger = 0
s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', l_onoff, l_linger))
conn.close()
这是我使用的 nginx 配置:
location /tcprst/ {
proxy_pass http://localhost:1234/;
}
当我访问
/tcprst/
时,我得到的是 502 bad gateway
。
location = /reset {
reset_timedout_connection on;
return 444;
}
返回:
停止处理并将指定的代码返回给客户端。 非标准代码 444 关闭连接而不发送响应头[强调]。
启用或禁用重置超时连接和使用非标准代码 444 (1.15.2) 关闭的连接。重置的执行如下。在关闭套接字之前,会对其设置 SO_LINGER 选项,超时值为 0。 当套接字关闭时,TCP RST 会发送到客户端 [强调],并且此套接字占用的所有内存都会被释放。
$ curl http://localhost:8000/reset
curl: (56) Recv failure: Connection reset by peer