Tìm hiểu các lỗ hổng trong Python 2

Apr 09 2022
Giới thiệu Tổ chức Lập trình Python đã đưa ra một tuyên bố thông báo rằng họ đã chọn gỡ bỏ Python2 vào ngày 1 tháng 1 năm 2020, có hiệu lực ngay lập tức. Hơn nữa, họ tuyên bố rằng “nếu bạn yêu cầu hỗ trợ với phần mềm Python 2, nhiều tình nguyện viên sẽ sẵn lòng hỗ trợ bạn, nhưng theo thời gian, số lượng tình nguyện viên sẵn sàng hỗ trợ bạn sẽ giảm dần.
Ảnh của Hitesh Choudhary trên Unsplash

Giới thiệu

Tổ chức Lập trình Python đã đưa ra một tuyên bố thông báo rằng họ đã chọn gỡ bỏ Python2 vào ngày 1 tháng 1 năm 2020, có hiệu lực ngay lập tức.

Hơn nữa, họ nói rằng “nếu bạn yêu cầu hỗ trợ với phần mềm Python 2, nhiều tình nguyện viên sẽ sẵn lòng hỗ trợ bạn, nhưng theo thời gian, số lượng tình nguyện viên sẵn sàng hỗ trợ bạn sẽ giảm dần”. Nó sẽ được khám phá chi tiết trong bài đăng blog này nguyên nhân là gì, hậu quả bảo mật là gì và những lỗi bảo mật nào đã được phát hiện và khai thác.

Phiên bản cuối cùng của Python 2.0 được phát hành vào ngày 16 tháng 10 năm 2000 . Kể từ đó, Quỹ Lập trình Python đã liên tục tung ra các bản cập nhật, bổ sung các tính năng và thực hiện những thay đổi lớn trong ngôn ngữ lập trình. Vào năm 2006, họ đã đưa ra Python 3.0, nhưng đến lúc đó hầu hết mọi người đều đã sử dụng Python 2. Nhiều người không cân nhắc việc nâng cấp lên Python 3.0 nên họ đã làm việc trên cả Python 2 và Python 3.

Mặc dù Python 2 không còn nhận được hỗ trợ chính thức, chúng ta không thể bỏ qua thực tế là phần lớn các ứng dụng thương mại vẫn được phát triển bằng Python2 và đại đa số các tổ chức không có kế hoạch chuyển sang Python3. Phần lớn kho lưu trữ trên GitHub được viết bằng Python2 và đại đa số các gói đều có sẵn cho Python2. Lần cuối cùng bạn sử dụng pip3 thay vì pip để cài đặt một gói mà bạn thích là khi nào?

Tính đến thời điểm hiện tại, có tổng cộng 85 lỗ hổng được liệt kê trong Python2 và Python3. Bạn có thể tìm thấy danh sách đã kiểm duyệt của tất cả những lỗ hổng bảo mật đó tại đây . Các lỗ hổng đã được tìm thấy trong lõi Python và các gói. Mặc dù hầu hết chúng có thể không có bản khai thác công khai và nó hoạt động khá tốt theo hướng có lợi cho nhiều công ty sử dụng các thành phần dễ bị tấn công.

Trong bài đăng trên blog này, chúng ta sẽ thảo luận về một lỗ hổng trong Python2 có thể được sử dụng để tiết lộ các giá trị nhạy cảm và cuối cùng dẫn đến việc bỏ qua các kiểm tra quan trọng.

Các lỗ hổng trong python2

Các lỗ hổng trong Python2

Ở đây, chúng ta sẽ khai thác hàm input () trong Python2. Điều quan trọng cần lưu ý là lỗ hổng này chỉ có thể được tìm thấy trong Python2.

Python2 có hai cách để chấp nhận đầu vào là input ()raw_input () . raw_input () đã bị xóa trong Python3 và chức năng được cấp cho input () trong Python3. Nhưng sau đó điều gì đã xảy ra với đầu vào () từ Python2?

Đầu tiên chúng ta hãy hiểu sự khác biệt giữa Python2 và Python3.

input (): Hàm này sẽ chấp nhận đầu vào ở trạng thái nguyên trạng và sẽ không sửa đổi kiểu của nó.

raw_input (): Hàm này sẽ chấp nhận đầu vào từ người dùng và chuyển nó thành kiểu chuỗi, cho đến khi được chỉ định rõ ràng theo cách khác.

Trong ví dụ dưới đây, tôi đã tạo một Chương trình Python chấp nhận đầu vào của người dùng. Đầu tiên nó chấp nhận đầu vào thông qua hàm đầu vào và sau đó nó sử dụng hàm raw_input để chấp nhận đầu vào.

Sự khác biệt giữa hai chức năng đầu vào

Như có thể nhìn thấy từ đoạn mã trên, đối với cùng một kiểu đầu vào số nguyên, hàm raw_input tự động chuyển đổi nó thành kiểu chuỗi, trong khi hành vi này không được hiển thị bởi hàm đầu vào và kiểu dữ liệu của hàm không thay đổi.

Nhưng làm thế nào để điều này trở thành một lỗ hổng?

Khai thác lỗ hổng này, người dùng độc hại có thể cung cấp giá trị đầu vào giống với (các) biến được xác định trong chương trình python. Đến lượt nó, điều này sẽ không được trình thông dịch Python2 hiểu là đầu vào và có thể dẫn đến xác thực và các bỏ qua logic khác. Hãy hiểu điều này bằng một ví dụ đơn giản.

ví dụ 1

Giả sử chúng ta đã viết một tập lệnh Python cho tài khoản quản trị viên. Thao tác này lấy mật khẩu do người dùng cung cấp và sau đó so sánh nó với một giá trị được mã hóa cứng. Nếu giá trị bằng “ 1234abcd ” thì chỉ nó mới in “ Đăng nhập thành công

Mã nguồn

Đoạn mã mà tôi đã viết được hiển thị trong hình ảnh trên

Everything looks fine until you realize that a user can login without having to supply the password. All the user has to know is the name of the variable that holds the value of the password. So, the user just supplies passwd as the inputs and since only string is being matched, the user will be able to login.

Exploiting the Vulnerability

Example 2

Another example we can take is of a simple python program which accepts input from the user and then prints it on the screen. We are simply using the input() function to fetch the user inputs.

Source Code

Here, if you supply 2+2 as the input, it’ll be executed by the input() function.

Exploiting this Vulnerability

Note: This vulnerability isn’t applicable in Python3

This, as you can expect, can be pretty harmful and can have dangerous consequences. It might lead to some severe vulnerabilities or DOS as the user might provide them with a very long string such as 566666666666666666666666666**4646 which might take a lot of time and resources to process.

For example, if a malicious user imports the OS module, he can execute code on the server, hence leading to Remote Code Execution. A snippet of the same has been provided below.

Code Execution

As evident from the snippet above, we’ve imported the os module which provides the functionality of interacting with the Operating System.

This shows that the input function (in Python2) not only accepts the input from the user but also executes it.

Conclusion

Đây chỉ là một vài trong số rất nhiều lỗ hổng trong ngôn ngữ lập trình Python2 đã được phát hiện. Mặc dù thực tế là các khai thác công khai có thể không khả dụng vào lúc này. Tuy nhiên, thực tế là các lỗ hổng đã được xác định cho thấy rằng chúng có khả năng bị khai thác. Do đó, cần phải chuyển sang Python3. Có thể các lỗ hổng tiếp theo sẽ được phát hiện trong tương lai. Có thể những kẻ tấn công đang đào sâu vào mã nguồn Python2 để phát hiện và khai thác các lỗ hổng do số lượng lớn các tổ chức vẫn đang chạy trên Python2. Khi tiền cược cao, những kẻ tấn công sẵn sàng đi đến độ dài lớn hơn để giành được lợi thế trước mục tiêu của họ.

© Copyright 2021 - 2023 | vngogo.com | All Rights Reserved