JSON, XML & Yaml Hacking & Issues
Reading time: 4 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na π¬ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter π¦ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Go JSON Decoder
Masuala yafuatayo yaligundulika katika Go JSON ingawa yanaweza kuwepo katika lugha nyingine pia. Masuala haya yaliwekwa wazi katika hiki kipande cha blog.
Parsers za JSON, XML, na YAML za Go zina historia ndefu ya kutokuelewana na mipangilio isiyo salama ambayo inaweza kutumika kuzidi uthibitisho, kuinua mamlaka, au kuhamasisha data nyeti.
(Un)Marshaling Data Isiyotarajiwa
Lengo ni kutumia structs ambazo zinamruhusu mshambuliaji kusoma/kandika maeneo nyeti (mfano, IsAdmin
, Password
).
- Mfano wa Struct:
type User struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
IsAdmin bool `json:"-"`
}
- Uthibitisho wa Kawaida
- Kikosi kilichokosekana (hakuna kikosi = uwanja bado unachambuliwa kwa chaguo-msingi):
type User struct {
Username string
}
Payload:
{"Username": "admin"}
- Matumizi yasiyo sahihi ya
-
:
type User struct {
IsAdmin bool `json:"-,omitempty"` // β wrong
}
Payload:
{"-": true}
βοΈ Njia sahihi ya kuzuia uwanja usiweze (kuwekwa) au (kuondolewa) kutoka kwa marshaling:
type User struct {
IsAdmin bool `json:"-"`
}
Parser Differentials
Lengo ni kupita idhini kwa kutumia jinsi parser tofauti zinavyotafsiri payload sawa kwa njia tofauti kama katika:
- CVE-2017-12635: Apache CouchDB bypass kupitia funguo za nakala
- 2022: Zoom 0-click RCE kupitia kutokuelewana kwa parser ya XML
- GitLab 2025 SAML bypass kupitia tabia za XML
1. Duplicate Fields:
Go's encoding/json
inachukua field ya mwisho.
json.Unmarshal([]byte(`{"action":"UserAction", "action":"AdminAction"}`), &req)
fmt.Println(req.Action) // AdminAction
Waparser wengine (k.m., Jackson ya Java) wanaweza kuchukua ya kwanza.
2. Kutokuwa na Muktadha wa Herufi: Go haina muktadha wa herufi:
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
// matches `Action` field
Hata hila za Unicode zinafanya kazi:
json.Unmarshal([]byte(`{"aβͺtionΕΏ": "bypass"}`), &req)
3. Mismatch ya huduma nyingi: Fikiria:
- Proxy iliyoandikwa kwa Go
- Huduma ya AuthZ iliyoandikwa kwa Python
Mshambuliaji anatumia:
{
"action": "UserAction",
"AcTiOn": "AdminAction"
}
- Python inaona
UserAction
, inaruhusu - Go inaona
AdminAction
, inatekeleza
Mchanganyiko wa Muundo wa Takwimu (Polyglots)
Lengo ni kutumia mifumo inayochanganya muundo (JSON/XML/YAML) au kushindwa kufungua kwenye makosa ya parser kama:
- CVE-2020-16250: HashiCorp Vault ilipars JSON kwa kutumia parser ya XML baada ya STS kurudisha JSON badala ya XML.
Mshambuliaji anadhibiti:
- Kichwa cha
Accept: application/json
- Udhibiti wa sehemu ya mwili wa JSON
Parser ya XML ya Go ilipars bila kujali na kuamini utambulisho ulioingizwa.
- Payload iliyoundwa:
{
"action": "Action_1",
"AcTiOn": "Action_2",
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
}
Result:
- Go JSON parser:
Action_2
(case-insensitive + last wins) - YAML parser:
Action_1
(case-sensitive) - XML parser: parses
"Action_3"
inside the string
π Mitigations
Hatari | Suluhisho |
---|---|
Nyamba zisizojulikana | decoder.DisallowUnknownFields() |
Nyamba za kurudi (JSON) | β Hakuna suluhisho katika stdlib |
Mechi isiyo na herufi kubwa | β Hakuna suluhisho katika stdlib |
Takataka za XML | β Hakuna suluhisho katika stdlib |
YAML: funguo zisizojulikana | yaml.KnownFields(true) |
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na π¬ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter π¦ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.