Skip to content

Commit 5205eb8

Browse files
committed
Allow verify script to change docker env
1 parent 7e5b0d6 commit 5205eb8

1 file changed

Lines changed: 7 additions & 6 deletions

File tree

pwnshop/environments/docker_env.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
class docker_process(pwnlib.tubes.process.process):
1010
def __init__(
1111
self, argv=None,
12-
container_name=None, user=None, work_dir=None, suffix="",
12+
container_name=None, user=1000, work_dir=None, suffix="",
1313
shell=False, executable=None, cwd=None, env=None, aslr=None, setuid=None, alarm=None,
1414
**kwargs
1515
):
@@ -22,9 +22,8 @@ def __init__(
2222
work_dir = work_dir or tempfile.mkdtemp()
2323
self.container_name = container_name
2424

25-
2625
docker_cmd = [
27-
"docker", "exec", *(["-u", str(user)] if user is not None else []), "-i", "-w", cwd or work_dir, self.container_name, "/bin/bash"
26+
"docker", "exec", "-u", str(user), "-i", "-w", cwd or work_dir, self.container_name, "/bin/bash"
2827
]
2928
super().__init__(docker_cmd, **kwargs)
3029

@@ -33,8 +32,8 @@ def __init__(
3332
kstr = k.decode('latin1') if type(k) is bytes else k
3433
with open(f"{work_dir}/.pwnshop-env-var", "wb") as o:
3534
o.write(v.encode('latin1') if type(v) is str else v)
36-
self.sendline(f"read {kstr} < {work_dir}/.pwnshop-env-var; export {kstr}; echo")
37-
self.readline()
35+
self.sendline(f"read {kstr} < {work_dir}/.pwnshop-env-var; export {kstr}")
36+
self.clean()
3837
os.unlink(f"{work_dir}/.pwnshop-env-var")
3938

4039
assert not self.clean()
@@ -60,6 +59,9 @@ def kill(self):
6059
def __exit__(self, *args, **kwargs):
6160
super().__exit__(*args, **kwargs)
6261
self.kill()
62+
63+
def run_shell(self, command, **kwargs):
64+
return pwnlib.tubes.process.process(f"docker exec -u root {self.container_name} {command}", shell=True).readall()
6365

6466
class DockerEnvironment(Environment):
6567
def __init__(self, image, work_dir=None):
@@ -82,7 +84,6 @@ def start(self):
8284
self.container = client.containers.run(
8385
img + ':' + tag,
8486
'sleep 300',
85-
user="0",
8687
auto_remove=True,
8788
detach=True,
8889
cap_add=["SYS_PTRACE"],

0 commit comments

Comments
 (0)