Strobesstrobes
Platform
Solutions
Resources
Customers
Company
Pricing
Book a Demo
Strobesstrobes

Strobes connects every exposure signal to autonomous action, so security teams fix what matters, prove what works, and stop chasing noise.

Book a DemoTalk to an expert
ISO 27001SOC 2CREST
  • Platform
  • Platform Overview
  • Agentic Exposure Management
  • AI Agents
  • Integrations
  • API & Developers
  • Workflows & Automation
  • Analytics & Reporting
  • Solutions
  • Exposure Assessment (EAP)
  • Attack Surface Management
  • Application Security Posture
  • Risk-Based Vulnerability Management
  • Adversarial Exposure Validation (AEV)
  • AI Pentesting
  • Pentesting as a Service
  • CTEM Framework
  • By Industry
  • Financial Institutions
  • Technology
  • Retail
  • Healthcare
  • Manufacturing
  • By Roles
  • CISOs
  • Security Directors
  • Cloud Security Leaders
  • App Sec Leaders
  • Resources
  • Quick Agentic Pentest
  • Blog
  • Customer Stories
  • eBooks
  • Datasheets
  • Videos & Demos
  • Exposure Management Academy
  • CTEM Maturity Assessment
  • Pentest Health Check
  • Security Tool ROI Calculator
  • Company
  • About Strobes
  • Meet the Team
  • Trust & Security
  • Contact Us
  • Careers
  • Become a Partner
  • Technology Partner
  • Partner Deal Registration
  • Press Release

Weekly insight for security leaders

CTEM research, agentic AI trends, and what's actually moving the needle.

© 2026 Strobes Security Inc. All rights reserved.

Privacy PolicyTerms of ServiceCookie PolicyAccessibilitySitemap
Back to Blog
IoT Penetration Testing Guide
Offensive Security

IoT Penetration Testing Guide

Shubham JhaDecember 6, 20259 min read

Table of Contents

  • What does an IoT penetration test cover?
  • The OWASP IoT Top 10 is what your findings map back to
  • How do you extract and crack IoT firmware?
  • How do you get a root shell over the serial console?
  • How do you dump SPI flash when the debug ports are locked?
  • Radio and MQTT are where the fleet-wide replay bugs hide
  • How do you report and prioritize IoT findings?
  • Frequently asked questions
  • Sources and references

Authors

S
Shubham Jha

Share

Table of Contents

  • What does an IoT penetration test cover?
  • The OWASP IoT Top 10 is what your findings map back to
  • How do you extract and crack IoT firmware?
  • How do you get a root shell over the serial console?
  • How do you dump SPI flash when the debug ports are locked?
  • Radio and MQTT are where the fleet-wide replay bugs hide
  • How do you report and prioritize IoT findings?
  • Frequently asked questions
  • Sources and references

Authors

S
Shubham Jha

Share

TL;DR
  • ✓Recent IoT honeypot research from Nozomi Networks recorded the bulk of intrusion attempts still riding on default and brute-forced credentials, so the cheapest attack remains the most effective.
  • ✓IoT testing runs through five distinct stages: recon, firmware, hardware, radio, and reporting, each with its own toolset.
  • ✓binwalk -e carves the filesystem out of a firmware image, after which a single grep on /etc/shadow plus hashcat usually yields the fleet-wide root password.
  • ✓When debug ports are open you interrupt U-Boot and pass init=/bin/sh to land in a root shell with no password at all.
  • ✓The recurring high-severity finding is a secret shared across every shipped unit: a TLS key, an SSH host key, or an open MQTT broker that exposes the whole fleet.

The unglamorous truth of IoT security is that you rarely need an exploit. Honeypot telemetry published by Nozomi Networks shows the majority of recorded attack attempts against connected devices still rely on default or brute-forced credentials, the same I1 weakness the OWASP IoT Top 10 has listed for years. A smart lock with telnet open and the password admin/admin does not need a memory-corruption bug to fall over.

That said, the deep findings come from physically taking the device apart. This guide follows the five stages of a real IoT engagement: recon, firmware extraction and cracking, hardware access over serial and SPI, radio and protocol abuse, and reporting that maps everything back to the OWASP IoT Top 10. Each stage shows the actual tool output you would capture and the line that tells you the device is compromised.

Table of contents
  1. What does an IoT penetration test cover?
  2. The OWASP IoT Top 10 is what your findings map back to
  3. How do you extract and crack IoT firmware?
  4. How do you get a root shell over the serial console?
  5. How do you dump SPI flash when the debug ports are locked?
  6. Radio and MQTT are where the fleet-wide replay bugs hide
  7. How do you report and prioritize IoT findings?

What does an IoT penetration test cover?

An IoT penetration test assesses the device as a complete system: its network services, web and mobile management interfaces, cloud APIs, firmware, hardware debug interfaces, and wireless radios. The interesting bugs sit where two layers meet, for example a cloud API that trusts a device identity you can clone out of dumped firmware. Because the firmware and silicon are physically in your hands, IoT work is unusually white-box compared with other types of penetration testing.

It pulls in several disciplines at once: web and API testing against the management plane, mobile testing against the companion app (close to our mobile app penetration testing work), plus hardware and RF analysis that has no software equivalent. The methodology below moves outside-in, from what an internet attacker sees to what someone with the board on a bench can extract.

IoT pentest methodology
1
Recon
Map network services, web/mobile interfaces, and cloud APIs; try default creds first.
2
Firmware
binwalk -e to carve the filesystem; crack /etc/shadow with hashcat; flag outdated components.
3
Hardware
Find UART/JTAG for a root shell; dump SPI flash with flashrom when ports are locked.
4
Radio
RTL-SDR replay on sub-GHz; test MQTT/CoAP and BLE for anonymous access.
5
Report
Map to OWASP IoT Top 10; rate by access level and fleet-wide blast radius.

The OWASP IoT Top 10 is what your findings map back to

The OWASP IoT Top 10 is the reference baseline that frames scope and lets a client compare against the industry. It opens with I1 weak, guessable, or hardcoded passwords, which remain the single most exploited issue, followed by I2 insecure network services and I3 insecure web, backend, and mobile interfaces. The list runs through I4 lack of secure update, I5 outdated components, and down to I10 lack of physical hardening, which is exactly what serial and SPI access exploit.

Mapping each finding to an item does real work in the report: it tells the client whether a problem is a one-off or a systemic gap, and it connects the hardware-level issues most teams ignore to a named, defensible category. The three that carry most engagements:

  • I1 default/hardcoded credentials and I2 insecure network services produce the majority of remote findings.
  • I4 lack of secure update is what turns a single firmware bug into a permanent one.
  • I10 lack of physical hardening is the open UART header and the unprotected SPI flash.

How do you extract and crack IoT firmware?

Firmware analysis starts before you touch the device: pull the image from the vendor's update server or support download, then carve it open with binwalk. The -e flag identifies and extracts embedded filesystems (usually SquashFS or JFFS2) and bootloaders in one pass:

$ binwalk -e firmware.bin
DECIMAL    HEXADECIMAL  DESCRIPTION
--------------------------------------------------------------------
0          0x0          uImage header, kernel 3.10.14
1490944    0x16C800     Squashfs filesystem, little endian, 4.0     <- root fs starts here
$ cd _firmware.bin.extracted/squashfs-root

Inside the filesystem you hunt the same secrets as any code review: credentials, private keys, API endpoints, backdoor accounts, and outdated binaries with known CVEs. The highest-impact move is grepping the password hash out of /etc/shadow and feeding it to hashcat, because the recovered password is almost always reused fleet-wide:

$ grep root etc/shadow
root:$1$xyz$Hk9c0/9q8mZ3yQ2pL.:18000:0:99999:7:::      <- MD5-crypt ($1$) hash
$ hashcat -m 500 root.hash rockyou.txt
$1$xyz$Hk9c0/9q8mZ3yQ2pL.:Admin@123                    <- cracked in seconds
Session..........: Recovered
Status...........: Cracked

The $1$ prefix is MD5-crypt, weak enough that hashcat recovers it almost instantly. The lesson clients hate: that one password logs into every device they ever shipped. Automated firmware scanners like EMBA will flag the weak hash and outdated busybox, but the chained insight (this hash is the SSH login for the whole fleet) is human work, the kind of judgment we discuss in our automated versus manual penetration testing comparison.

War story
On a smart-building sensor engagement we cracked the root hash out of /etc/shadow in under a minute, then proved the same password opened SSH on every device on the floor. One weak MD5-crypt hash was the master key to the entire deployment.

How do you get a root shell over the serial console?

UART is the fastest path to a shell on a device whose firmware you cannot download. It is a serial console, usually a 4-pin header or test pads exposing VCC, GND, TX, and RX. Identify the pins with a multimeter, wire only TX, RX, and GND to a 3.3V USB-to-TTL adapter (never VCC), and attach a terminal at the common baud rate:

$ screen /dev/ttyUSB0 115200
U-Boot 2016.05 (Jan 02 2020)
Hit any key to stop autoboot:  0     <- press a key here to interrupt
=> setenv bootargs ${bootargs} init=/bin/sh    <- skip init, drop straight to a shell
=> boot
...
/ # id
uid=0(root) gid=0(root)                  <- root, no password prompt at all

The decisive moment is interrupting autoboot at the U-Boot prompt and appending init=/bin/sh to the kernel arguments. The kernel boots straight to a root shell and never runs the login process, so the password you cracked earlier is not even needed. If the console drops you into a Linux login instead, that cracked /etc/shadow password is your way in. JTAGulator helps locate unlabeled JTAG pads when UART is disabled, and JTAG gives you raw CPU debug access to read and write memory directly.

How do you dump SPI flash when the debug ports are locked?

When UART and JTAG are disabled, you read the storage chip directly. Most IoT devices keep firmware on an external SPI flash (commonly a Winbond 25-series in an SOIC-8 package), and flashrom driving a cheap programmer reads the whole image even when the vendor never published one. Attach an SOIC-8 test clip so you avoid desoldering, wire it to a CH341A or Bus Pirate, and read the chip twice so you can prove a clean capture:

$ flashrom -p ch341a_spi -r dump1.bin
Found Winbond flash chip "W25Q64.V" (8192 kB, SPI).
Reading flash... done.
$ flashrom -p ch341a_spi -r dump2.bin
$ sha256sum dump1.bin dump2.bin
9f2a... dump1.bin
9f2a... dump2.bin           <- hashes match, dump is clean
$ binwalk -e dump1.bin       # back into the firmware workflow above

Identical SHA-256 hashes confirm the read was clean. This matters because if the board still powers the chip during the read, the main CPU contends for the bus and you get a non-deterministic, garbage dump. Holding the CPU in reset, or desoldering the chip onto an adapter, isolates it. Once dumped, the image flows straight back into the binwalk and hashcat workflow above.

Radio and MQTT are where the fleet-wide replay bugs hide

Wireless testing covers Wi-Fi, BLE, Zigbee, and sub-GHz bands like 433 MHz, and the classic finding is an unauthenticated replay: capture the signal a remote sends, retransmit it, and trigger the action with no rolling code. A cheap RTL-SDR plus rtl_433 decodes most sub-GHz sensors and remotes, while Universal Radio Hacker handles analysis and replay. At the application layer, MQTT is the protocol I find exposed most often, and an anonymous wildcard subscribe frequently dumps every device's telemetry and commands at once:

$ mosquitto_sub -h 192.168.1.10 -t '#' -v
home/lock/livingroom/state locked          <- every device, no auth required
home/lock/livingroom/battery 84
home/cam/garage/stream rtsp://192.168.1.42:554/h264
fleet/device/AC32F1/token eyJhbGciOiJIUzI1...   <- session tokens on the wire
$ mosquitto_pub -h 192.168.1.10 -t 'home/lock/livingroom/cmd' -m 'unlock'   # writes open too

The wildcard # subscribing with no credentials and returning live state for every device is the finding: the broker has no authentication and no topic ACLs. If publish is also open, you command devices directly. The fix is config-level: set allow_anonymous false in mosquitto.conf, require per-device credentials, and enforce topic ACLs so a compromised device cannot read the whole fleet's traffic.

Sample findings excerpt
FindingSeverity (CVSS)EvidenceRemediation
Reused root password across fleet9.8 Criticalhashcat cracks /etc/shadow $1$ hash; SSH works on all unitsUnique per-device credentials; remove static root
Unauthenticated MQTT broker9.1 Criticalmosquitto_sub -t '#' dumps all device trafficallow_anonymous false; per-device auth; topic ACLs
U-Boot drops to root shell7.6 Highinit=/bin/sh on serial console; uid=0 no passwordSet CONFIG_AUTOBOOT_KEYED; password-protect U-Boot
Firmware on unprotected SPI flash6.8 Mediumflashrom reads full image via SOIC-8 clipEnable flash read protection; encrypt at rest
Sub-GHz remote replay6.5 Mediumrtl_433 capture replayed via URH triggers unlockRolling code / authenticated RF protocol

How do you report and prioritize IoT findings?

Report each finding against the layer it lives on, the OWASP IoT Top 10 item it maps to, and the access level it requires, because access level drives real-world risk. A root shell over UART matters less on a device sealed in a locked enclosure than a remotely reachable, unauthenticated MQTT broker does. State that distinction explicitly so the client prioritizes correctly.

Rate by blast radius. A hardcoded TLS key, a reused root password, or an open broker affects every shipped unit, not one device, which is what makes these the critical findings. Where the same bug recurs across firmware versions, the durable fix is process-level: a signed, authenticated secure-update pipeline (closing I4) so fixes can actually ship, plus per-device unique credentials and keys provisioned at manufacture. For organizations running large fleets, this folds into continuous validation rather than a one-time test, the model we cover in our DAST versus pentesting versus agentic pentesting guide.

Frequently asked questions

What is IoT penetration testing?
IoT penetration testing is a security assessment of a connected device across all its layers: network services, web and mobile interfaces, cloud APIs, firmware, hardware debug ports, and wireless radios. It combines web, mobile, hardware, and RF techniques to find how an attacker with remote, local-network, or physical access could compromise the device or its supporting accounts.
What is the OWASP IoT Top 10?
The OWASP IoT Top 10 lists the most common IoT weaknesses, led by weak, guessable, or hardcoded passwords and insecure network services. It also covers insecure web, backend, and mobile interfaces, lack of secure update mechanisms, outdated components, weak privacy and data protection, insecure defaults, and lack of physical hardening. It is the standard scope baseline that engagements map findings against.
How do you extract and analyze IoT firmware?
Run binwalk -e on the firmware image to carve out the embedded filesystem (usually SquashFS), then grep it for credentials, private keys, and endpoints. Crack any /etc/shadow hashes with hashcat, and version-check binaries like busybox, dropbear, and OpenSSL against CVE data. EMBA automates much of the static analysis across the whole image.
How do you get a root shell on an IoT device?
The fastest route is the UART serial console. Identify TX, RX, and GND on the header, connect a 3.3V USB-to-TTL adapter, and attach with screen at 115200 baud. If you hit a U-Boot prompt you can interrupt autoboot and append init=/bin/sh to the kernel arguments to land in a root shell with no login at all. Otherwise the cracked /etc/shadow password gets you in.
How do you dump firmware from an SPI flash chip?
Identify the chip (often a Winbond SOIC-8), attach an SOIC-8 test clip, and wire it to a programmer such as a CH341A, Bus Pirate, or Raspberry Pi acting as SPI master. Run flashrom to read the chip into a file, read it twice and compare SHA-256 hashes to confirm a clean dump, then extract and analyze the image with binwalk.
Is an RTL-SDR enough for IoT radio testing?
For receiving and analyzing sub-GHz traffic on 433 and 868 MHz, yes: an RTL-SDR with rtl_433 or Universal Radio Hacker captures and decodes most sensors and remotes and proves replay attacks. To transmit (for active replay) or work above its frequency range, you need a transceiver like a HackRF or a YARD Stick One. BLE and Zigbee need their own dedicated radios.
Do you need physical access for IoT penetration testing?
Not for everything, but the deepest findings come from it. Network, web, mobile, and cloud testing run remotely, while UART/JTAG shells, SPI flash dumps, and active radio attacks need the device in hand. A good report always states the access level a finding requires, because a remote, unauthenticated bug is far higher risk than one needing the board on a bench.

Sources and references

  • OWASP Internet of Things Top 10
  • Nozomi Networks OT/IoT Security Report
  • binwalk Firmware Analysis Tool
  • flashrom
S
Shubham Jha
Security Researcher, Strobes
Shubham Jha leads offensive security research at Strobes, focused on web and API exploitation and red team tradecraft.
Tags
IoT SecurityHardware HackingOffensive Security

Stop chasing vulnerabilities Start reducing exposure

See how Strobes AI agents validate and fix your most critical exposures automatically.

Book a Demo
Continue Reading

Related Posts

Bug bounty vs pentesting vs AI pentesting comparison featured image
Penetration TestingApplication Security

Bug Bounty vs. Pentesting vs. AI Pentesting: Which Model Fits Your AppSec Program?

Bug bounty vs pentesting vs AI pentesting: compare costs, coverage, compliance, and when to use each model. Build a layered AppSec testing strategy.

Jun 4, 202621 min
Pentesting in-house vs outsourcing comparison: cost, coverage, and the third option, AI pentesting
Penetration TestingPTaaS

Pentesting In-House vs. Outsourcing: Cost, Coverage, and the Third Option

Compare in-house vs outsourced pentesting on cost, coverage, and depth. Discover why AI pentesting is the third option that changes the math for security teams.

Jun 4, 202621 min
How to Catch Blind Bugs Scanners Miss
Penetration TestingOffensive Security

How to Catch the Blind Bugs Scanners Miss

Out-of-band validation detects blind SSRF, blind SQLi, and out-of-band XXE that return no in-band response. Learn how it works and why it matters.

May 29, 202613 min