# rosegarden - 1000
__Description__
Rosé is a beautiful singer with a sweet voice, but she is so much busy and she needs more staff to work in her garden. http://45.77.247.11/
__Solution__
Visiting the website we can see there are images of girl named `Rose`. And there's a option on `/request` to send some requests which seems the only interesting thing about the website.
After some more recom we find that there's a `robots.txt` on the website and accessing that URL we find `source.zip`
![](Images/robots.png)
We can download the source using `curl` or by visiting the http://45.77.247.11/source.zip in your browser.
![](Images/curl.png)
Inside that zip is a [`app.py`](app.py), Looking at the source we can see that we have to send the request from `127.0.0.1:3333` but if we do that we get an error
![](Images/fail.png)
That's because there are few checks performed in `check_func` function.
```pythonasync def check_func(hostname, port):    try:        if len(hostname.split('.')) != 4: 0/0
        if '127.' in hostname or '.0.' in hostname or '.1' in hostname: 0/0
        if inet_aton(hostname) != b'\x7f\x00\x00\x01': 0/0
        if not port: port = 80
        result = []        with ThreadPoolExecutor(max_workers=3) as executor:            loop = asyncio.get_event_loop()            tasks = [                loop.run_in_executor(                    executor,                    lambda u: requests.get(u, allow_redirects=False, timeout=2),                    url                ) for url in [f'http://{hostname}:{port}', 'http://127.0.0.1:3333']            ]            for res in await asyncio.gather(*tasks):                result.append(res.text)    except:        return False
    return result[1] if result[0] == result[1] else False```
* `if len(hostname.split('.')) != 4: 0/0`
    This checks that the length of the hostname must be `4` or it will raise `dividing by zero error`
    ![](Images/zero.png)
* `if not port: port = 80`
    If port not given then take port to be `80`
* `if '127.' in hostname or '.0.' in hostname or '.1' in hostname: 0/0`
    This check is the main and important check. This check that there should be `127.` or `.0.` or `.1` in the hostname else it will raise `ZeroDivisionError`
This check can easily be bypassed but using the octal or hex representation of `127.0.0.1`. We used octal representation for this `0177.00.00.01:3333`
![](Images/flag.png)
**FLAG**: `ISITDTU{warmup task is not that hard}`