add twisted SSH client as secondary server command injection sinks, add proper test cases

This commit is contained in:
amammad
2024-02-25 17:52:24 +04:00
committed by Taus
parent 0a765cc94a
commit c4a38d0a2f
4 changed files with 69 additions and 2 deletions

View File

@@ -0,0 +1,30 @@
#!/usr/bin/env python
from fastapi import FastAPI
from twisted.conch.endpoints import SSHCommandClientEndpoint
from twisted.internet.protocol import Factory
from twisted.internet import reactor
app = FastAPI()
@app.get("/bad1")
async def bad1(cmd: bytes):
endpoint = SSHCommandClientEndpoint.newConnection(
reactor,
cmd, # $ result=BAD getSecondaryCommand=cmd
b"username",
b"ssh.example.com",
22,
password=b"password")
SSHCommandClientEndpoint.existingConnection(
endpoint,
cmd) # $ result=BAD getSecondaryCommand=cmd
factory = Factory()
d = endpoint.connect(factory)
d.addCallback(lambda protocol: protocol.finished)
return {"success": "Dangerous"}

View File

@@ -14,9 +14,9 @@ app = FastAPI()
@app.get("/bad1")
async def bad1(cmd: str):
stdin, stdout, stderr = paramiko_ssh_client.exec_command(cmd) # $ result=BAD getSecondaryCommand=cmd
return {"success": stdout}
return {"success": "Dangerous"}
@app.get("/bad2")
async def bad2(cmd: str):
stdin, stdout, stderr = paramiko_ssh_client.exec_command(command=cmd) # $ result=BAD getSecondaryCommand=cmd
return {"success": "OK"}
return {"success": "Dangerous"}