🏛️ A museum of GoAhead and goform forks. Dead webservers-live exploits
This repository is a living archive of embedded GoAhead / jhttpd web server binaries collected from router and IoT firmware images.
It exists to preserve historically significant embedded web stacks and make them easily accessible for security research, reverse engineering, and long-term study.
GoAhead and its forks powered countless low-cost routers, access points, cameras, and IoT devices from the late 1990s through the 2020s. They introduced the /goform pattern for handling web requests, which became a de facto standard in many OEM firmware packages. As devices age out and firmware images disappear, this codebase — and its vulnerabilities — are at risk of being lost to history.
Each contributed binary is stored with accompanying metadata.
This allows researchers to understand the firmware context and track lineage across vendors and versions.
| Sample ID | Vendor / Model | Firmware Ver. | Variant | Link |
|---|---|---|---|---|
| jhttpd.NR500.EA | NR500-EA | RG500UEAABxCOMSLICv3.4.2731.16.43 | jhttpd fork | link |
| jhttpd.dionlink.M7628N | Tuoshi/Dionlink LT15D & LT21B 4G Wi-Fi | v1.0.1802.10.08.P4 | jhttpd fork | link |
| kthy_topsw_goahead.topsw.GC111 | KTHY TopSW GC111-GL-LM321 | V3.0.20191211 | OEM GoAhead fork | link |
| webserver.KuWFi.AC900 | KuWFi AC900 | V1.0.13 | OEM GoAhead fork | link |
| goahead.Panda-Wireless-PWRU0-2.2.9 | Panda Wireless | V2.2.9 | OEM GoAhead fork | link |
This dataset enables:
We welcome new binaries, metadata improvements, and analysis write-ups. To contribute:
All contributions help expand the coverage of the GoAhead ecosystem and support future research.
These binaries are provided for research and educational purposes only.
They are not meant to encourage unauthorized access or exploitation of live systems.
/goform EndpointsGoAhead and its forks use a URL prefix /goform to register “form handlers” inside the binary. These handlers process login forms, configuration changes, and other CGI-like actions. Researchers can use several approaches to enumerate them:
Most web UI pages reference /goform/... as the form action or AJAX URL. Run:
psOn stripped-down BusyBox devices you usually don’t have find, which, or file, but you do have ps. You can use it to identify which process is the embedded web server.
Run:
ps
Look for entries that resemble:
PID USER VSZ STAT COMMAND
635 admin 1864 S goahead
or:
PID USER VSZ STAT COMMAND
635 admin 1864 S httpd
Typical embedded web server binaries include:
goaheadhttpd or mini_httpdlighttpdjhttpdThe COMMAND column tells you the binary name.
Once you see the process name (e.g., goahead), check typical directories:
ls /bin/goahead
ls /sbin/goahead
ls /usr/bin/goahead
ls /usr/sbin/goahead
Repeat for httpd, mini_httpd, or whatever name appeared in ps.
grepIf you’re unsure, you can also run:
grep -i goahead /etc/* 2>/dev/null
grep -i httpd /etc/* 2>/dev/null
Startup scripts sometimes reference the binary or its configuration.
Once you find the binary path, you can:
strings / binwalk / reverse engineering.Summary:
ps to identify the running web server name.ls on common binary directories to locate it.grep on /etc or /etc_ro to find startup scripts.