mirror of
https://github.com/Gallopsled/pwntools.git
synced 2026-10-12 02:02:27 +00:00
70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
"""Describes a way to submit a key to a key server.
|
|
"""
|
|
import os
|
|
|
|
from pwnlib.args import args
|
|
from pwnlib.log import getLogger
|
|
from pwnlib.tubes.remote import remote
|
|
|
|
env_server = args.get('FLAG_HOST', 'flag-submission-server').strip()
|
|
env_port = args.get('FLAG_PORT', '31337').strip()
|
|
env_file = args.get('FLAG_FILE', '/does/not/exist').strip()
|
|
env_exploit_name = args.get('EXPLOIT_NAME', 'unnamed-exploit').strip()
|
|
env_target_host = args.get('TARGET_HOST', 'unknown-target').strip()
|
|
env_team_name = args.get('TEAM_NAME', 'unknown-team').strip()
|
|
|
|
log = getLogger(__name__)
|
|
|
|
def submit_flag(flag,
|
|
exploit=env_exploit_name,
|
|
target=env_target_host,
|
|
server=env_server,
|
|
port=env_port,
|
|
team=env_team_name):
|
|
"""
|
|
Submits a flag to the game server
|
|
|
|
Arguments:
|
|
flag(str): The flag to submit.
|
|
exploit(str): Exploit identifier, optional
|
|
target(str): Target identifier, optional
|
|
server(str): Flag server host name, optional
|
|
port(int): Flag server port, optional
|
|
team(str): Team identifier, optional
|
|
|
|
Optional arguments are inferred from the environment,
|
|
or omitted if none is set.
|
|
|
|
Returns:
|
|
A string indicating the status of the key submission,
|
|
or an error code.
|
|
|
|
Doctest:
|
|
|
|
>>> l = listen()
|
|
>>> _ = submit_flag('flag', server='localhost', port=l.lport)
|
|
>>> c = l.wait_for_connection()
|
|
>>> c.recvall().split()
|
|
[b'flag', b'unnamed-exploit', b'unknown-target', b'unknown-team']
|
|
"""
|
|
flag = flag.strip()
|
|
|
|
log.success("Flag: %r" % flag)
|
|
|
|
data = "\n".join([flag,
|
|
exploit,
|
|
target,
|
|
team,
|
|
'']).encode('ascii')
|
|
|
|
if os.path.exists(env_file):
|
|
write(env_file, data)
|
|
return
|
|
|
|
try:
|
|
with remote(server, int(port)) as r:
|
|
r.send(data)
|
|
return r.recvall(timeout=1)
|
|
except Exception:
|
|
log.warn("Could not submit flag %r to %s:%s", flag, server, port)
|