AprÚs avoir lu le post KrupnikasIl y avait une idée pour gérer mitmproxy et voir comment le backend des applications mobiles utilisées quotidiennement est organisé. Le choix s'est porté sur l'application interphone. AprÚs autorisation, il vous permet d'ouvrir les portes et de répondre aux appels vidéo. Ce qui en est ressorti et quels trous j'ai réussi à trouver, je le dirai sous la coupe.ParamÚtres du proxy
Pour analyser le trafic, une approche appelĂ©e homme au milieu est souvent utilisĂ©e. Il consiste en ce que lorsqu'il est connectĂ© Ă un rĂ©seau local, le trafic provenant de l'appareil analysĂ© va d'abord vers l'ordinateur sur lequel il est dĂ©cryptĂ© et analysĂ©, puis il est rechiffrĂ© et envoyĂ© au serveur. Pour dĂ©crypter le trafic, le plus populaire est le programme mitmproxy. L'installation de mitmproxy n'Ă©tait pas un gros problĂšme.Pour afficher le trafic depuis un appareil mobile, vous devez vous connecter Ă votre wifi domestique depuis votre tĂ©lĂ©phone et votre ordinateur. Installez mitmproxy sur l'ordinateur et exĂ©cutez. Sur le tĂ©lĂ©phone dans les paramĂštres wifi, dĂ©finissez l'adresse locale et le port de l'ordinateur en tant que serveur proxy. Ensuite, accĂ©dez Ă mitm.it depuis le tĂ©lĂ©phone et installez un certificat qui vous permet de dĂ©crypter les requĂȘtes https. AprĂšs ces Ă©tapes, les demandes du navigateur sont devenues visibles. Hourra! Cependant, l'Ă©tape suivante a Ă©tĂ© la dĂ©ception:Une recherche sur Google a conduit Ă un problĂšme ouvert sur le github . Il s'est avĂ©rĂ© qu'Ă partir de l'API niveau 24, les applications ne font plus confiance aux certificats utilisateur. Heureusement, vous pouvez contourner ce problĂšme en dĂ©compressant apk et en ajoutant la configuration suivante Ă AndroidManifest.xml:<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
De plus, il y a un script prĂȘt Ă l'emploi sur le github qui le fait automatiquement. Alors, tĂ©lĂ©chargez apk, script de patch, installez adb install et le tour est jouĂ©.Analyse du trafic
Nous constatons que les demandes sont adressées aux adresses du formulaire:https://{intercom-company-url}/api/
Deux paramĂštres sont passĂ©s dans l'en-tĂȘte:'api-version': '2',
'authorization': 'Bearer your.jwt.tokenâ
Le premier paramĂštre est la version api et le second est le jeton d'autorisation. Pour l'autorisation, un jeton Web json est utilisĂ©, qui se compose de trois parties: l'en-tĂȘte, la charge utile et la signature.DĂ©codez-le avec la commande:pyjwt decode --no-verify your.jwt.token
voir que la charge utile contient account_id et exp. Le champ exp correspond Ă l'heure de crĂ©ation du jeton, ce qui vous permet de gĂ©nĂ©rer des jetons pour diffĂ©rents appareils Ă partir d'un seul compte.Les plus intĂ©ressantes pour nous sont les demandes de liste des interphones disponibles et des portes qui s'ouvrent. Lors de l'envoi d'une requĂȘte (j'ai utilisĂ© python et la bibliothĂšque de requĂȘtes) Ă https://{intercom-company-url}/api/customers/properties/{account_id}/intercoms
Nous obtenons json contenant une liste d'interphones avec des champs:[
{
'id': ID,
'mode': MODE,
'sip_account': {'ex_user': USER_ID, 'proxy': PROXY, 'password': PSWD},
'video': [{'quality': 'low', 'source': 'rtsp:
}
]
Dans json id - identifiant d'interphone, mode - quelle porte peut ĂȘtre ouverte (les valeurs possibles sont one_door, left_door, right_door), un compte SIP et un lien vers la diffusion vidĂ©o. Hou la la!En utilisant le protocole d'ouverture de session (SIP), les appels vidĂ©o sont effectuĂ©s via l'interphone. Dans le champ sip_account, nous avons reçu id'shniki et les mots de passe pour les interphones auxquels notre compte a accĂšs. Les appeler tout de mĂȘme ne fonctionne pas, car ils sont sur le rĂ©seau interne. Mais le champ vidĂ©o est intĂ©ressant. Il contient un lien externe pour diffuser la vidĂ©o de la camĂ©ra. Il suffit d'ouvrir vlc, de copier le lien et vous pouvez regarder autour de l'horloge sur la camĂ©ra de l'interphone. Ce n'est pas bon de disperser de tels liens!Ensuite, nous dĂ©couvrirons comment ouvrir la porte. Lorsque vous cliquez sur le bouton d'ouverture de la porte, l'application envoie une demande d'obtention:https://{intercom-company-url}/api/customers/intercoms/{intercom_id}/unlock?door=left_door&id={intercom_id}
Il s'est avéré que la présence ou l'absence du paramÚtre id n'affecte rien, mais la porte permet dans le cas d'un interphone à deux portes d'ouvrir non seulement la vÎtre, mais aussi la porte suivante de votre choix.Sim-sim ouvert!
AprÚs avoir compris l'api, j'ai décidé de faire quelque chose d'utile. Le résultat est une application Android qui reconnaßt les commandes vocales et lorsqu'elle reconnaßt des commandes prédéfinies comme «sim-sim open», elle envoie une demande d'ouverture de la porte correspondante.résultats
Un interphone intelligent est bien, mais un interphone sûr et intelligent est encore mieux.