背景
2017年12月8日に、iOS用アプリケーションの新しいバージョンがリリースされました。 設計を更新し、軽微な欠陥などを修正しました。 など 電話でアプリケーションをダウンロードした後、私は問題に遭遇しました:認証手順を完了することができませんでした。 ログインフィールドに契約番号、電話番号、およびメールの両方を入力しようとしました-何も助けませんでした。すべての試みは失敗に終わりました。
この問題はアプリケーションでのみ確認され、サイトは問題なく機能しました(そして機能しました)-私は完全に参加できました。 エラーメッセージはあまり情報的ではありません。 何が悪かったのですか?
アプリケーショントラフィック分析
患者が生きたくない理由を確立するために、mitmproxyプログラムを使用します。 これにより、アプリケーションとサーバー間の通信を確認できます。
クライアント要求とサーバー応答を受信するために認証を試みます。
答えから判断すると、無効なタイムスタンプが渡されます。
リクエストを見てください:
タイムスタンプ$ cフィールドは、リクエストが送信された時刻を送信するために使用されます。 このような問題でクライアントを信頼する理由がわかりませんか?
問題解決
開発者は、人々が異なる形式の時間を使用しているという事実を考慮していませんでした。 12時間形式(私の場合のように)がある場合、 タイムスタンプは正しく形成されないため、サーバーで要求を検証できません。 電話設定の時刻表示形式を24時間に変更し、認証に成功しました。 要求の違いは、24時間のタイムスタンプ形式にAM / PMがないことです。
正しいリクエストは次のようになります。
電話番号またはメールアドレスで計算
認証段階でのアプリケーショントラフィックの分析中に、システムの非常に興味深い欠陥に出会いました。 「パスワードの回復」機能の不正な動作。 彼女は非常に興味深い情報を提供します。
要求は次のとおりです。
param_values_arr $ cパラメーターに興味があります。
- Interzet / DomRUサービスのユーザーの契約番号を渡すと、契約に添付されている連絡先情報(電話番号、メールアドレス)が取得されます。
- 電話番号または電子メールアドレスを渡すと、応答にユーザーの正確な住所が表示されます。
回答例:
私たちは自分のアパートの正確な住所を確認し、これが大失敗であることを理解し、笑顔で手を振る!
PS :すべてがサイト上で正しく動作し、アドレスがアスタリスクで閉じられているようです:)
ところで、データベースにユーザーがいない場合にサーバーが生成するエラーから判断すると、デバッグモードはサーバーで有効になっています。 理由がわかりませんか?
<debug> <![CDATA[debug$n=24: exception: ORA-20001: debug=2 backtrace: ORA-06512: at "EXCELLENT3.WEBCAB_XML_PROC", line 6264 ORA-06512: at line 1 ORA-06512: at "EXCELLENT3.WEB_CABINET", line 1064 ]]> </debug>
繰り返す方法
各都市には、独自のデータベースとURLがあります。 以下は、サンクトペテルブルク市の例です。
cURLを介した簡単なリクエスト:
curl "https://spb.db.ertelecom.ru/cgi-bin/ppo/es_webface/web_cabinet.get_info\ ?param_names_arr%24c=client_contact\ ¶m_values_arr%24c=habr@example.com\ ¶ms=get_agr_list_contact_xml"
habr@example.comを必要な電話番号またはメールアドレスに変更します。
更新:問題は修正され、アドレスはアスタリスクで閉じられました。
すべての情報は情報提供のみを目的として提供されています。 この記事の資料によって引き起こされる可能性のある損害または損害について、私は責任を負いません。