Python input() vulnerability

Dạo gần đây tôi hay viết nhiều script bằng python, tự nhiên phát hiện ra 01 trường hợp gõ linh tinh, nhưng lỗi lại trả về lỗi không tìm thấy biến có tên là giá trị tôi nhập vào. Cứ ngỡ là RCE được nhưng đúng là RCE được thật, search trên mạng hóa ra lỗi có từ lâu rồi.

Tại Python 2, chúng ta có 02 hàm nhận giá trị input của người dùng là input()raw_input(), trong khi đó Python 3 chỉ có hàm input(). Điều khác biệt là raw_input sẽ nhận giá trị người dùng và chuyển đổi nó thành string, còn input() giữ nguyên kiểu dữ liệu của giá trị đưa vào. Do đó hacker có thể lợi dụng điểm yếu này để đưa vào các biến, hàm (tương đương code injection) để khai thác ứng dụng.

Tham khảo trường hợp bị lỗ hổng Python Input như sau:

a = input("Nhap gia tri=")
print a

Thực hiện nhập giá trị 1+1, ta thấy chương trình thực thi giá trị ta nhập vào:

Chốt hạ, ta có thể dùng hàm system bằng cách sau, game over:

__import__("os").system("whoami")

Rồi đến một ngày tôi nhận thấy một chall dễ trên DawgCTF 2021, nhận thấy trường hợp này quen quen:

Thử dùng module __builtin__ để thực câu lệnh ls, được luôn:

Lấy flag thôi:

Tham khảo tại:

Published by Nhat Truong

Hi

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: