Maison > Article > Opération et maintenance > Comment effectuer une analyse de vulnérabilité de l'application de portefeuille électronique
Razer Pay est largement utilisé à Singapour et en Malaisie. Dans cet article, l'auteur a utilisé l'analyse inverse de l'APP et le débogage Frida pour découvrir la signature de l'utilisateur dans le portefeuille électronique Razer Pay) qui génère une vulnérabilité qui permet de lire l'historique des discussions des utilisateurs de paiement Razer. , supprimez le compte bancaire lié de l'utilisateur et volez les informations personnelles sensibles de l'utilisateur. La vulnérabilité a finalement valu à Razer une récompense officielle de près de 6 000 $. Ce qui suit est l'idée de l'auteur sur la découverte des vulnérabilités, qui ne peut être utilisée que comme référence pour l'apprentissage de la posture.
Razer Inc (RΛZΞR) est une société d'équipements périphériques de jeu fondée à Singapour. Elle est également connue sous le nom de « Green Light Factory » et a commencé à se lancer dans le secteur de l'électronique grand public ces dernières années. Les deux sièges sociaux de Razer sont situés à Singapour et à San Diego, aux États-Unis. Cotés à la Bourse de Hong Kong en novembre 2017, ses produits sont destinés aux joueurs et la plupart de ses produits portent le nom d'animaux carnivores. Lancement du portefeuille électronique Razer Pay en 2018. En mai 2020, la production de masques chirurgicaux a débuté.
Dans le mécanisme inviolable des requêtes de Razer Pay Ewallet, en plus de auth_token, le paramètre signature est également utilisé pour effectuer une vérification de signature sur les requêtes de différents utilisateurs. Chaque requête GET et POST adressée au serveur sera accompagnée d'un. valeur du paramètre de signature codée et identifiant utilisateur, comme indiqué dans la figure ci-dessous :
Par conséquent, essayer de falsifier les paramètres de la demande et de les renvoyer sera invalide, mais après l'analyse inverse de l'APK, il a été constaté que le paiement électronique Razer portefeuille (portefeuille électronique de paiement Razer) Il existe une vulnérabilité de génération de signature utilisateur (Signature) dans Pay Ewallet. Combinée à l'analyse et à l'utilisation de Frida, elle peut automatiquement calculer et générer une nouvelle signature utilisateur (Signature), ce qui peut conduire à de nombreux droits non autorisés (. IDOR).
Lorsque j'ai utilisé Burp pour capturer les requêtes réseau de l'application Razer Payment, j'ai constaté qu'en raison de la protection de la signature de l'utilisateur (Signature) dans la requête, de nombreux paramètres ne peuvent pas être falsifiés. J'y ai donc immédiatement pensé. enregistrement. Un autre utilisateur de paiement Razer est venu coopérer avec le test, mais dans le scénario où deux utilisateurs faisaient la même demande, après le remplacement de la charge utile de la session, l'exécution était invalide. La raison était que la protection de la demande de session avec la signature de l'utilisateur (Signature). ) était toujours là.
J'ai décidé d'analyser le mécanisme de génération de signature utilisateur (Signature). Avec l'aide de la décompilation d'apktool et de Jadx-Gui, j'ai acquis une compréhension au niveau du code du fonctionnement de l'APP et j'ai découvert qu'il existe un code appelé. "MD5Encode" La fonction de méthode, comme son nom l'indique, utilise l'algorithme de cryptage MD5. Après avoir combiné certaines charges utiles de paramètres, j'ai décidé d'essayer de générer une signature utilisateur (Signature), mais peu importe mes efforts, je n'ai pas pu générer une signature utilisateur correcte. J'ai deviné que l'ordre des paramètres pouvait être erroné, ou c'était le cas. un cryptage MD5 non conventionnel.
N'abandonnez pas et n'abandonnez pas. J'ai copié tous les codes pertinents impliqués dans la génération de signature utilisateur, puis j'ai essayé de le générer à l'aide de l'outil de débogage IDE IntelliJ IDEA. dans "MD5Encode "Lors de l'application de la méthode, j'ai combiné l'ordre correct des paramètres. Cependant, en raison de l'obscurcissement du code, certains ajustements sont nécessaires, mais ce n'est pas trop difficile. Enfin, insérez les valeurs de paramètres correctes dans le corps de la requête généré précédemment et utilisez le code ci-dessus pour générer la chaîne de signature utilisateur (Signature) correcte !
(L'éditeur a analysé que dans le processus de génération suivant de plusieurs signatures d'utilisateur, le propre jeton de l'utilisateur est utilisé, qui est l'un des paramètres. Ensuite, grâce à la méthode MD5Encode, différentes signatures d'utilisateur correspondant à plusieurs identifiants d'utilisateur peuvent également être générées. Autrement dit, il peut générer avec succès chaque signature d'utilisateur Signature attribuée à plusieurs utilisateurs par le serveur Razer)
À partir de là, la première chose à laquelle j'ai pensé a été de tester la vulnérabilité d'accès non autorisé (IDOR), et j'ai a choisi une interface API/deleteBankAccount plus sensible, qui consiste à supprimer le compte bancaire lié par l'utilisateur, puis dans le scénario de test de deux comptes, le compte bancaire lié d'un autre utilisateur Razer Pay peut être supprimé avec succès !
À ce stade, je pensais qu'il devait y avoir d'autres interfaces API protégées par Signature qui avaient des problèmes de remplacement d'IDOR, j'ai donc essayé de faire une vague de tests en utilisant la méthode ci-dessus, mais Rien n'a été trouvé. De plus, d’autres interfaces API utilisaient différentes méthodes d’obscurcissement du code, ce qui m’a obligé à passer beaucoup de temps à les rechercher et à les analyser. Lorsque vous n'en avez aucune idée, essayez d'utiliser Frida. Frida est un outil de débogage très facile à utiliser. Je peux l'utiliser pour identifier certaines méthodes et fonctions qui peuvent être connectées. En combinaison avec la méthode MD5Encode ci-dessus, je peux trouver la bonne électronique. wallet. Package de code, vous pouvez également utiliser ces méthodes et fonctions pour générer une nouvelle signature d'utilisateur correcte.
La fonction implémentée par le code frida.js suivant est de générer une nouvelle signature d'utilisateur pour que l'utilisateur actuel rejoigne le groupe de discussion créé par d'autres utilisateurs :
<br>
<code><code>// frida.js - Utilisez ceci pour recalcul de la signature pour ajouter un utilisateur au groupe de discussion d'autres personnes<code><code>// frida.js - Use this for recalculating signature for adding user to other people's chatgroup
<code><code>console.log("Starting...")
<code><code>Java.perform(function () {
<code><code>var MD5 = Java.use('com.mol.molwallet.view.MD5')
<code><code>MD5.MD5Encode.implementation = function (arg)
<code><code>{
<code><code>console.log("Hooking class MD5 - method MD5Encode")
<code><code>//Extra step - calculate new signature
<code><code>var ret_value = this.MD5Encode("groupId=1x9&userIds=95xxx7&token=b6fxxxd3-2xxc-4xxf-bxx7-7fxxxxa6")
<code><code>console.log("[+] signature= " + ret_value)
<code><code>//Call method with original arguments so app doesn't crash ..
<code><code>var ret_value = this.MD5Encode(arg) //original value
<code><code>console.log("original ARG: " + arg)
<code><code>return ret_value;
<code><code>}
<code><code>})
但是要运行Frida,需要root级别的访问,好在我另外发现了一个服务端漏洞可以让攻击者在一台root过的移动设备中执行操作,以下为在移动设备中启动Frida服务的命令:
<br>
<code>$ adb shell
<code># sudo su
<code># /data/local/tmp/frida-server
<code><code>console.log("Starting...") <code>Java.perform(function () { <code><code>var MD5 = Java.use('com.mol.molwallet.view.MD5')<code><code>MD5.MD5Encode.implementation = function (arg)
<code><code>
<code> <code>console.log("Hooking class MD5 - method MD5Encode") <code><code>//Étape supplémentaire - calculer la nouvelle signature<code><code>var ret_value = this.MD5Encode("groupId=1x9&userIds=95xxx7&token=b6fxxxd3-2xxc-4xxf-bxx7-7fxxxxa6")🎜🎜<code><code>console. log ("[+] signature= " + ret_value)🎜🎜<code><code>//Appelez la méthode avec les arguments d'origine pour que l'application ne plante pas.. 🎜🎜<code><code>var ret_value = this.MD5Encode(arg) //valeur originale🎜🎜<code><code>console.log("original ARG : " + arg) 🎜🎜<code><code>return ret_value;🎜🎜<code><code>}🎜🎜<code>})🎜🎜Mais pour exécuter Frida, un accès au niveau root est requis. Heureusement, j'ai également découvert une vulnérabilité côté serveur qui permet à un attaquant d'effectuer des opérations sur un appareil mobile rooté. Voici la commande pour démarrer le service Frida sur un appareil mobile : 🎜
$ frida -l frida.js -U com.mol.molwallet🎜<code>$ adb shell🎜🎜<code># sudo su🎜🎜<code># /data/local/ tmp/ frida-server🎜🎜Après cela, dans une autre fenêtre de terminal, exécutez la commande suivante : 🎜rrreee🎜Ensuite, dans l'appareil mobile, j'ouvre l'application Razer Payment, tout appel à la méthode hook "MD5Encode" Toutes les opérations exécuteront le script frida.js ci-dessus, et enfin je pourrai générer une signature d'utilisateur valide et correcte pour une demande d'utilisateur spécifique. Le cas de test ici est que je peux générer une signature d'utilisateur pour moi-même et l'utiliser comme. un identifiant de vérification. Le danger de rejoindre un groupe de discussion créé par d'autres utilisateurs est que vous pouvez rejoindre un groupe sans le savoir et ensuite obtenir le contenu de discussion d'autres personnes, ou cliquer pour recevoir et voler les enveloppes rouges envoyées par d'autres. 🎜🎜🎜🎜🎜🎜🎜🎜Autres problèmes de sécurité causés par 🎜🎜En utilisant la méthode ci-dessus, j'ai testé toutes les autres interfaces API affectées par Signature et j'ai découvert que la quantité d'enveloppes rouges partagées dans les discussions de groupe d'utilisateurs peut être obtenue à partir de ces interfaces API , de plus, vous pouvez modifier et afficher les enregistrements de transfert et les informations personnelles d'autres utilisateurs. 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!