Hello there, ('ω')ノ
自分のプロファイルデータを台無しにした方法を。
脆弱性:
承認の欠陥
記事:
https://medium.com/@himmat1005/how-i-messed-up-my-own-profile-data-94a4b09cb54c
今回は、Webアプリケーションの1つをテストしているときに。
経験したことの1つを共有することに。
1.ウェブサイトにログイン⇨Go to profile⇨Change ‘username’ field (test_user)⇨
submit⇨BurpSuitでリクエストをインターセプトして転送すると。
次のようにリクエストとレスポンスが表示されて。
リクエスト :
PATCH /redacted/updateProfile
……
{‘user’:’test_user’}
レスポンス :
HTTP/1.1 200 OK
{‘user’:’test_user’,’number’:’9999999999',’email’:’test@gmail.com’,’first’:’test’,’last’:’user’….}
2.ここで、Webサイトの機能に従ってユーザがPROFILEセクションから。
電話番号を変更する場合は、最初にOTPを送信してから送信する必要があって。
3.なので、次のリクエストを送信して、/updateProfileAPIを使用して。
電話番号を直接更新することを考えて。
リクエスト :
PATCH /redacted/updateProfile
……
{‘user’:’test_user’,’number’:’1234567890'}
レスポンス :
HTTP/1.1 401 Unauthorized
…..
{‘error’,’Updating Phone-number requires an OTP paramater’}
4.したがって、リクエストでもOTPを送信する必要があって。
5.PUT http-methodはレコードの更新にも使用されるため。
リクエストでPATCH http-method をPUTに変更し。
Burp Suiteからそのリクエストを転送すると。
リクエスト :
PUT /redacted/updateProfile
……
{‘user’:’test_user’,’number’:’1234567890'}
レスポンス :
HTTP/1.1 200 OK
{‘username’:’test_user’,’number’:’1234567890',’email’:’test@gmail.com’,’first’:’test’,’last’:’user’….}
6.この反応を見て、うまくいきそうにおもったのですが。
7.ログアウトして自分のユーザ名で再度ログインするとページ全体が壊れていて。
自分の名前やその他のプロファイル情報も見ることができず。
すべてのフィールドデータのいたるところにUNDEFINEDが表示されていて。
うまくいかなかった原因として、PATCH http-methodを使用してデータを送信すると。
サーバはその特定のデータ、またはパラメータのみを更新することに気付いて。
PATCHリクエストに以下の本文がある場合、「username」のみが更新されて。
リクエスト本文:
{‘username’:’test_user’}
ただし、PUT http-methodを使用してデータを送信する場合、サーバは。
リクエスト本文に記載されている特定のパラメータではなく。
ほとんどの場合、レコード全体を更新するためにそれを使用して。
(注:API構成にも依存しますが、ほとんどの場合発生して)。
つまり、以下のリクエスト本文を送信すると。
リクエストとともに送信されなかったすべてのパラメータ。
(たとえば、「first」、「last」、「email」など)にNULLを入力することで。
ユーザーのレコード全体が更新され、プロファイルにUNDEFINEDが表示されて。
リクエスト本文:
{‘username’:’test_user’,’number’:’1234567890’}
PUT⇨PATCHもしくは、PATCH⇨PUTへの変更は。
いくつかの制限を回避するのに役立つ場合があって。
PUTを使用すると、レコード全体が更新されるため。
特定のユーザに関連するすべてのデータが混乱する可能性があることに注意して。
Best regards, (^^ゞ