pwncat/platforms.py

83 lines
2.3 KiB
Python

#!/usr/bin/env python3
import pwncat.platform
from pwncat import subprocess
from pwncat.util import console
import hashlib
import os
try:
# Open a connection to a linux platform
# This will automatically open a new channel with the specified arguments.
target = pwncat.platform.create(
"linux", log="./commands.log", host="pwncat-centos-testing", port=4444
)
except pwncat.channel.ChannelError as exc:
console.log(f"[red]error[/red]: platform.create: {exc}")
try:
# Ensure we have a PTY on the new shell (not required, but we want to
# make sure it's working)
target.get_pty()
except pwncat.channel.ChannelError as exc:
console.log(f"[red]error[/red]: get_pty: {exc}")
host_hash = target.get_host_hash()
console.log(f"host hash: {host_hash}")
with target.open("/tmp/another", "w") as filp:
filp.write("hello world!")
with target.open("/tmp/another") as filp:
console.print(filp.read())
# # Generate random data
# count = 8192
# data = os.urandom(count)
# sum = hashlib.md5(data).hexdigest()
#
# console.log(f"writing {count}-bytes of random data to /tmp/write-test")
# console.log(f"data hashsum: {sum}")
#
# # Open the file and write the data
# with target.open("/tmp/write-test", "w") as filp:
# filp.write(data)
#
# console.log("reading /tmp/write-test and checking hashsum")
#
# # Read the file back
# with target.open("/tmp/write-test", "r") as filp:
# data = filp.read()
#
# # Calculate the hash sum of the data we read back
# new_sum = hashlib.md5(data).hexdigest()
#
# console.log(f"hashsum of read data: {new_sum}")
#
# # Ensure they match
# if sum != new_sum:
# console.log("[red]error[/red]: hash mismatch!")
# print(
# target.Popen(
# "stty -a", shell=True, text=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE
# ).communicate()[0]
# )
# # Try to write to a file with `dd`
# p = target.Popen(["cat", "-"], stdout="/tmp/test", stdin=subprocess.PIPE,)
#
# # Write every possible 7-bit character (where control codes reside)
# for i in range(127):
# p.stdin.write(bytes([0x16, i]))
#
# # Send CTRL-D to stop it
# p.stdin.write(b"\x04\x04")
#
# # Grab the output of dd
# stdout, _ = p.communicate()
# print(stdout)
#
# # Get the content of the file
# p = target.Popen(["hexdump", "/tmp/test"], stdout=subprocess.PIPE, text=True)
# print(p.communicate()[0])