From 9f10403f7366fbc5abb3a191d0f6170ddcc5d466 Mon Sep 17 00:00:00 2001 From: Martin Gallo Date: Fri, 22 May 2026 14:24:44 -0300 Subject: [PATCH 1/3] Improved example docs and fixed broken links. Sphinx now can check them --- ChangeLog.md | 28 ++++++++-------- docs/conf.py | 9 +++++ docs/dev/index.rst | 2 +- docs/examples/diag.rst | 22 ++++++------- docs/examples/dlmanager.rst | 22 ++++++++++--- docs/examples/enqueue.rst | 22 +++++++++---- docs/examples/gw.rst | 22 ++++++++++++- docs/examples/hdb.rst | 26 ++++++++++++--- docs/examples/igs.rst | 32 ++++++++++++++---- docs/examples/index.rst | 11 +++++++ docs/examples/message_server.rst | 46 ++++++++++++++++---------- docs/examples/router.rst | 56 ++++++++++++++++++++++++-------- docs/index.rst | 4 +-- docs/user/index.rst | 34 +++++++++---------- 14 files changed, 238 insertions(+), 98 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index c7daa3cb..6892397c 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -19,7 +19,7 @@ v0.2.0.dev0 - unreleased - Documentation: Added references to SAP Secure Storage and SSFS research. - `pysap/SAPCredv2.py`: Added subject fields instead of commonName for LPS-enabled credentials ([\#35](https://github.com/OWASP/pysap/issues/35)). Thanks [@rstenet](https://github.com/rstenet)! - `pysap/SAPCredv2.py`: Add support for cipher format version 1 with 3DES ([\#35](https://github.com/OWASP/pysap/issues/35) and [\#37](https://github.com/OWASP/pysap/pull/37)). Thanks [@rstenet](https://github.com/rstenet)! -- `pysap/SAPHDB.py`: Added missing `StatementContextOption` values (see [\#22](https://github.com/SecureAuthCorp/SAP-Dissection-plug-in-for-Wireshark/issues/22)). +- `pysap/SAPHDB.py`: Added missing `StatementContextOption` values (see [\#22](https://github.com/SecureAuthCorp/SAP-Dissection-plug-in-for-Wireshark/pull/22)). v0.1.19 - 2021-04-29 @@ -32,7 +32,7 @@ v0.1.19 - 2021-04-29 - `pysap/SAPHDB.py`: Implementation of GSS-based auth method with Kerberos 5. - `pysap/SAPHDB.py`: Handling of Session Cookie values when found in the `CONNECT` response. - `pysap/SAPRouter.py`: Add support to route string in `SAPRouterNativeProxy` ([\#33](https://github.com/OWASP/pysap/pull/33)). Thanks [@gloomicious](https://github.com/gloomicious)! -- `examples/router_fingerprints.json`: New fingerprints for SAP Router version 7450.34.25.5091. Thanks [@jvis](https://twitter.com/jvis)! +- `examples/router_fingerprints.json`: New fingerprints for SAP Router version 7450.34.25.5091. Thanks [@jvis](https://x.com/jvis)! - `examples/router_portfw.py`: Add support to route string. ([\#33](https://github.com/OWASP/pysap/pull/33)) Thanks [@gloomicious](https://github.com/gloomicious)! - `tests/sapssfs_test.py`: Basic unit tests for the SSFS file format. @@ -67,8 +67,8 @@ v0.1.17 - 2019-11-05 - `bin/pysapcar`: Add cli option to determine output directory when extracting archives with pysapcar ([\#24](https://github.com/OWASP/pysap/pull/24)) Thanks [@okuuva](https://github.com/okuuva)! - `pysap/SAPDiag.py`: Added support bits for SAP GUI 7.50 and SAP NW 7.52 SP01. - `pysap/SAPCAR.py`: Fixed crafting of archive files by defaulting length fields to zero ([\#22](https://github.com/OWASP/pysap/issues/22)) Thanks [@okuuva](https://github.com/okuuva)! -- `pysap/SAPMS.py`: Added the `DPInfo[1-3]` packets for handling specific Message Server `ADM` packets relaying Dispatcher/WP info: `[1-3]` because of tight SAP kernel version dependency. ([\#31](https://github.com/OWASP/pysap/pull/31)) Thanks Mathieu ([@gelim](https://github.com/gelim)) and Dmitry ([@_chipik](https://twitter.com/_chipik))! -- `pysap/SAPRFC.py`: Enhanced with mainly `SAPCPIC*` and `SAPRFXPG*` new packets. ([\#31](https://github.com/OWASP/pysap/pull/31)) Thanks Mathieu ([@gelim](https://github.com/gelim)) and Dmitry ([@_chipik](https://twitter.com/_chipik))! +- `pysap/SAPMS.py`: Added the `DPInfo[1-3]` packets for handling specific Message Server `ADM` packets relaying Dispatcher/WP info: `[1-3]` because of tight SAP kernel version dependency. ([\#31](https://github.com/OWASP/pysap/pull/31)) Thanks Mathieu ([@gelim](https://github.com/gelim)) and Dmitry ([@_chipik](https://x.com/_chipik))! +- `pysap/SAPRFC.py`: Enhanced with mainly `SAPCPIC*` and `SAPRFXPG*` new packets. ([\#31](https://github.com/OWASP/pysap/pull/31)) Thanks Mathieu ([@gelim](https://github.com/gelim)) and Dmitry ([@_chipik](https://x.com/_chipik))! - `pysap/SAPRouter.py`: Fixed padding on SAPRouter client info packets. - `examples/rfc_monitor.py`: Renamed the script to `gw_monitor.py`. - `examples/router_scanner.py`: Add capability to provide a comma separated list of targets/ports to scan. @@ -132,8 +132,8 @@ v0.1.14 - 2017-10-04 Thanks [@gelim](https://github.com/gelim)!. - `examples/ms_dump_param.py`: New example script to list Message Server parameters and check them against a list of expected values ([\#15](https://github.com/OWASP/pysap/pull/15)). Thanks [@iggy38](https://github.com/iggy38)! -- `examples/ms_dos_exploit.py`: New example script to check for [CVE-2017-5997](https://erpscan.com/advisories/erpscan-16-038-sap-message-server-http-remote-dos/) - DoS vulnerability on Message Server and fixed at [SAP Note 2358972](https://launchpad.support.sap.com/#/notes/2358972) +- `examples/ms_dos_exploit.py`: New example script to check for [CVE-2017-5997](https://web.archive.org/web/20180125175227/https://erpscan.com/advisories/erpscan-16-038-sap-message-server-http-remote-dos/) + DoS vulnerability on Message Server and fixed at [SAP Note 2358972](https://me.sap.com/notes/2358972) ([\#10](https://github.com/OWASP/pysap/pull/10)). Thanks [@vah13](https://github.com/vah13) and [@gelim](https://github.com/gelim)! @@ -164,8 +164,8 @@ v0.1.12 - 2016-12-16 - Building and testing in OSX with Travis and Windows with Appveyor. - `pysap/SAPDiagItems.py`: Added default support bits from SAP GUI 7.40 version. - `examples/diag_capturer.py`: Added option to display available capture interfaces. -- `examples/enqueue_dos_exploit.py`: New example script to check for [CVE-2016-4015](https://erpscan.com/advisories/erpscan-16-019-sap-netweaver-enqueue-server-dos-vulnerability/) - DoS vulnerability on Standalone Enqueue Server and fixed at [SAP Note 2258784](https://launchpad.support.sap.com/#/notes/0002258784) +- `examples/enqueue_dos_exploit.py`: New example script to check for [CVE-2016-4015](https://seclists.org/fulldisclosure/2016/Jul/44) + DoS vulnerability on Standalone Enqueue Server and fixed at [SAP Note 2258784](https://me.sap.com/notes/2258784) ([\#6](https://github.com/OWASP/pysap/pull/6)). Thanks [@vah13](https://github.com/vah13)! - `examples/router_fingerprints.json`: Added fingerprints from SAP Router releases 745. @@ -180,8 +180,8 @@ v0.1.11 - 2016-10-12 - `pysap/SAPDiag.py`: Splitted `SBA`/`SFE`/`SLC` fields. - `pysap/SAPDiag.py`: Renamed error flag to error number. - `examples/diag_capturer.py`: Fix imports for running diag capturer example script in Windows. -- `examples/diag_login_brute_force.py`: Added SOLMAN [default](https://www.troopers.de/media/filer_public/37/34/3734ebb3-989c-4750-9d48-ea478674991a/an_easy_way_into_your_sap_systems_v30.pdf) - [credentials](https://launchpad.support.sap.com/#/notes/2293011) and improved reading credentials file. +- `examples/diag_login_brute_force.py`: Added SOLMAN [default](https://troopers.de/media/filer_public/37/34/3734ebb3-989c-4750-9d48-ea478674991a/an_easy_way_into_your_sap_systems_v30.pdf) + [credentials](https://me.sap.com/notes/2293011) and improved reading credentials file. v0.1.10 - 2016-03-25 @@ -191,10 +191,10 @@ v0.1.10 - 2016-03-25 - Added support for handling SAP SAR file formats. - `pysap/SAPCAR.py`: New module for handling SAP SAR file formats. - `extra/dlmanager_decrypt.py`: Example PoC for [decrypting](https://www.coresecurity.com/advisories/sap-download-manager-password-weak-encryption) - [SAP Download Manager](https://support.sap.com/software/download-manager.html) stored passwords. + [SAP Download Manager](https://support.sap.com/en/my-support/software-downloads.html) stored passwords. - `examples/dlmanager_infector.py`: Example script to open a SAP SAR archive file and infect it by adding files with arbitrary filenames (e.g. including absolute or relative paths). It can be also used as a - [mitmproxy](https://mitmproxy.org/) script for on-the-fly infecting SAR files being downloaded. + [mitmproxy](https://www.mitmproxy.org/) script for on-the-fly infecting SAR files being downloaded. v0.1.9 - 2016-02-08 @@ -214,7 +214,7 @@ v0.1.8 - 2015-10-29 - Enabled travis containers for more quick builds. - Minor documentation and README improvements. - `pysap/SAPRouter.py`: Documented some version numbers from old releases ([\#3](https://github.com/OWASP/pysap/pull/3)). Thanks [invisiblethreat](https://github.com/invisiblethreat)! -- `pysapcompress/vpa108csulzh.cpp`: Improved the fix for CVE-2015-2278 by properly initializing arrays ([\#4](https://github.com/OWASP/pysap/pull/4)). Thanks [ret5ret](https://github.com/ret5ret)! +- `pysapcompress/vpa108csulzh.cpp`: Improved the fix for CVE-2015-2278 by properly initializing arrays ([\#4](https://github.com/OWASP/pysap/pull/4)). Thanks [ret5et](https://github.com/ret5et)! - `examples/diag_render_login_screen.py`: Fail gracefully if `wx` is not found. - `examples/router_password_check.py`: Updating the `fau_timer` library in use and failing gracefully if it's not found. - `examples/router_fingerprint.py`: New example script for performing fingerprint over SAP Router versions. @@ -257,7 +257,7 @@ v0.1.5 - 2015-01-16 - `pysap/SAPDiag.py`: Diag item lookup now support looking up multiple items, and string lookups. - `pysap/SAPDiagClient.py`: Added support for specifying support bits when connecting, support for routing via SAP Router. - `pysap/SAPDiagClient.py`: If no terminal is supplied, use a random looking IP by default to avoid identification - ([SAP Note 1497445](https://launchpad.support.sap.com/#/notes/1497445)). + ([SAP Note 1497445](https://me.sap.com/notes/1497445)). - `pysap/SAPDiagItems.py`: Fixes on some atom items for old versions. - `pysap/SAPEnqueue.py`: Added trace max file size field. - `pysap/SAPNI.py`: Added helpers for creating new connections. diff --git a/docs/conf.py b/docs/conf.py index cf7520dd..66d659dc 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -87,6 +87,15 @@ def skip_scapy_iface_reload(self): # This pattern also affects html_static_path and html_extra_path . exclude_patterns = [u'_build', 'Thumbs.db', '.DS_Store', '**.ipynb_checkpoints'] +# Some reader-facing references are behind login pages or bot-protection +# challenges and cannot be validated reliably by Sphinx linkcheck. +linkcheck_ignore = [ + r'https://me\.sap\.com/notes/.*', + r'https://support\.sap\.com/content/dam/.*', + r'https://www\.coresecurity\.com/.*', + r'https://www\.wxpython\.org/.*', +] + # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' diff --git a/docs/dev/index.rst b/docs/dev/index.rst index f3da9406..3af4ad05 100644 --- a/docs/dev/index.rst +++ b/docs/dev/index.rst @@ -48,7 +48,7 @@ Notebooks Documentation include a graphical representation of the most commonly used protocol packets and file formats. This graphical representations are built using `Scapy `_, -`The Jupyter Notebook `_ , `nbconvert `_ and +`The Jupyter Notebook `_ , `nbconvert `_ and `nbsphinx `_. Jupyter notebooks containing the protocol packets' representation can be diff --git a/docs/examples/diag.rst b/docs/examples/diag.rst index 61303daf..76ccacbc 100644 --- a/docs/examples/diag.rst +++ b/docs/examples/diag.rst @@ -16,14 +16,14 @@ denote password or other sensitive fields that should be masked by the SAP GUI. ``diag_dos_exploit`` -------------------- -This example script can be used to tests against Denial of Service vulnerabilities affecting the +This example script can be used to test against Denial of Service vulnerabilities affecting the Dispatcher service. Currently 5 different vulnerabilities can be triggered: -- `CVE-2012-2612 `_ -- `CVE-2012-2511 `_ -- `CVE-2012-2512 `_ -- `CVE-2012-2513 `_ -- `CVE-2012-2514 `_ +- `CVE-2012-2612 `_ +- `CVE-2012-2511 `_ +- `CVE-2012-2512 `_ +- `CVE-2012-2513 `_ +- `CVE-2012-2514 `_ ``diag_interceptor`` @@ -41,17 +41,17 @@ them. -------------------------- This example script can be used to perform a brute force attack against a SAP Netweaver -application server. The scripts performs a login through the Diag protocol, by submitting +application server. The script performs a login through the Diag protocol, by submitting username and passwords to the login screen. It can also be used to discover available clients. Usernames, passwords and SAP clients to test can be provided as individual files (using -``--usernames``, ``--passwords`` and ``--clients`` command line options), in which case the +``--usernames``, ``--passwords`` and ``--client`` command line options), in which case the script will calculate and test the combination of those, or provided in a credentials file (via the ``--credentials`` parameter). The credential file is expected to have a format containing ``username:password:client`` and blank lines or lines starting with the ``#`` are ignored. -Clients discovery can be also performed as a firs step of the brute-force attack, by specifying +Client discovery can also be performed as a first step of the brute-force attack, by specifying the ``--discovery`` option and providing a list of clients to test using the ``--discovery-range`` parameter. @@ -70,12 +70,12 @@ with care and at your own risk. Finally, the ``login/show_detailed_errors`` parameter can be configured to ``FALSE`` in the SAP Application Server to avoid disclosing information about whether a client exists or not, and to avoid returning information about existent users. For more information see -`SAP Security Note 1823687 `_. +`SAP Security Note 1823687 `_. If the parameter is configured to ``FALSE``, the results of the discovery will be flawed, with probably a large set (if not all) of clients invalidly reported as existent. The same false positives will be reported for user names validity. The finding of valid credentials is not -affected thought. +affected though. ``diag_login_screen_info`` diff --git a/docs/examples/dlmanager.rst b/docs/examples/dlmanager.rst index 134b8b2a..32a79273 100644 --- a/docs/examples/dlmanager.rst +++ b/docs/examples/dlmanager.rst @@ -6,7 +6,7 @@ Download Manager scripts ``dlmanager_decrypt`` --------------------- -This example script extract SAP's Download Manager stored passwords. For SAP Download Manager +This example script extracts SAP Download Manager stored passwords. For SAP Download Manager versions before ``2.1.140a``, stored passwords were kept unencrypted. For versions between ``2.1.140a`` and ``2.1.142``, the script should be able to decrypt the password given possible to obtain the machine serial number. @@ -18,9 +18,17 @@ The script can attempt to retrieve the machine serial number when running on Win provided with the ``--retrieve-serial-number`` option. For other platforms it must need to be provided by the ``--serial-number`` parameter. +Example usage: + +.. code-block:: console + + $ examples/dlmanager_decrypt.py -f dlmanager.conf + $ examples/dlmanager_decrypt.py -f dlmanager.conf --encrypted --serial-number + $ examples/dlmanager_decrypt.py -f dlmanager.conf --encrypted --retrieve-serial-number + For more details on the encryption mechanism see -`CVE-2016-3685 `_ and -`CVE-2016-3684 `_ documented in the +`CVE-2016-3685 `_ and +`CVE-2016-3684 `_ documented in the `SAP Download Manager Password Weak Encryption security advisory `_. @@ -36,5 +44,11 @@ In that case, the scripts takes the files to inject as parameters, performs an ` MitM and when identifies a ``SAR`` file that is going to be offered as a download it infects it. For more details about the exemplified attack vector see the `Deep-dive into SAP -archive file formats `_ +archive file formats `_ presentation at Troopers' 2016. + +Example usage for a local SAR archive: + +.. code-block:: console + + $ examples/dlmanager_infector.py -f package.SAR payload.sh usr/sap/payload.sh diff --git a/docs/examples/enqueue.rst b/docs/examples/enqueue.rst index 9da96dc4..64139033 100644 --- a/docs/examples/enqueue.rst +++ b/docs/examples/enqueue.rst @@ -6,10 +6,10 @@ Enqueue Example scripts ``enqueue_dos_exploit`` ----------------------- -This example script can be used to tests against a Denial of Service vulnerability affecting -the Enqueue service (`CVE-2016-4015 `_). +This example script can be used to test against a Denial of Service vulnerability affecting +the Enqueue service (`CVE-2016-4015 `_). For more details about the vulnerability see -`ERPScan's Security Advisory `_. +`ERPScan's Security Advisory mirror `_. This example script was contributed by `Vahagn Vardanyan `_. @@ -18,8 +18,18 @@ This example script was contributed by `Vahagn Vardanyan -p 3200 --script enqueue_commands.txt diff --git a/docs/examples/gw.rst b/docs/examples/gw.rst index 14956a54..6f2b58f3 100644 --- a/docs/examples/gw.rst +++ b/docs/examples/gw.rst @@ -6,4 +6,24 @@ Gateway Example scripts ``gw_monitor`` -------------- -XXX +This script is an example implementation of SAP's Gateway monitor program +(``gwmon``). It allows monitoring a Gateway service and sending admin commands +and opcodes through a console-like interface. Some commands require the Gateway +service to allow monitor access. + +The monitor connects to the target Gateway with ``--remote-host`` and +``--remote-port`` (default ``3300``), or through a SAP Router route string with +``--route-string``. The Gateway protocol version can be selected with +``--version`` and defaults to ``3``. The client name sent by the monitor can be +changed with ``--client``. + +The script can write packet logs with ``--log-file`` and console output with +``--console-log``. It can also execute commands from a file with ``--script``. +After connecting, run ``help`` inside the console to list the implemented +commands. + +Example usage: + +.. code-block:: console + + $ examples/gw_monitor.py -d -p 3300 --client pysap-monitor --log-file gw.log diff --git a/docs/examples/hdb.rst b/docs/examples/hdb.rst index df429d05..8adbf779 100644 --- a/docs/examples/hdb.rst +++ b/docs/examples/hdb.rst @@ -6,19 +6,26 @@ HANA SQL Command Network Protocol Example scripts ``hdb_discovery`` ----------------- -This example script can be used to perform discovery of HANA database tenants. The scripts connects +This example script can be used to perform discovery of HANA database tenants. The script connects to a given HANA instance, usually the ``SYSTEMDB``, and tries a list of tenant database names. The list can be provided either directly from the command line or from a file, and the script will return the result from sending a ``DBCONNECTINFO`` packet. If the database tenant exists, it will include the IP address and the port number, in addition to whether the tenant is connected to the master index server or not. +Example usage: + +.. code-block:: console + + $ examples/hdb_discovery.py -d -p 39013 -t SYSTEMDB,TENANT1 -o tenants.json + $ examples/hdb_discovery.py -d -p 39013 --dictionary tenants.txt --tls --tls-check-hostname + ``hdb_auth`` ------------ This example script is an experimental implementation of the HANA's ``hdbsql`` tool. It focuses on -the authentication and connection to the HANA server, and it't not meant to implement the full +the authentication and connection to the HANA server, and it is not meant to implement the full capabilities offered by ``hdbsql`` or any other HDB client interface. The supported authentication mechanisms are: @@ -34,7 +41,18 @@ The supported authentication mechanisms are: In addition, the connection can optionally be established using ``TLS``. When ``TLS`` is enabled, by default the server's certificate is trusted and hostname validation is not performed. Those -options can be enabled using the ``--tls-no-trust-cert`` and ``--tls-check-hostname`` parameter. -The tool will make its try to use the operative system certificate store, as available to +options can be enabled using the ``--tls-no-trust-cert`` and ``--tls-check-hostname`` parameters. +The tool will try to use the operating system certificate store, as available to Python's ``ssl`` library, but a custom certificate file can be provided via the ``--tls-cert-file`` parameter. + +Example usage: + +.. code-block:: console + + $ examples/hdb_auth.py -d -p 39015 -m SCRAMSHA256 --username SYSTEM --password + $ examples/hdb_auth.py -d -p 39015 -m JWT --username --jwt-file token.jwt + $ examples/hdb_auth.py -d -p 39015 -m JWT --username --jwt-key private.key --jwt-issuer + $ examples/hdb_auth.py -d -p 39015 -m SAML --saml-assertion assertion.xml + $ examples/hdb_auth.py -d -p 39015 -m SessionCookie --username --session-cookie + $ examples/hdb_auth.py -d -p 39015 --tls --tls-no-trust-cert --tls-cert-file server.pem --tls-check-hostname -m SCRAMPBKDF2SHA256 --username --password diff --git a/docs/examples/igs.rst b/docs/examples/igs.rst index 253f62d6..dac307f0 100644 --- a/docs/examples/igs.rst +++ b/docs/examples/igs.rst @@ -6,28 +6,48 @@ Internet Graphic Service Example scripts ``igs_http_imgconv`` -------------------- -This example script demonstrate the use of the ``IGS`` interpreter ``IMGCONV`` through HTTP +This example script demonstrates the use of the ``IGS`` interpreter ``IMGCONV`` through HTTP listener to convert a provided ``jpg`` file to the ``png`` format with a 100x100 size. +The input image defaults to ``poc.jpg`` and can be changed with ``--image``. + +.. code-block:: console + + $ examples/igs_http_imgconv.py -d -p 40080 --image input.jpg ``igs_http_xmlchart`` --------------------- -This example script demonstrate the use of the ``IGS`` interpreter through HTTP listener +This example script demonstrates the use of the ``IGS`` interpreter through HTTP listener to generate a simple chart. The input of the chart is provided in ``XML`` format and the script will print the generated charts' URLs. +.. code-block:: console + + $ examples/igs_http_xmlchart.py -d -p 40080 + ``igs_http_zipper`` ------------------- -This example script demonstrate the use of the ``IGS`` interpreter ``ZIPPER`` through HTTP +This example script demonstrates the use of the ``IGS`` interpreter ``ZIPPER`` through HTTP listener to compress an input file to a ``zip`` file. The script will print the generated -``zip`` files URLs. +``zip`` files URLs. The input file defaults to ``poc.txt`` and can be changed with ``-i``. +Use ``-a`` to choose the path stored inside the generated archive. + +.. code-block:: console + + $ examples/igs_http_zipper.py -d -p 40080 -i input.txt -a docs/input.txt ``igs_rfc_zipper`` ------------------ -This example script demonstrate the use of the ``IGS`` interpreter ``ZIPEER`` through RFC -listener to compress an input file to a ``zip`` file. +This example script demonstrates the use of the ``IGS`` interpreter ``ZIPPER`` through RFC +listener to compress an input file to a ``zip`` file. The input file defaults to ``poc.txt`` +and can be changed with ``-i``. Use ``-a`` to choose the path stored inside the generated +archive. + +.. code-block:: console + + $ examples/igs_rfc_zipper.py -d -p 40000 -i input.txt -a docs/input.txt diff --git a/docs/examples/index.rst b/docs/examples/index.rst index bb062d09..d4729bd9 100644 --- a/docs/examples/index.rst +++ b/docs/examples/index.rst @@ -4,6 +4,17 @@ Example scripts =============== This part of the documentation covers the example scripts provided with pysap. +Some examples require the optional dependencies installed with ``pysap[examples]``. +The ``diag_render_login_screen`` example also requires a manual ``wxPython`` +installation, and ``router_password_check`` requires ``fau_timer`` from +``mona-timing-lib`` because those packages are not covered by +``requirements-examples.txt``. + +For practical offline workflows, see the file format notebooks for +:doc:`SAPCAR archive inspection and extraction <../fileformats/SAPCAR>`, +:doc:`SAP Credv2 parsing <../fileformats/SAPCredv2>`, +:doc:`PSE parsing <../fileformats/SAPPSE>`, and +:doc:`SSFS key/data reads <../fileformats/SAPSSFS>`. .. toctree:: diff --git a/docs/examples/message_server.rst b/docs/examples/message_server.rst index 513736e6..f56d65cf 100644 --- a/docs/examples/message_server.rst +++ b/docs/examples/message_server.rst @@ -9,23 +9,22 @@ Message Server Example scripts This example script changes a parameter using SAP Message Server Administration requests. In order to be able to change a parameter the Message Server should be configured in monitoring mode -(``ms/monitor=1``, see corresponding `help `_ -for more details) and the internal port should be reachable. Keep in mind that some of the +(``ms/monitor=1``) and the internal port should be reachable. Keep in mind that some of the parameters are not "dynamic" and can't be changed using this method. If the parameter value is not -specified, the script retrieve the current value. +specified, the script retrieves the current value. ``ms_dos_exploit`` ------------------ -This example script can be used to tests a Denial of Service vulnerability -affecting the Message Server (`CVE-2017-5997 <://cve.mitre.org/cgi-bin/cvename.cgi?name=2017-5997>`_). +This example script can be used to test a Denial of Service vulnerability +affecting the Message Server (`CVE-2017-5997 `_). For more details about the vulnerability see -`ERPScan's Security Advisory `_ -and SAP `Security Note 2358972 `_. +`ERPScan's Security Advisory `_ +and SAP `Security Note 2358972 `_. This example script was contributed by `Vahagn Vardanyan `_ and -`Mathieu Geli `_. +`Mathieu Geli `_. ``ms_dump_info`` @@ -152,12 +151,12 @@ The supported check types are: * ``REGEX``: The parameter is compared against a regular expression and expected to be matched. -A set of of default recommended values is provided in ``examples/list_sap_parameters`` but each user should create their +A set of default recommended values is provided in ``examples/list_sap_parameters`` but each user should create their own set of expected values. The script can be used then to create a baseline configuration and automate the validation of a set of Application Servers against it. It's worth noting that due to the way parameters are stored and made available to the Message Server service there might be false positives. Additionally, configuration stored in external files (e.g. ACL files, ``secinfo``, ``reginfo``) need to be checked by other means as the script will only point out -the location of the file but not it's content. Other ``dump`` commands might be helpful as to obtain those values +the location of the file but not its content. Other ``dump`` commands might be helpful as to obtain those values programmatically, check the output of ``ms_dump_info`` for more details. The following is an example result of running the command: @@ -240,7 +239,7 @@ The script's output will contain a ``[+]`` mark if the value obtained from the M in the provided file or a ``[!]`` mark if that's not the case. Other parameters not checked will have an empty mark ``[ ]``. -This example script was contributed by `Ivan Genuer `_. The recommended values and +This example script was contributed by `Ivan Genuer `_. The recommended values and parameters related to the Gateway and Message Server services were obtained from the `May 2019 Security Notes Webinar `_ by Frank Buchholz. @@ -257,14 +256,14 @@ Dialog instance server. ``ms_listener`` --------------- -This example script connects with the Message Server service and listen for messages coming -from the server. Along with the ``ms_messenger`` script, it can be used as an example for +This example script connects with the Message Server service and listens for messages coming +from the server. Along with the ``ms_messager`` script, it can be used as an example for using the Message Server as a messenger service and send packets from one client to another connected to the service. -``ms_messenger`` ----------------- +``ms_messager`` +--------------- This example script connects with the Message Server service and sends a message to another client connected to it. Along with the ``ms_listener`` script, it can be used as an example @@ -277,11 +276,22 @@ another connected to the service. This script is an example implementation of SAP's Message Server Monitor program (``msmon``). It allows the monitoring of a Message Server service and allows sending different commands and -opcodes. Includes some commands not available on the ``msmon`` program. Some commands requires the -server running in monitor mode, while most of them requires access to the Message Server internal port. +opcodes. It includes some commands not available on the ``msmon`` program. Some commands require the +server to run in monitor mode, while most of them require access to the Message Server internal port. The script implements a console-like interface that can be used to specify the operations to -perform on the Message Server. A list of implemented commands can be obtained by running ``help``. +perform on the Message Server. It connects with ``--remote-host`` and ``--remote-port`` (default +``3900``), or through a SAP Router route string with ``--route-string``. The domain can be selected +with ``--domain`` and the client name can be changed with ``--client``. Packet logs can be written +with ``--log-file``, console output can be written with ``--console-log``, and commands can be loaded +from a file with ``--script``. A list of implemented commands can be obtained by running ``help`` +inside the console. + +Example usage: + +.. code-block:: console + + $ examples/ms_monitor.py -d -p 3900 --domain ABAP --script ms_commands.txt ``ms_observer`` diff --git a/docs/examples/router.rst b/docs/examples/router.rst index 66816008..6b201bb4 100644 --- a/docs/examples/router.rst +++ b/docs/examples/router.rst @@ -9,10 +9,10 @@ Router Example scripts This example script connects to a SAP Router instance and allows to perform administrative tasks. The commands available and their syntax is similar to the one found on the ``saprouter`` program. The operation codes and commands are documented in the SAP's help pages for the SAP Router. -In addition to those commands found in the ``saprouter`` program, the scripts includes undocumented -operations codes. +In addition to those commands found in the ``saprouter`` program, the script includes undocumented +operation codes. -In order for administrative tasks to be run, the script need to be run from the same system where the +In order for administrative tasks to be run, the script needs to be run from the same system where the SAP Router instance is running (connections identified as "local" by the Network Interface (``NI``) protocol), or the SAP Router needs to be configured as to allow remote connections to the SAP Router port. An example of such a routing table to allow this access is as follows: @@ -40,7 +40,7 @@ processing certain type of malformed packets or when certain fault situations ar information contained in those error messages includes details such as the SAP Router's release number, name of the source code file where the error is thrown, and in some cases the code line where the error was identified. As the source file numbers are frequently changing between one -version of the program an another, it can be very precise as to potentially identify build +version of the program and another, it can be very precise as to potentially identify build numbers and pinpoint particular version numbers. This information can be valuable as to determine potential security risk in case of running old and potentially vulnerable versions of the SAP Router service. @@ -120,7 +120,7 @@ not found in the database: [-] Request: Empty route null offset [-] Request: No route invalid length - [-] Some error values where not found in the fingerprint database. If you want to contribute submit a issue to https://github.com/OWASP/pysap or write an email to mgallo@secureauth.com with the following information along with the SAP Router file information and how it was configured. + [-] Some error values were not found in the fingerprint database. If you want to contribute, submit an issue to https://github.com/OWASP/pysap or write an email to mgallo@secureauth.com with the following information along with the SAP Router file information and how it was configured. New fingerprint saved to: saprouter_new_fingerprints.json @@ -152,7 +152,7 @@ database: > "submitted_by": "email or contact of the submitter", > "update_level": "update level", > "patch_number": "patch number", - > "file_version": "file vesion", + > "file_version": "file version", > "platform": "linux_x86_64", > "source_id": "source id number" > }' @@ -180,13 +180,21 @@ database. ``router_niping`` ----------------- -This example scripts is a very basic implementation of the ``niping`` tool available with SAP kernel +This example script is a very basic implementation of the ``niping`` tool available with SAP kernel distributions and the ``saprouter`` program. The ``niping`` utility establishes a communication between two ends (a "client" and a "server") and uses the ``NI`` protocol to send payloads. The tool is offered as a way to perform troubleshooting and network diagnostics, and it can help determining -network speed and identify connectivity issues. Due to the implementation of the ``NI`` protocol is +network speed and identify connectivity issues. Due to the implementation of the ``NI`` protocol it is also used to validate SAP Router configurations and ACLs. +Example usage: + +.. code-block:: console + + $ examples/router_niping.py --start-server -H 0.0.0.0 -S 3298 + $ examples/router_niping.py --start-client -H -S 3298 -L 10 -B 1000 + $ examples/router_niping.py --start-client --route-string /H//S/3299/H//S/3298 + ``router_password_check`` ------------------------- @@ -195,13 +203,19 @@ This example and proof of concept script connects with a SAP Router service and request using a provided password. It then records the time the remote service takes to respond to the request. Further analysis of the time records could be performed in order to identify whether the server is vulnerable to a timing attack on the password check -(`CVE-2014-0984 `_). +(`CVE-2014-0984 `_). More details about the vulnerability can be found in the `SAP Router Password Timing Attack security advisory `_. -The script make use of the fau_timer library for measuring the timing of server's responses, which +The script makes use of the optional ``fau_timer`` library for measuring the timing of server's responses, which can be installed from the `mona-timing-lib repository in GitHub `_. +Example usage: + +.. code-block:: console + + $ examples/router_password_check.py -d -p 3299 --password --tries 20 -o timings.csv + ``router_portfw`` ----------------- @@ -215,7 +229,14 @@ A route password can be optionally provided as well (with the ``--target-pass`` The script can be used to route traffic to a remote destination through the SAP Router, for either testing ACLs or accessing internal resources exposed through it. It's worth mentioning that as the implementation relies on the use of a "proxy" pattern, the route is only requested to the SAP Router -when there's traffic received on the local port binded. +when there's traffic received on the bound local port. + +Example usage: + +.. code-block:: console + + $ examples/router_portfw.py -d -p 3299 -t -r 3200 -a 127.0.0.1 -l 3200 + $ examples/router_portfw.py --route-string /H//S/3299/H//S/3200 -l 3200 The script is based on a similar functionality implemented in BizPloit's ``saprouterNative`` script. More information can be found in Onapsis' blogpost series about testing SAP Router security with @@ -234,11 +255,18 @@ to the SAP Router. The script can be also used to discover and validate ACLs con Router instance. The list of hosts can be provided to the ``--target-hosts`` parameter as a comma-separated list of -hostnames or IP addresses (e.g. ``10.0.0.1,10.0.0.10``), or if the Python's ``netaddr`` library is -installed in ``CIDR`` representation (e.g. ``10.0.0.1/24``). In the same way, the ports to scan for -can be provided in the ``--target-ports`` parameter using a commma-separated list (e.g. ``3200,3300``) +hostnames or IP addresses (e.g. ``10.0.0.1,10.0.0.10``), or in ``CIDR`` representation +(e.g. ``10.0.0.1/24``) when the optional Python ``netaddr`` library is installed. In the same way, +the ports to scan for can be provided in the ``--target-ports`` parameter using a comma-separated list (e.g. ``3200,3300``) or a range (e.g. ``3200-3299``). +Example usage: + +.. code-block:: console + + $ examples/router_scanner.py -d -p 3299 -t -r 3200,3300 + $ examples/router_scanner.py -d -p 3299 -t 10.0.0.0/24 -r 3200-3299 + The script is based on a similar functionality implemented in BizPloit's ``saprouterSpy`` script. More information can be found in Onapsis' blogpost series about testing SAP Router security with BizPloit, `part I `_ diff --git a/docs/index.rst b/docs/index.rst index 706bbbb6..a2798e8e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -7,8 +7,8 @@ Version v\ |release| (:ref:`installation`) Overview -------- -`SAP Netweaver `_ and -`SAP HANA `_ are technology platforms for +`SAP Netweaver `_ and +`SAP HANA `_ are technology platforms for building and integrating SAP business applications. Communication between components uses different network protocols and some services and tools make use of custom file formats as well. While some of them are standard and well-known protocols, others diff --git a/docs/user/index.rst b/docs/user/index.rst index 99093089..53c52b7c 100644 --- a/docs/user/index.rst +++ b/docs/user/index.rst @@ -33,7 +33,7 @@ The following projects, tools and repositories are known to be using pysap: Exploit proof of concept code for ACL misconfigurations in the SAP Gateway that leads to a Remote Command Execution (RCE). -* `John the Ripper's pse2john script `_: +* `John the Ripper's pse2john script `_: Script to export PSE's encryption PIN into a format that can be cracked with John the Ripper. @@ -50,7 +50,7 @@ pysap requires Python 3.10 or newer. Installation with pip ~~~~~~~~~~~~~~~~~~~~~ -Installing pysap is simple with `pip `_, just run the +Installing pysap is simple with `pip `_, just run the following command on a terminal:: $ python3 -m pip install pysap @@ -98,7 +98,7 @@ Scapy installation - For installing `Scapy`_, see the official `installation documentation `_ for each platform: - `Linux `_. - - `macOS `_. + - `macOS `_. - `Windows `_. @@ -123,17 +123,17 @@ Additional information about the protocols and the research can be found at diff * `Hunting crypto secrets in SAP systems `_ -* `Revisiting the Old and Looking at New Potential SAP Vulnerabilities `_ +* `Revisiting the Old and Looking at New Potential SAP Vulnerabilities `_ * Exploring the SAP HANA SQL Command Network Protocol Blog post series: - * `Protocol Basics and Authentication `_ + * `Protocol Basics and Authentication `_ - * `Password-based Authentication and TLS `_ + * `Password-based Authentication and TLS `_ - * `Federated Authentication `_ + * `Federated Authentication `_ -* `SecureAuth Innovation Labs Sheds Light on Protecting Credentials in SAP HANA: The Client Secure User Store `_ +* `SecureAuth Innovation Labs Sheds Light on Protecting Credentials in SAP HANA: The Client Secure User Store `_ And advisories: @@ -155,30 +155,30 @@ And advisories: * `SAP Note Assistant Insecure Handling of SAP Notes Signature Vulnerability `_ -* `SAP HANA SAML Assertion Improper Validation Vulnerability `_ +* `SAP HANA SAML Assertion Improper Validation Vulnerability `_ - * `Associated Blog Post SecureAuth uncovers SAML validation weakness in SAP HANA `_ + * Associated Blog Post SecureAuth uncovers SAML validation weakness in SAP HANA Initial research about the SAP CAR file format was performed by Martin Gallo and published in `Deep-dive into SAP archive file formats `_ -at the `Troopers 2016 Security Conference `_. Additional research was +at the `Troopers 2016 Security Conference `_. Additional research was performed by `Hans-Christian Esperer `_ and published in the `Hascar `_ tool. Documentation on the SAP `SAR `_ archive file format -is available in SAP's `Virus Scan Interface (NW-VSI) `_ +was previously available as SAP's Virus Scan Interface (NW-VSI) specification document specification document. An example implementation can be also found in the `Virus Scan Adapter SDK`, which is available upon request. -Initial research about the ``IGS`` protocol was performed by Yvan Genuer and published in `SAP IGS : The 'vulnerable' forgotten component `_. +Initial research about the ``IGS`` protocol was performed by Yvan Genuer and published in `SAP IGS : The 'vulnerable' forgotten component `_. Additional research about the Message Server (``MS``) and Remote Function Call (``RFC``) protocols was performed by -Dmitry Chastuhin and Mathieu Geli and published in `(SAP) Gateway to Heaven `_. +Dmitry Chastuhin and Mathieu Geli and published in `(SAP) Gateway to Heaven `_. -The specifications of the ``HDB`` protocol are published in the `SAP HANA SQL Command Network Protocol Reference `_ +The specifications of the ``HDB`` protocol are published in the `SAP HANA SQL Command Network Protocol Reference `_ guide. Initial research about the ``SSFS`` file formats and encryption, and the Client Secure Store was performed by Dmitr Chastuhin and Vladimir Egorov and published in a series of blogpost now unavailable, and shared by Dmitry at the Confidence Security Conference 2014 Edition session -"`All your SAP Passwords belong to us `_". -Additional research was also shared by Yvan Genuer and published in "`The security of ‘SAP Secure Storage. `_". +"`All your SAP Passwords belong to us `_". +Additional research was also shared by Yvan Genuer and published in "`The security of ‘SAP Secure Storage. `_". From 24cb1a2f6276b2aed28f02ed1575a6f9218b8a00 Mon Sep 17 00:00:00 2001 From: Martin Gallo Date: Fri, 22 May 2026 14:29:18 -0300 Subject: [PATCH 2/3] Replaced old email with github handle instead --- docs/examples/router.rst | 12 +- examples/router_fingerprint.py | 6 +- examples/router_fingerprints.json | 414 +++++++++++++++--------------- 3 files changed, 216 insertions(+), 216 deletions(-) diff --git a/docs/examples/router.rst b/docs/examples/router.rst index 6b201bb4..4dec91b5 100644 --- a/docs/examples/router.rst +++ b/docs/examples/router.rst @@ -82,7 +82,7 @@ in the database: [+] Request: No route invalid length [*] Probable versions (1): - [*] Hits: 13 Version: version: "40" release: "749" patch_number: "200" source_id: "0.200" update_level: "0" platform: "linux-x86-64" submitted_by: "mgallo@secureauth.com" + [*] Hits: 13 Version: version: "40" release: "749" patch_number: "200" source_id: "0.200" update_level: "0" platform: "linux-x86-64" submitted_by: "@martingalloar" As can be observed, by matching the information in the error message with the fingerprint database @@ -120,7 +120,7 @@ not found in the database: [-] Request: Empty route null offset [-] Request: No route invalid length - [-] Some error values were not found in the fingerprint database. If you want to contribute, submit an issue to https://github.com/OWASP/pysap or write an email to mgallo@secureauth.com with the following information along with the SAP Router file information and how it was configured. + [-] Some error values were not found in the fingerprint database. If you want to contribute, submit an issue to https://github.com/OWASP/pysap/issues with the following information along with the SAP Router file information and how it was configured. New fingerprint saved to: saprouter_new_fingerprints.json @@ -149,7 +149,7 @@ database: $ ./router_fingerprint.py -a --new-fingerprints-file saprouter_new_fingerprints.json -i '{ > "comment": "A new comment to add to the fingerprint", - > "submitted_by": "email or contact of the submitter", + > "submitted_by": "GitHub username of the submitter", > "update_level": "update level", > "patch_number": "patch number", > "file_version": "file version", @@ -172,9 +172,9 @@ database: [*] Added a new entry for the target Empty route null offset [*] Added a new entry for the target No route invalid length -Fingerprints for missing versions can be contributed in the form of GitHub issues reporting the -version and build numbers or in the form of pull requests with the addition of new records to the -database. +Fingerprints for missing versions can be contributed through the GitHub repository as issues +reporting the version and build numbers, or as pull requests with the addition of new records to +the database. ``router_niping`` diff --git a/examples/router_fingerprint.py b/examples/router_fingerprint.py index e44e4a76..a0a0a23f 100755 --- a/examples/router_fingerprint.py +++ b/examples/router_fingerprint.py @@ -310,9 +310,9 @@ def main(): for (target, _) in misses: logging.info("[-] Request: %s" % target) - logging.info("\n[-] Some error values where not found in the fingerprint database. " - "If you want to contribute submit a issue to https://github.com/OWASP/pysap/ " - "or write an email to mgallo@secureauth.com with the following information along " + logging.info("\n[-] Some error values were not found in the fingerprint database. " + "If you want to contribute, submit an issue to " + "https://github.com/OWASP/pysap/issues with the following information along " "with the SAP Router file information and how it was configured.\n") options.new_entries = True diff --git a/examples/router_fingerprints.json b/examples/router_fingerprints.json index fa0a2481..e7c4db92 100644 --- a/examples/router_fingerprints.json +++ b/examples/router_fingerprints.json @@ -14,7 +14,7 @@ "release": "721", "return_code": "-93", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -33,7 +33,7 @@ "release": "720", "return_code": "-93", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -52,7 +52,7 @@ "release": "720", "return_code": "-93", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -71,7 +71,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -90,7 +90,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -109,7 +109,7 @@ "release": "720", "return_code": "-93", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -128,7 +128,7 @@ "release": "720", "return_code": "-93", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -147,7 +147,7 @@ "release": "720", "return_code": "-93", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -166,7 +166,7 @@ "release": "720", "return_code": "-93", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -185,7 +185,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -204,7 +204,7 @@ "release": "721", "return_code": "-93", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -223,7 +223,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -261,7 +261,7 @@ "release": "745", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -280,7 +280,7 @@ "release": "753", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -299,7 +299,7 @@ "release": "749", "return_code": "-93", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -338,7 +338,7 @@ "release": "721", "return_code": "-93", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -357,7 +357,7 @@ "release": "720", "return_code": "-93", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -376,7 +376,7 @@ "release": "720", "return_code": "-93", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -395,7 +395,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -414,7 +414,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -433,7 +433,7 @@ "release": "720", "return_code": "-93", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -452,7 +452,7 @@ "release": "720", "return_code": "-93", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -471,7 +471,7 @@ "release": "720", "return_code": "-93", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -490,7 +490,7 @@ "release": "720", "return_code": "-93", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -509,7 +509,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -528,7 +528,7 @@ "release": "721", "return_code": "-93", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -547,7 +547,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -585,7 +585,7 @@ "release": "745", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -604,7 +604,7 @@ "release": "753", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -623,7 +623,7 @@ "release": "749", "return_code": "-93", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -662,7 +662,7 @@ "release": "721", "return_code": "-93", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -681,7 +681,7 @@ "release": "720", "return_code": "-93", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -700,7 +700,7 @@ "release": "720", "return_code": "-93", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -719,7 +719,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -738,7 +738,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -757,7 +757,7 @@ "release": "720", "return_code": "-93", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -776,7 +776,7 @@ "release": "720", "return_code": "-93", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -795,7 +795,7 @@ "release": "720", "return_code": "-93", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -814,7 +814,7 @@ "release": "720", "return_code": "-93", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -833,7 +833,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -852,7 +852,7 @@ "release": "721", "return_code": "-93", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -871,7 +871,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -909,7 +909,7 @@ "release": "745", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -928,7 +928,7 @@ "release": "753", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -947,7 +947,7 @@ "release": "749", "return_code": "-93", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -986,7 +986,7 @@ "release": "720", "return_code": "-90", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1005,7 +1005,7 @@ "release": "721", "return_code": "-90", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1024,7 +1024,7 @@ "release": "720", "return_code": "-90", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1043,7 +1043,7 @@ "release": "720", "return_code": "-90", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1062,7 +1062,7 @@ "release": "701", "return_code": "-91", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getservbyname", "update_level": "", "version": "38" @@ -1081,7 +1081,7 @@ "release": "701", "return_code": "-91", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -1100,7 +1100,7 @@ "release": "720", "return_code": "-90", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1119,7 +1119,7 @@ "release": "720", "return_code": "-92", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "connect", "update_level": "0", "version": "40" @@ -1138,7 +1138,7 @@ "release": "720", "return_code": "-90", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1157,7 +1157,7 @@ "release": "720", "return_code": "-90", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1176,7 +1176,7 @@ "release": "720", "return_code": "-90", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1195,7 +1195,7 @@ "release": "721", "return_code": "-90", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1214,7 +1214,7 @@ "release": "701", "return_code": "-91", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getservbyname", "update_level": "", "version": "38" @@ -1233,7 +1233,7 @@ "release": "701", "return_code": "-91", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -1271,7 +1271,7 @@ "release": "745", "return_code": "-90", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1290,7 +1290,7 @@ "release": "753", "return_code": "-90", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1309,7 +1309,7 @@ "release": "749", "return_code": "-90", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1348,7 +1348,7 @@ "release": "721", "return_code": "-13", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1367,7 +1367,7 @@ "release": "720", "return_code": "-13", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1386,7 +1386,7 @@ "release": "720", "return_code": "-13", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1405,7 +1405,7 @@ "release": "720", "return_code": "-13", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1424,7 +1424,7 @@ "release": "701", "return_code": "-13", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -1443,7 +1443,7 @@ "release": "720", "return_code": "-13", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1462,7 +1462,7 @@ "release": "720", "return_code": "-13", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1481,7 +1481,7 @@ "release": "720", "return_code": "-13", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1500,7 +1500,7 @@ "release": "720", "return_code": "-13", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1519,7 +1519,7 @@ "release": "720", "return_code": "-13", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1538,7 +1538,7 @@ "release": "721", "return_code": "-13", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1557,7 +1557,7 @@ "release": "701", "return_code": "-13", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -1595,7 +1595,7 @@ "release": "745", "return_code": "-13", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1614,7 +1614,7 @@ "release": "753", "return_code": "-13", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1633,7 +1633,7 @@ "release": "749", "return_code": "-13", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1672,7 +1672,7 @@ "release": "721", "return_code": "-93", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1691,7 +1691,7 @@ "release": "720", "return_code": "-93", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1710,7 +1710,7 @@ "release": "720", "return_code": "-93", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1729,7 +1729,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1748,7 +1748,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -1767,7 +1767,7 @@ "release": "720", "return_code": "-93", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1786,7 +1786,7 @@ "release": "720", "return_code": "-93", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1805,7 +1805,7 @@ "release": "720", "return_code": "-93", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1824,7 +1824,7 @@ "release": "720", "return_code": "-93", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1843,7 +1843,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1862,7 +1862,7 @@ "release": "721", "return_code": "-93", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1881,7 +1881,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -1919,7 +1919,7 @@ "release": "745", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1938,7 +1938,7 @@ "release": "753", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1957,7 +1957,7 @@ "release": "749", "return_code": "-93", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -1996,7 +1996,7 @@ "release": "721", "return_code": "-93", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2015,7 +2015,7 @@ "release": "720", "return_code": "-93", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2034,7 +2034,7 @@ "release": "720", "return_code": "-93", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2053,7 +2053,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2072,7 +2072,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -2091,7 +2091,7 @@ "release": "720", "return_code": "-93", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2110,7 +2110,7 @@ "release": "720", "return_code": "-93", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2129,7 +2129,7 @@ "release": "720", "return_code": "-93", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2148,7 +2148,7 @@ "release": "720", "return_code": "-93", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2167,7 +2167,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2186,7 +2186,7 @@ "release": "721", "return_code": "-93", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2205,7 +2205,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -2243,7 +2243,7 @@ "release": "745", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2262,7 +2262,7 @@ "release": "753", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2281,7 +2281,7 @@ "release": "749", "return_code": "-93", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2320,7 +2320,7 @@ "release": "721", "return_code": "-93", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2339,7 +2339,7 @@ "release": "720", "return_code": "-93", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2358,7 +2358,7 @@ "release": "720", "return_code": "-93", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2377,7 +2377,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2396,7 +2396,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -2415,7 +2415,7 @@ "release": "720", "return_code": "-93", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2434,7 +2434,7 @@ "release": "720", "return_code": "-93", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2453,7 +2453,7 @@ "release": "720", "return_code": "-93", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2472,7 +2472,7 @@ "release": "720", "return_code": "-93", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2491,7 +2491,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2510,7 +2510,7 @@ "release": "721", "return_code": "-93", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2529,7 +2529,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -2567,7 +2567,7 @@ "release": "745", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2586,7 +2586,7 @@ "release": "753", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2605,7 +2605,7 @@ "release": "749", "return_code": "-93", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2644,7 +2644,7 @@ "release": "721", "return_code": "-93", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2663,7 +2663,7 @@ "release": "720", "return_code": "-93", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2682,7 +2682,7 @@ "release": "720", "return_code": "-93", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2701,7 +2701,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2720,7 +2720,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -2739,7 +2739,7 @@ "release": "720", "return_code": "-5", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2758,7 +2758,7 @@ "release": "720", "return_code": "-93", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2777,7 +2777,7 @@ "release": "720", "return_code": "-93", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2796,7 +2796,7 @@ "release": "720", "return_code": "-93", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2815,7 +2815,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2834,7 +2834,7 @@ "release": "721", "return_code": "-93", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2853,7 +2853,7 @@ "release": "721", "return_code": "-5", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2872,7 +2872,7 @@ "release": "701", "return_code": "-5", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -2891,7 +2891,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -2929,7 +2929,7 @@ "release": "745", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2948,7 +2948,7 @@ "release": "753", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -2967,7 +2967,7 @@ "release": "749", "return_code": "-93", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3006,7 +3006,7 @@ "release": "721", "return_code": "-90", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3025,7 +3025,7 @@ "release": "720", "return_code": "-90", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getaddrinfo", "update_level": "0", "version": "40" @@ -3044,7 +3044,7 @@ "release": "720", "return_code": "-90", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3063,7 +3063,7 @@ "release": "721", "return_code": "-90", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getaddrinfo", "update_level": "0", "version": "40" @@ -3082,7 +3082,7 @@ "release": "720", "return_code": "-90", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getaddrinfo", "update_level": "0", "version": "40" @@ -3101,7 +3101,7 @@ "release": "720", "return_code": "-90", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3120,7 +3120,7 @@ "release": "701", "return_code": "-90", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "gethostbyname", "update_level": "", "version": "38" @@ -3139,7 +3139,7 @@ "release": "701", "return_code": "-90", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -3158,7 +3158,7 @@ "release": "720", "return_code": "-90", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getaddrinfo", "update_level": "0", "version": "40" @@ -3177,7 +3177,7 @@ "release": "720", "return_code": "-90", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3196,7 +3196,7 @@ "release": "720", "return_code": "-90", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3215,7 +3215,7 @@ "release": "720", "return_code": "-90", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getaddrinfo", "update_level": "0", "version": "40" @@ -3234,7 +3234,7 @@ "release": "720", "return_code": "-90", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3253,7 +3253,7 @@ "release": "720", "return_code": "-90", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getaddrinfo", "update_level": "0", "version": "40" @@ -3272,7 +3272,7 @@ "release": "720", "return_code": "-90", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3291,7 +3291,7 @@ "release": "721", "return_code": "-90", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getaddrinfo", "update_level": "0", "version": "40" @@ -3310,7 +3310,7 @@ "release": "721", "return_code": "-90", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3329,7 +3329,7 @@ "release": "701", "return_code": "-90", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "gethostbyname", "update_level": "", "version": "38" @@ -3348,7 +3348,7 @@ "release": "701", "return_code": "-90", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -3386,7 +3386,7 @@ "release": "745", "return_code": "-90", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getaddrinfo", "update_level": "0", "version": "40" @@ -3405,7 +3405,7 @@ "release": "745", "return_code": "-90", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3424,7 +3424,7 @@ "release": "753", "return_code": "-90", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getaddrinfo", "update_level": "0", "version": "40" @@ -3443,7 +3443,7 @@ "release": "749", "return_code": "-90", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "getaddrinfo", "update_level": "0", "version": "40" @@ -3482,7 +3482,7 @@ "release": "721", "return_code": "-96", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3501,7 +3501,7 @@ "release": "720", "return_code": "-96", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3520,7 +3520,7 @@ "release": "720", "return_code": "-96", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3539,7 +3539,7 @@ "release": "720", "return_code": "-96", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3558,7 +3558,7 @@ "release": "701", "return_code": "-96", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -3577,7 +3577,7 @@ "release": "720", "return_code": "-96", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3596,7 +3596,7 @@ "release": "720", "return_code": "-96", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3615,7 +3615,7 @@ "release": "720", "return_code": "-96", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3634,7 +3634,7 @@ "release": "720", "return_code": "-96", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3653,7 +3653,7 @@ "release": "720", "return_code": "-96", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3672,7 +3672,7 @@ "release": "721", "return_code": "-96", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3691,7 +3691,7 @@ "release": "701", "return_code": "-96", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -3729,7 +3729,7 @@ "release": "745", "return_code": "-96", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3748,7 +3748,7 @@ "release": "753", "return_code": "-96", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3767,7 +3767,7 @@ "release": "749", "return_code": "-96", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3806,7 +3806,7 @@ "release": "721", "return_code": "-5", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3825,7 +3825,7 @@ "release": "720", "return_code": "-5", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3844,7 +3844,7 @@ "release": "720", "return_code": "-5", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3863,7 +3863,7 @@ "release": "720", "return_code": "-5", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3882,7 +3882,7 @@ "release": "701", "return_code": "-5", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -3901,7 +3901,7 @@ "release": "720", "return_code": "-5", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3920,7 +3920,7 @@ "release": "720", "return_code": "-5", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3939,7 +3939,7 @@ "release": "720", "return_code": "-5", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3958,7 +3958,7 @@ "release": "720", "return_code": "-5", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3977,7 +3977,7 @@ "release": "720", "return_code": "-5", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -3996,7 +3996,7 @@ "release": "721", "return_code": "-5", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4015,7 +4015,7 @@ "release": "701", "return_code": "-5", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -4053,7 +4053,7 @@ "release": "745", "return_code": "-5", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4072,7 +4072,7 @@ "release": "753", "return_code": "-5", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4091,7 +4091,7 @@ "release": "749", "return_code": "-5", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4130,7 +4130,7 @@ "release": "721", "return_code": "-93", "source_id": "0.117", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4149,7 +4149,7 @@ "release": "720", "return_code": "-93", "source_id": "0.401", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4168,7 +4168,7 @@ "release": "720", "return_code": "-93", "source_id": "0.112", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4187,7 +4187,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4206,7 +4206,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -4225,7 +4225,7 @@ "release": "720", "return_code": "-93", "source_id": "0.070", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4244,7 +4244,7 @@ "release": "720", "return_code": "-93", "source_id": "0.046", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4263,7 +4263,7 @@ "release": "720", "return_code": "-93", "source_id": "0.201", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4282,7 +4282,7 @@ "release": "720", "return_code": "-93", "source_id": "0.214", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4301,7 +4301,7 @@ "release": "720", "return_code": "-93", "source_id": "0.411", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4320,7 +4320,7 @@ "release": "721", "return_code": "-93", "source_id": "0.100", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4339,7 +4339,7 @@ "release": "701", "return_code": "-93", "source_id": "", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "", "version": "38" @@ -4377,7 +4377,7 @@ "release": "745", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4396,7 +4396,7 @@ "release": "753", "return_code": "-93", "source_id": "0.023", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" @@ -4415,7 +4415,7 @@ "release": "749", "return_code": "-93", "source_id": "0.200", - "submitted_by": "martin.gallo@gmail.com", + "submitted_by": "@martingalloar", "system_call": "", "update_level": "0", "version": "40" From 3755357318c44bcf94f8b2986700e177f6aa6b05 Mon Sep 17 00:00:00 2001 From: Martin Gallo Date: Thu, 2 Jul 2026 17:22:44 -0300 Subject: [PATCH 3/3] Update example docs for migrated scripts --- docs/examples/router.rst | 6 +++--- docs/user/index.rst | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/examples/router.rst b/docs/examples/router.rst index 4dec91b5..e816865e 100644 --- a/docs/examples/router.rst +++ b/docs/examples/router.rst @@ -55,7 +55,7 @@ in the database: .. code-block:: none - $ python router_fingerprint.py -d + $ examples/router_fingerprint.py -d [*] Loading fingerprint database [*] Trying to fingerprint version using 13 packets [*] (1/13) Fingerprint for packet 'No route one entry' @@ -93,7 +93,7 @@ not found in the database: .. code-block:: none - $ ./router_fingerprint.py -d + $ examples/router_fingerprint.py -d [*] Loading fingerprint database [*] Trying to fingerprint version using 13 packets [*] (1/13) Fingerprint for packet 'No route one entry' @@ -147,7 +147,7 @@ database: .. code-block:: none - $ ./router_fingerprint.py -a --new-fingerprints-file saprouter_new_fingerprints.json -i '{ + $ examples/router_fingerprint.py -a --new-fingerprints-file saprouter_new_fingerprints.json -i '{ > "comment": "A new comment to add to the fingerprint", > "submitted_by": "GitHub username of the submitter", > "update_level": "update level", diff --git a/docs/user/index.rst b/docs/user/index.rst index 53c52b7c..b60959a7 100644 --- a/docs/user/index.rst +++ b/docs/user/index.rst @@ -59,6 +59,7 @@ Some example scripts has additional required libraries: - ``tabulate`` - ``netaddr`` +- ``PyJWT`` - ``requests`` - `wxPython `_ - `fau_timer `_