<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Roman Madaev</title>
    <description>The latest articles on DEV Community by Roman Madaev (@m-o-z-z-i-x).</description>
    <link>https://dev.to/m-o-z-z-i-x</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2985385%2F9cad0e52-d229-46a2-b9b7-80a5a607ee22.jpg</url>
      <title>DEV Community: Roman Madaev</title>
      <link>https://dev.to/m-o-z-z-i-x</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/m-o-z-z-i-x"/>
    <language>en</language>
    <item>
      <title>I Made AURA: A Windows 10 L2TP/IPsec VPN Client Written From Scratch in Python</title>
      <dc:creator>Roman Madaev</dc:creator>
      <pubDate>Mon, 26 Oct 2026 12:51:06 +0000</pubDate>
      <link>https://dev.to/m-o-z-z-i-x/i-made-aura-a-windows-10-l2tpipsec-vpn-client-written-from-scratch-in-python-506o</link>
      <guid>https://dev.to/m-o-z-z-i-x/i-made-aura-a-windows-10-l2tpipsec-vpn-client-written-from-scratch-in-python-506o</guid>
      <description>&lt;p&gt;For work I needed to connect to a private network over L2TP/IPsec. The VPN client built into Windows 10 refused to connect at all, and it gave me nothing to debug with: no log of the key exchange, no hint about which step failed. I went looking for another program that could do the job and found nothing suitable&lt;/p&gt;

&lt;p&gt;This became the reason for creating AURA — a VPN client that speaks the whole protocol itself, so when something goes wrong you can see exactly where&lt;/p&gt;

&lt;h2&gt;
  
  
  🔐 What is it?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AURA&lt;/strong&gt; is a Windows 10 &lt;strong&gt;L2TP/IPsec VPN client&lt;/strong&gt; with its own IKEv1, ESP, L2TP and PPP stack, written in pure Python with PyQt5. The traffic goes through a &lt;strong&gt;Wintun&lt;/strong&gt; virtual adapter, the driver from the WireGuard project. Nothing of Windows' built-in VPN client is used: no RAS connection, no &lt;code&gt;rasdial&lt;/code&gt;, no Windows VPN service. The program needs administrator rights at launch, because the adapter, routes and DNS are system changes, and asks for them once through UAC&lt;/p&gt;

&lt;h2&gt;
  
  
  🖥️ Screenshots
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F78dfdcf3dnrze0pxsgrw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F78dfdcf3dnrze0pxsgrw.webp" alt="Pic. 1" width="800" height="657"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fag0jctnag4fqfu3a82xn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fag0jctnag4fqfu3a82xn.webp" alt="Pic. 2" width="800" height="657"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ How does it work?
&lt;/h2&gt;

&lt;p&gt;You enter a server, a username, a password and, when the server wants one, a pre-shared key, then press CONNECT. AURA offers the server 18 IKE proposals (AES/3DES, SHA-256/SHA-1, DH 14/5/2) and uses whichever it picks, opens one L2TP tunnel and session, authenticates with MS-CHAPv2, CHAP or PAP, whatever the server asks for, and gets its address and DNS over IPCP. The status bar and the log panel walk through every stage&lt;/p&gt;

&lt;p&gt;The most interesting part was a bug I could not see. After a successful key exchange the server's replies were reaching the network card, but my socket received nothing. Windows hands ESP packets that arrive on UDP port 4500 to its own IPsec driver, and a user-mode socket bound to that port sees only the IKE messages. The fix was to send from an ephemeral local port: the server answers whatever port it observes&lt;/p&gt;

&lt;p&gt;Because the program changes routes and DNS, every change is recorded before it is made, and the next launch removes whatever a crash left behind. Your credentials stay on your machine: a password and a pre-shared key are written to disk only when you tick Remember, as a DPAPI blob that opens for your Windows account alone, and they never reach the log&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Key Features:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🔐 Own IKEv1/IPsec Stack&lt;/strong&gt;&lt;br&gt;
Main and quick mode with a pre-shared key, NAT traversal and dead peer detection. Offers 18 proposals (AES/3DES, SHA-256/SHA-1, DH 14/5/2) and uses whichever the server picks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🧵 L2TP + PPP&lt;/strong&gt;&lt;br&gt;
One tunnel and session with keepalive, then MS-CHAPv2 / CHAP / PAP (whatever the server asks for), IPCP for the address and DNS, and MPPE where a server demands it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🛡️ Wintun Virtual Adapter&lt;/strong&gt;&lt;br&gt;
Traffic goes through a real Wintun adapter named AURA. Route all sends everything through the tunnel, or list your own networks in &lt;code&gt;extraRoutes&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🗂️ Connection Profiles&lt;/strong&gt;&lt;br&gt;
Several saved servers in a combo box. Password and pre-shared key are kept only on request, protected with DPAPI&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🧹 Crash Recovery Sweep&lt;/strong&gt;&lt;br&gt;
Every route, DNS entry and the adapter are recorded before they change, and the next launch removes whatever a crash left behind&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🗺️ Roadmap:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;In-place IPsec Rekey&lt;/strong&gt; — Renew the security association before it expires. Today the session ends when the server drops it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IKEv2&lt;/strong&gt; — A second protocol next to IKEv1&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Certificates&lt;/strong&gt; — Authentication beyond the pre-shared key&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IPv6&lt;/strong&gt; — Addresses and routes inside the tunnel&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tray Icon&lt;/strong&gt; — Live in the notification area&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automatic Reconnect&lt;/strong&gt; — Come back after a lost link&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kill Switch&lt;/strong&gt; — No traffic outside the tunnel while it is meant to be up&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;L2TP Tunnel Secret&lt;/strong&gt; — Servers that authenticate the tunnel itself with a shared secret are refused today&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔗 Repository Link
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/m-o-z-z-i-x/AURA" rel="noopener noreferrer"&gt;https://github.com/m-o-z-z-i-x/AURA&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>vpn</category>
      <category>ipsec</category>
      <category>networking</category>
    </item>
    <item>
      <title>I Made REGENT: An MCP Server for Configuring OpenWrt Routers Through an AI</title>
      <dc:creator>Roman Madaev</dc:creator>
      <pubDate>Tue, 28 Jul 2026 22:09:03 +0000</pubDate>
      <link>https://dev.to/m-o-z-z-i-x/i-made-regent-an-mcp-server-for-configuring-openwrt-routers-through-an-ai-2j62</link>
      <guid>https://dev.to/m-o-z-z-i-x/i-made-regent-an-mcp-server-for-configuring-openwrt-routers-through-an-ai-2j62</guid>
      <description>&lt;p&gt;A while ago my own OpenWrt router simply stopped passing traffic, and everything in the web interface looked perfectly fine. It took me a whole afternoon to find the cause: four separate misconfigurations, each enough to stop traffic on its own, none of them visible on the page where I had set them up&lt;/p&gt;

&lt;p&gt;This became the reason for creating REGENT — a server that lets an AI read the entire router at once, tell you what is actually broken, and fix it in plain language, without ever touching the command line yourself&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;REGENT&lt;/strong&gt; is an &lt;strong&gt;MCP server&lt;/strong&gt; that hands an AI controlled root access to an OpenWrt router. You describe what the network should do in ordinary words, and it works out which &lt;code&gt;uci&lt;/code&gt; and &lt;code&gt;ubus&lt;/code&gt; commands that takes, in which order, and which service has to reload before the change means anything. It handles ordinary OpenWrt configuration across network, Wi-Fi, firewall, packages and services, and goes deepest on the routed client mode scenario, where the router joins an upstream Wi-Fi network and shares that connection onward with the VPN and ad-blocking the upstream cannot provide&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;REGENT speaks the Model Context Protocol over stdin and stdout, so the AI client spawns it directly and no network ports are ever opened. It holds a single reused SSH session to the router and turns natural-language intent into ordered &lt;code&gt;uci&lt;/code&gt;, &lt;code&gt;ubus&lt;/code&gt; and &lt;code&gt;opkg&lt;/code&gt; calls. Rather than dumping the raw configuration, its topology tool reads the whole router in one pass and names the specific misconfigurations that leave a router looking healthy while nothing works&lt;/p&gt;

&lt;p&gt;Every change is guarded on two fronts. A three-level access gate keeps reading always available, while writes need an explicit gate and destructive actions need a separate confirmation on each call. And before any risky change, the configuration is snapshotted and a deferred restore is armed on the router itself — if connectivity is confirmed afterwards the restore is cancelled, and if it is not, the router puts itself back on its own&lt;/p&gt;

&lt;p&gt;Example diagnosis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UPLINK   wwan via phy1-sta0, 192.168.1.4/24, gateway 192.168.1.1
SERVES   lan  192.168.1.1/24   DHCP OFF
AP       HomeNet  2.4 GHz  →  wwan2

WARNINGS 4
  ! lan is on the same subnet as the uplink — the gateway resolves to
    this router itself and nothing routes out
  ! access point HomeNet is attached to 'wwan2', which is not up
  ! dhcp is not serving lan — clients must be configured by hand
  ! the uplink sits in zone lan, which does not masquerade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Features:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Natural-Language Configuration&lt;/strong&gt;&lt;br&gt;
Say what the network should do, and REGENT works out the exact &lt;code&gt;uci&lt;/code&gt; and &lt;code&gt;ubus&lt;/code&gt; commands, their order, and the service reload each one needs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Diagnosis, Not a Dump&lt;/strong&gt;&lt;br&gt;
Its topology tool reads the whole configuration in one call and reports what is broken and why it stops traffic, instead of a listing to interpret by hand&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Whole Recipes&lt;/strong&gt;&lt;br&gt;
Composite intents like "share the uplink with clients" run as one ordered change across several config files, so the AI never has to reassemble the steps itself&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Watchdog Rollback&lt;/strong&gt;&lt;br&gt;
Before a risky change the router is snapshotted and a restore is armed on the device itself, so a change that severs your own connection is undone automatically&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Three Levels of Access&lt;/strong&gt;&lt;br&gt;
Reading always works, changing needs the write gate open, and rebooting, flashing or resetting need the gate plus a separate confirmation on each call&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secrets Stay In&lt;/strong&gt;&lt;br&gt;
Wi-Fi passwords, VPN keys and subscription links are stripped before anything reaches the model, the command log, or the system log&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Roadmap:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;apk Support&lt;/strong&gt; — package handling on OpenWrt 24.10 and newer, where &lt;code&gt;opkg&lt;/code&gt; became &lt;code&gt;apk&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wider Device Coverage&lt;/strong&gt; — verification beyond the single TP-Link Archer C59 confirmed so far&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Guest Network&lt;/strong&gt; — a separate isolated Wi-Fi brought up in one intent&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repository Link
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/m-o-z-z-i-x/REGENT" rel="noopener noreferrer"&gt;https://github.com/m-o-z-z-i-x/REGENT&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>python</category>
      <category>openwrt</category>
    </item>
    <item>
      <title>I Made NR34P3R: Fast Multi-Threaded Port Scanner for Detecting Open Ports &amp; Services</title>
      <dc:creator>Roman Madaev</dc:creator>
      <pubDate>Sun, 22 Jun 2025 01:52:34 +0000</pubDate>
      <link>https://dev.to/m-o-z-z-i-x/nr34p3r-a-fast-multi-threaded-port-scanner-for-detecting-open-ports-and-services-2d0</link>
      <guid>https://dev.to/m-o-z-z-i-x/nr34p3r-a-fast-multi-threaded-port-scanner-for-detecting-open-ports-and-services-2d0</guid>
      <description>&lt;p&gt;A few months ago I found myself in need of a lightweight port scanner that could deliver actionable insights quickly without bloating system resources or drowning me in irrelevant data. Existing tools felt either too bulky or too barebones, so I decided to build something new — NR34P3R , a fast, multi-threaded port scanner with an intuitive terminal interface and smart service detection&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;NR34P3R is a modern port scanner designed to help security professionals and sysadmins detect open ports and identify associated services with precision. It supports multi-threaded scanning for maximum efficiency, automatically resolves over 3000 service names, and presents results in a clean, color-coded format using Rich tables&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw43moiko4vamzbnoysdr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw43moiko4vamzbnoysdr.gif" alt="Demo" width="719" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;NR34P3R uses a modular scanning engine that leverages Python's socket library and advanced concurrency. You define a target host and specify a port range — single ports, custom ranges (80-443), or full-range scans (1-65535). The scanner then sends asynchronous requests and collects responses, resolving service names and descriptions from its built-in database&lt;/p&gt;

&lt;p&gt;When a port is found open, NR34P3R automatically fetches service metadata including protocol, description, and known vulnerabilities (if available), giving you immediate context for further investigation&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ultra-Fast Multi-threaded Scanning&lt;/strong&gt;&lt;br&gt;
Supports up to 100 concurrent threads for lightning-fast scans across large port ranges&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rich Service Database&lt;/strong&gt;&lt;br&gt;
Automatically identifies over 3000 services with detailed descriptions powered by WikiLess integration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Colorful Terminal UI&lt;/strong&gt;&lt;br&gt;
Interactive output with live progress bars, syntax highlighting, and adaptive formatting via Colorama and Rich&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Structured Results&lt;/strong&gt;&lt;br&gt;
Displays findings in organized tables showing port number, service name, status, and description&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexible Scanning Options&lt;/strong&gt;&lt;br&gt;
Supports single ports, custom ranges, or full-range scans from 1 to 65535&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Roadmap:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ASN Lookup&lt;/strong&gt; — Identify network ownership for scanned hosts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;JSON Reporting&lt;/strong&gt; — Export scan results for documentation and analysis&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ping Sweep&lt;/strong&gt; — Check host availability before scanning&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Port Test Tool&lt;/strong&gt; — Verify specific port configurations and firewall rules&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repository Link
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/m-o-z-z-i-x/NR34P3R" rel="noopener noreferrer"&gt;https://github.com/m-o-z-z-i-x/NR34P3R&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>security</category>
      <category>scanner</category>
    </item>
    <item>
      <title>I Made CR4SH3R: Tool for Automating Vulnerability Detection in WordPress Plugins</title>
      <dc:creator>Roman Madaev</dc:creator>
      <pubDate>Sun, 22 Jun 2025 01:38:36 +0000</pubDate>
      <link>https://dev.to/m-o-z-z-i-x/cr4sh3r-tool-for-detecting-vulnerabilities-in-wordpress-plugins-15a7</link>
      <guid>https://dev.to/m-o-z-z-i-x/cr4sh3r-tool-for-detecting-vulnerabilities-in-wordpress-plugins-15a7</guid>
      <description>&lt;p&gt;A couple of months ago, I came across a WordPress site that needed a quick security check for obvious vulnerabilities. It all started with routine work: standard checks, searching for known CVEs, and inspecting popular plugins. But what I found made me think more seriously — critical Arbitrary File Download vulnerabilities in several plugins that allowed access to wp-config.php with just a few requests&lt;/p&gt;

&lt;p&gt;This became the reason for creating CR4SH3R — a simple yet powerful tool designed to automate the detection of such vulnerabilities within the WordPress ecosystem&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;CR4SH3R is a GUI utility designed to scan websites for Arbitrary File Download vulnerabilities in WordPress plugins. Its main purpose is to detect paths through which the wp-config.php file can be downloaded, and automatically extract sensitive information from it — such as database login credentials and other important parameters&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrkghwg3qg7luctvekjs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrkghwg3qg7luctvekjs.jpg" alt="Pic. 1" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqneql2bh9emu3mgq9zm8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqneql2bh9emu3mgq9zm8.jpg" alt="Pic. 2" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;The scanner uses a pre-prepared list of potentially vulnerable URL paths and sends HTTP requests to the target domain. If the server returns the contents of the wp-config.php file, the program parses it and displays only the relevant data. There’s also an option to save results in .xlsx format&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example payload:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;/wp-content/plugins/vulnerable-plugin/download.php?file=../../../../wp-config.php&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-threaded Scanning&lt;/strong&gt;&lt;br&gt;
Fast scanning using concurrent request processing. Supports up to 10 simultaneous checks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automatic Data Extraction from wp-config.php&lt;/strong&gt;&lt;br&gt;
If the file is found, CR4SH3R automatically extracts values like:&lt;br&gt;
&lt;code&gt;DB_NAME&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_USER&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_PASSWORD&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_HOST&lt;/code&gt;&lt;br&gt;
&lt;code&gt;table_prefix&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Excel (.xlsx) Report Generation&lt;/strong&gt;&lt;br&gt;
All findings are saved in a structured and easy-to-share format&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simple GUI Interface&lt;br&gt;
Built using PyQt5 for user-friendly interaction&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Roadmap:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Auto-updater&lt;/strong&gt; — built-in version checker&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Config Presets&lt;/strong&gt; — save and load frequently used scan settings&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Session History&lt;/strong&gt; — track previous scans with timestamps and results&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Encrypted .env File&lt;/strong&gt; — prevent plaintext exposure when bundled into binaries&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repository Link
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/m-o-z-z-i-x/CR4SH3R" rel="noopener noreferrer"&gt;https://github.com/m-o-z-z-i-x/CR4SH3R&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>python</category>
      <category>security</category>
      <category>scanner</category>
    </item>
  </channel>
</rss>
