File Traverse – PHP

File Traverse là gì ?
File Traverse hay còn gọi là “dot-dot-slash” nghĩa là “../”, lỗi sinh ra như sau:

Code:
<?php

[…]

$fp = fopen(“/path/{$_GET[‘filename’]}.txt”, ‘r’);

[…]

?>

Như tên gọi dot-dot-slash, ta sử dụng ../ và NULL Byte để truy cập đến các cấp thư mục cao hơn, vd như:

Code:
http://remote_host/path/bug.php?filename=../../../../path_of_another_file/file%00
http://remote_host/path/bug.php?filename=../../../../etc/passwd%00

Fix lỗi:
Sử dụng hàm basename() để cắt bỏ phần trước “/” của đường dẫn, nghĩa là

Code:
<?php
$path = “/home/httpd/html/index.php”;
$file = basename($path);         // $file is set to “index.php”
?>

Code được fix:

Code:

<?php

$clean = array();

if (basename($_GET[‘filename’]) == $_GET[‘filename’])
{
$clean[‘filename’] = $_GET[‘filename’];
}
else
{

[…]

}

$fp = fopen(“/path/{$clean[‘filename’]}.txt”, ‘r’);

?>
Bài của Jutoms (vniss – matrix2k )

  1. Chưa có phản hồi.
  1. No trackbacks yet.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: