Jun 10, 2008
83 Views

Combine local inclusion_HTTP Header_access logging

Written by

Combine “local inclusion + HTTP Header + access logging” attack

/—————————————————
Mục tiêu: Server
Mức độ nguy hiểm: khá cao
Mức độ phổ biến: có lẽ ko nhiều :-p
—————————————————/

I ) Sơ lượt:
Thông thường các web service thường có thêm chức năng ghi lại “nhật kí truy cập” của người dùng. Chức năng này giúp cho công việc quản lý website của mình trở nên dể dàng hơn. Nhưng từ chức năng này, chỉ cần 1 tí sơ xuất trong việc lập trình, 1 lỗi nhỏ (local inclusion) có thể giúp cho attacker xâm nhập vào website đó.

II ) Nói về “local inclusion”:
Chú ý: Ở đây chúng ta sẽ lấy ví dụ với Apache, “webroot” là /home/hostings/webs/victim.net/htdocs/ và code lỗi có dạng:

<?php
&#8230;
include(&#8220;/home/hostings/webs/victim.net/htdocs/web/”.$_GET[‘html’]);
&#8230;
?>

(Link vd: _http://www.victim.net/index.php?html=xyz.html)

Với đọan code lỗi như trên attacker chỉ có thể include được các file nằm trong server mà thôi (giới hạn thì tùy theo trường hợp, cấu hình của server, ở đây lấy ví dụ là có thể cat được /etc/passwd) và attacker có thể khai thác bằng cách đưa file chứa code “độc” (có thể là html, txt, các dạng file ảnh.v.v.) lên server và include chúng. (ở chủ đề này ta ko nói sâu về file inclusion, có thể xem lại bài “PHP file include, phát hiện – khai thác và khắc phục” của QVT trước đây)
Nhưng, nếu như atttacker ko được phép đưa bất cứ gì lên website đấy. Họ sẽ làm thế nào ??

Apache (đang nói đến trong ví dụ) sẽ giúp họ thực hiện việc này.

II ) Nói về “HTTP Header” và “access logging”:
QVT chưa học về những cái này, chỉ biết một request bình thường có dạng:

GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword,
application/x-shockwave-flash, */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)
Host: www.victim.net
Referer: www.hvaonline.net
Connection: keep-alive

Và “nhật kí” sẽ được ghi lại (đại lọai) như sau:
(giả sử tiếp file log nằm tại: /home/hostings/webs/victim.net/logs/access_log – cái này vẫn tùy vào từng trường hợp khác nhau mà tùy biến)

218.56.8.71 – – [01/Aug/2007:05:21:38 +0200] “GET / HTTP/1.1” 200 20507 “www.hvaonline.net” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) [en]”

Nói đến đây, chắc mọi người đã có thể đóan được attacker sẽ làm gì tiếp theo rồi phải ko ạh.

III ) “Tấn công”:

Khi không thể đưa gì lên server (thông qua upload hay đại lọai vậy), thì cơ chế “ghi nhật kí” sẽ trở thành 1 “công cụ” khá hữu ích cho attacker. Attacker sẽ gửi 1 HTTP request đến Apache và thay những thứ “sẽ được ghi vào log” bằng những code “độc” theo ý mình để “excute” nó.

GET <?php phpinfo(); ?> HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword,
application/x-shockwave-flash, */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)
Host: www.victim.net
Referer: <?php phpinfo(); ?>
Connection: keep-alive

Khi đấy, “nhật kí” sẽ có thêm:

218.56.8.71 – – [01/Aug/2007:05:21:38 +0200] “GET <?php phpinfo(); ?> HTTP/1.1” 200 20507 “<?php phpinfo(); ?>” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) [en]”

Để thực hiện công việc này, attacker có thể sử dụng web browser, lập trình socket bằng các ngôn ngữ, hay sử dụng “IE HTTP Analyzer”, hoặc “InetCrack” .v.v. rất nhiều cách.
Nhưng, làm thế nào để excute code ấy khi nó ko phải là file PHP? Lợi dụng “mine type unknow” của Apache? Không thể vì access_log nằm ngoài “webzone” nên client (tức attacker) không thể chạy nó trực tiếp được.
Àh, chúng ta vẫn còn “local inclusion”, trở lại (II). Đến đây, attacker sẽ sử dụng “local inclusion” để include file log khi ấy những code đã được đưa vào ở trên sẽ được excute, khi ấy công việc “exploit” gần như là thành công, nhưng, nó cũng kèm với 1 số khó khăn của phương pháp này :-S.

Link vd: http://www.victim.net/index.php?html…ogs/access_log
Mở rộng hơn 1 tí, ta có thể áp dụng phương pháp này vào nhìu ứng dụng khác (các ứng dụng cho phép ghi log.v.v.) để mở rộng exploit.

IV ) Nhược điểm:

1. File log thường rất lớn dẫn đến việc include sẽ gặp khó khăn, dễ time-out (có nhìu site cho ghi log theo từng ngày, nên chọn lúc 0h00 hãy attack, khi ấy log của ta sẽ nằm ở đầu file). Nhưng tệ hơn hết là website ấy… tắt lun việc ghi log => phá sản.
2. Việc tìm đường dẫn của file log cũng ko phải là 1 vấn đề đơn giản.
3. Những giới hạn của server.v.v.

V ) Giải pháp (??):

Tránh bị inclusion dưới mọi hình thức. Xét request trước khi cho ghi log (hình như ko khả thi)..

VII ) Bổ sung:

Ta có thể lợi dụng chức năng “ghi nhật kí” của FTP service có thể sẽ cho kết quả tốt hơn.
Lý do:
1/ Apache được phép truy cập log của FTP service & log này thường mặc định, dễ tìm.
2/ Log của FTP service thường nhỏ nên thơi gian include sẽ thấp hơn.

Đối vối inclusion bị chặn đuôi file. Vd: include($file.”.php”); ta có thể dùng null char (%00) để cắt đuôi nó.

Article Tags:
· · · · · · ·
Article Categories:
Bug & Security
    http://linholiver.com

    https://linholiver.com/diary/about/