SysReptor Documentation

repository·main·Indexed 25 days ago

https://github.com/syslifters/sysreptor

A pentest reporting platform for creating customizable reports using HTML and Markdown with PDF rendering. Documentation covers self-hosted and cloud deployment, LanguageTool spellcheck customization, and the plugin system. Includes guides for enabling and configuring plugins such as Jira, CyberChef, GraphQL Voyager, Markdown Export, Project Number, and Customize Theme.

Tokens
73.4K
Snippets
160
Records
395
Agent score
82%

What's inside SysReptor

  1. Overview of Sysreptor Pentest Reporting

    main

    Sysreptor is a platform designed to simplify pentest reporting through a workflow of custom design, Markdown writing, and PDF rendering.

    Key capabilities include:

    • Customizable Reports: Design report layouts using HTML.
    • Markdown Writing: Write report content using Markdown for an efficient workflow.
    • PDF Rendering: Render completed reports and download them as PDF files.
    • Flexible Deployment: The platform can be used via a Cloud service or through Self-Hosted deployment.
  2. Overview of SysReptor

    main
    SysReptor is a customizable pentest reporting platform tailored for penetration testers, red teamers, and cybersecurity professionals. It allows users to design reports using HTML, write content in Markdown, and render the final output to PDF. The platform can be deployed as a self-hosted instance or used via the Cloud version.
  3. Compare OSCP reporting tools

    main

    When preparing for the OSCP exam, you can choose from several reporting workflows:

    • SysReptor Online: A cloud-based reporting service tailored for OSCP reports designed to minimize reporting effort.
    • SysReptor Self-Hosted: A local deployment option for those who prefer to run everything on their own infrastructure without cloud dependency.
    • Microsoft Word: Using official templates provided by OffSec.
    • Markdown to LaTeX: Compiling markdown files using pandoc and noraj's LaTeX-template. This can be compiled online via Overleaf.
    • Dradis: Using the OSCP Exam Report Kit from Dradis (most functionality is available in Dradis Professional).
  4. Version History in Exports, Archiving, and Backups

    main

    Version history is handled differently depending on the data operation:

    • Exports: Version history is not included in exports (e.g., when exporting a project) to prevent sensitive information leaks and reduce file size. Re-importing an exported project will result in a project without version history.
    • Encrypted Archiving: If projects are archived, the version history is deleted.
    • Backups: Version history is included in backups. If a backup is restored, the version history is also restored.
  5. Define helper functions and variables in templates

    main

    While not officially supported by Vue, you can define helper functions, variables, and computed properties within a template by assigning values to them inside inline JavaScript expressions. This is typically done at the start of a template inside a hidden element (e.g., <div v-show="false">).

    Common patterns:

    • Helper Functions: {{ myFunc = (arg) => arg + 1 }}
    • Variables: {{ myVar = 'some value' }}
    • Computed Properties: {{ myComputed = computed(() => ... ) }}

    Warning: This is a workaround. Use it sparingly for logic that is difficult to express with standard template syntax, such as complex multi-language translation tables.

    <div v-show="false"> 
      <!-- Simple helper functions -->
      {{ helperFunction = function() {
        return report.title + ' processed by helper function';
      } }}
      {{ calculateCustomScore = (finding) => finding.exploitability * finding.impact }}
    
      <!-- Variables and computed properties -->
      {{ helperVariable = 'Helper variable' }}
      {{ computedProperty = computed(() => report.title + ' processed by computed property') }}
    
      <!-- Complex helper function for translation -->
      {{ tr = function (label, options = undefined) {
        const translations = {
          'en': { example: 'Example', fallback: 'Fallback value' },
          'de': { example: 'Beispiel' },
          'fr': { example: 'exemple' },
        };
        const translationFallback = translations['en'];
        const lang = (options?.lang || document.documentElement.getAttribute('lang'))?.split('-')?.[0];
    
        if (!lang || !translations[lang]) {
          const msg = `Language "${lang}" not defined in the design's translation table`;
          console.warn(msg, { message: 'Translation not defined', details: msg });
        } else if (!(label in translations[lang])) {
          const msg = `Translation for "${label}" is not defined in translation table for language "${lang}"`;
          console.warn(msg, { message: 'Translation not defined', details: msg });
        }
    
        return translations[lang]?.[label] ?? translationFallback[label] ?? '';
      } }}
    </div>
    <div>
      Call helper function: {{ helperFunction() }}<br>
      Call helper function with args: {{ calculateCustomScore(report.findings[0]) }}<br>
      Use helper variable: {{ helperVariable }}<br>
      Use computed property: {{ computedProperty.value }}<br>
      Call translation function: {{ tr('example') }}<br>
    </div>
  6. Core components of the SysReptor architecture

    main

    The self-hosted SysReptor architecture consists of several interconnected components:

    • SysReptor App: A Python/Django application (using Django Rest Framework) that manages application logic, permissions, and data handling. It also performs PDF rendering using a headless Chromium browser and Weasyprint.
    • PostgreSQL: The persistent database used for storing all application data.
    • Redis: An in-memory database used for temporary data, such as synchronizing activities between users for collaborative report editing.
    • S3 Bucket (Optional): Used for storing uploaded images and files. By default, files are stored in the SysReptor app container.
    • LanguageTool (Optional): A container providing a web API for spell checking, used by SysReptor Professional users.
    • Web Server: A reverse proxy (like Caddy) that handles TLS and forwards requests to the App.
  7. Understand template fields

    main

    Template fields are designed to be independent of specific designs, ensuring they can be used across projects with different configurations.

    Field Availability:

    • Predefined Fields: Includes standard fields like title, cvss, description, recommendation, impact, and summary.
    • Custom Fields: Any custom fields defined within a specific design are also available in templates.

    Managing Fields in the Editor:

    • Because some fields are design-specific or contain project-specific settings, they may not be relevant when building a general template. You can hide these fields in the template editor to focus on the core content.
    • Markdown Support: Markdown fields in templates support pasting images directly from your clipboard.
  8. Understand Template Injection risks and mitigation

    main

    SysReptor uses server-side rendering for PDF reports, which intentionally allows for template injection. To mitigate the risk of an attacker breaking out of the rendering environment, SysReptor employs sandboxing:

    Cloud Environment

    In the SysReptor cloud, the Chromium process is isolated in a dedicated Kubernetes pod. It receives jobs via RabbitMQ and shuts down after completion. An attacker breaking out of Chromium could prevent the pod from shutting down until a timeout occurs, but they cannot receive further rendering jobs.

    Self-Hosted Environment

    By default, the Chromium process runs as an isolated process within the web application's Docker container. A breakout could potentially compromise the web application.

    Advanced Isolation: You can outsource the rendering process into dedicated Docker containers to improve security. This requires two additional containers:

    1. Chromium
    2. RabbitMQ

    Note: In this custom setup, the Chromium process remains active and can receive further rendering jobs (unlike the cloud setup). This configuration is not used in the standard installation due to resource considerations.

  9. How SysReptor notifications work

    main

    SysReptor uses a notification system to alert users about project events and findings.

    • In-app notifications: Displayed in the web interface menu bar. The menu bar only shows unread notifications.
    • Full history: A complete list of all notifications (including read ones) can be accessed via your user profile.
    • Hiding notifications: You can click the bell icon in the menu bar to temporarily hide notifications to avoid interruptions.
  10. Understand the types of Cross-site scripting (XSS)

    main

    XSS vulnerabilities are categorized by how the malicious script is delivered to the victim's browser:

    • Stored XSS: The most critical type. The attacker places malicious JavaScript directly on the web server (e.g., in a database or comment field). The script executes in the browsers of any users who visit the affected page.
    • Reflected XSS: The attacker lures a user to a crafted link (often via phishing). The malicious script is included in the HTTP request (e.g., as a URL parameter) and is "reflected" back to the user by the web application in its response due to insufficient validation.
    • DOM-based XSS: The vulnerability exists in the client-side code rather than the server-side code. The application's JavaScript insecurely processes data from untrusted sources and writes it to the Document Object Model (DOM) at runtime. Because the processing happens in the browser, these attacks can sometimes bypass server-side security filters.