2024-09-20 09:53:08 +00:00
|
|
|
import tempfile
|
|
|
|
from pyfsig import constants
|
2024-09-21 11:01:24 +00:00
|
|
|
import httpx
|
2024-09-20 09:53:08 +00:00
|
|
|
import mimetypes
|
2024-09-21 11:02:56 +00:00
|
|
|
import exploadlib.parse
|
2024-09-20 09:53:08 +00:00
|
|
|
mimetypes.init()
|
|
|
|
|
|
|
|
|
|
|
|
def grabsig(ext):
|
|
|
|
for sig in constants.SIGNATURES:
|
|
|
|
if sig["file_extension"] == ext:
|
|
|
|
return "".join([chr(h) for h in sig["hex"]]).encode("utf-8"), mimetypes.types_map[f".{ext}"]
|
|
|
|
|
|
|
|
def fileupload():
|
|
|
|
ext=args.ext
|
|
|
|
name=args.name
|
2024-09-24 19:34:36 +00:00
|
|
|
filename=args.filename if not args.doubleextend else ".".join(args.filename.split(".")[0:-1])+f".{args.ext}."+args.filename.split(".")[-1]
|
2024-09-20 09:53:08 +00:00
|
|
|
with open(args.payload,"r") as payload:
|
|
|
|
content=payload.read().encode("utf-8")
|
|
|
|
with tempfile.NamedTemporaryFile() as tmp:
|
2024-09-20 10:21:30 +00:00
|
|
|
try:
|
|
|
|
sig,mime=grabsig(ext)
|
|
|
|
except TypeError:
|
|
|
|
print("Error: most likely this file type is not in the available signature list")
|
|
|
|
exit()
|
2024-09-20 09:53:08 +00:00
|
|
|
tmp.write(sig)
|
|
|
|
tmp.write(b"\n")
|
|
|
|
tmp.write(content)
|
|
|
|
tmp.seek(0)
|
|
|
|
files = {name: (filename, tmp, mime)}
|
2024-09-21 11:01:24 +00:00
|
|
|
with httpx.Client(http2=args.http2) as client:
|
|
|
|
|
|
|
|
try:
|
2024-09-24 19:34:36 +00:00
|
|
|
r = client.post(args.url, files=files, headers=args.headers)
|
2024-09-21 11:01:24 +00:00
|
|
|
|
|
|
|
except httpx.ReadTimeout:
|
|
|
|
print("Error: Response timed out but file may have been uploaded")
|
|
|
|
exit()
|
|
|
|
|
|
|
|
except httpx.RemoteProtocolError:
|
|
|
|
print("Error: Server disconnected without sending a response")
|
|
|
|
exit()
|
|
|
|
|
|
|
|
except httpx.ConnectError:
|
|
|
|
print("Error: Connection refused")
|
|
|
|
exit()
|
|
|
|
|
2024-09-24 19:34:36 +00:00
|
|
|
print("file posted")
|
|
|
|
if args.response:
|
|
|
|
print(r.text)
|
2024-09-20 09:53:08 +00:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2024-09-21 11:02:56 +00:00
|
|
|
args=exploadlib.parse.parser()
|
2024-09-20 09:53:08 +00:00
|
|
|
fileupload()
|