[Question] Xin xem xét dùm bảo mật site rongchaua.net |
08/08/2011 13:35:07 (+0700) | #1 | 244738 |
|
rongchaua
Elite Member
|
0 |
|
|
Joined: 19/01/2003 04:09:23
Messages: 124
Offline
|
|
Chào mọi người,
vừa rồi mình vừa nhận một comment trên blog là file proxy.php của mình làm lộ toàn bộ local files.
Xem comment ở đây: http://rongchaua.net/blog/html5-audio-tag-cross-domain
Xử lý:
- Thay đổi proxy.php thành proxy.txt
- Thay đổi thông tin trên file config của Wordpress và password administrator.
- Đang tiến hàng quyét virus trên host.
- và nên làm gì tiếp theo???
Câu hỏi:
- File proxy.php ở đây http://rongchaua.net/Web/Tmp/proxy.php mình đã đổi thành http://rongchaua.net/Web/Tmp/proxy.txt . Mình muốn hỏi là với cấu trúc code như trên thì làm thế nào có thể view được local files của mình?
- Các bước tiếp theo nên làm gì???
Cám ơn. |
|
My website: http://rongchaua.net |
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
08/08/2011 14:34:54 (+0700) | #2 | 244745 |
TQN
Elite Member
|
0 |
|
|
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
|
|
Đúng rồi đấy, anh dùng Web Vulnerability Scanner quét một cái, toàn bộ Web, blog, file, source của em lòi ra hết ! |
|
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
08/08/2011 15:12:46 (+0700) | #3 | 244747 |
|
rongchaua
Elite Member
|
0 |
|
|
Joined: 19/01/2003 04:09:23
Messages: 124
Offline
|
|
Cám ơn anh, thật ra thì những cái trên web em đều mang tính public. Em muốn tìm hiểu kỹ vì không biết nó có show được tới thư mục mail hay không vì như thế cũng hơi phiền một chút.
Nhưng vấn đề là cái "proxy.php", code nó bị bug gì mà nó có thể cho xem cả những file không thể xem được ví dụ như file này "http://rongchaua.net/blog/wp-config.php". Vì trong file này sẽ lưu password và username kết nối đến database đằng sau đó. Và thằng proxy.php bằng lỗi gì đó, có thể thông qua lỗi đó mà xem thông tin toàn bộ thư mục hoặc ví dụ như là show thông tin thằng wp-config.php.
Cái này em nghĩ là chắc chắn đã bị dính đòn vì acc Twitter (dùng để ghi chú chơi game ) của em nó cũng báo trong ngày đó là có người thâm nhập do cái pass này với pass bên Twitter là cùng một pass.
|
|
My website: http://rongchaua.net |
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
08/08/2011 15:23:48 (+0700) | #4 | 244750 |
|
WinDak
Researcher
|
Joined: 27/01/2002 11:15:00
Messages: 223
Offline
|
|
Anh rongchaua set permission thế nào ?
Nếu cấu trúc file như thế chẳng phải là chỉ cần
proxy.php?url=proxy.php
là download được file proxy.php về sao ? cho dù header là file nhạc nhưng nội dung vẫn là text ? |
|
-- w~ -- |
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
08/08/2011 15:57:21 (+0700) | #5 | 244751 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
rongchaua wrote:
Chào mọi người,
vừa rồi mình vừa nhận một comment trên blog là file proxy.php của mình làm lộ toàn bộ local files.
Xem comment ở đây: http://rongchaua.net/blog/html5-audio-tag-cross-domain
Xử lý:
- Thay đổi proxy.php thành proxy.txt
- Thay đổi thông tin trên file config của Wordpress và password administrator.
- Đang tiến hàng quyét virus trên host.
- và nên làm gì tiếp theo???
Câu hỏi:
- File proxy.php ở đây http://rongchaua.net/Web/Tmp/proxy.php mình đã đổi thành http://rongchaua.net/Web/Tmp/proxy.txt . Mình muốn hỏi là với cấu trúc code như trên thì làm thế nào có thể view được local files của mình?
- Các bước tiếp theo nên làm gì???
Cám ơn.
Nếu em dùng php module trực tiếp với apache thì cách an toàn nhất là:
1. Tạo một thư mục duy nhất cho phép chạy php và chmod thành read only cho thư mục ấy tất cả các file trong thư mục ấy. Ví dụ, thư mục ấy ở /home/someone/public_html/src chẳng hạn thì chuyển sang thư mục ấy và: chmod ugo-wx . (để ý dấu chấm) và chmod ugo-wx *
2. Trên apache config (httpd.conf hoặc bất cứ config cụ thể nào được Include với httpd.conf có liên quan đến site của em), thêm mấy thứ như sau:
a. Set ngay trong <VirtualHost....> </VirtualHost> directive:
php_admin_value open_basedir /home/someone/public_html/
php_admin_value doc_root /home/someone/public_html/
php_admin_value upload_tmp_dir /home/someone/public_html/tmp
php_admin_value upload_max_filesize 8M
php_admin_value include_path none
trong đó, phần màu đỏ là thư mục chứa trang web của em phần màu cam là ấn định kích thước file tối đa được upload (nếu em cho phép upload). Phần màu vàng rất quan trọng vì nó giới hạn chặt chẽ không cho phép include bên ngoài "doc_root" của em.
b. Tạo directive <Location> cụ thể cho khu vực không được chạy php. Ví dụ:
<Location /files/>
RemoveHandler .php
php_flag engine off
Options -Includes -Indexes
</Location>
<Location /site/images/>
RemoveHandler .php
php_flag engine off
Options -Includes -Indexes
</Location>
trong, đó thư mục "files" chỉ chứa các file nào đó chớ chẳng có php, thư mục "site/images" chỉ chứa hình chớ chẳng có php file nào hết.
Các flag màu đỏ cực kỳ quan trọng vì nó hoàn toàn huỷ bỏ handler php nên không thể parse và run php ở những thư mục ấy. Chẳng những vậy nó còn huỷ bỏ khả năng "Include" từ những thư mục ấy để đề phòng trường hợp ai đó upload một file php nhưng giả mạo như một gif file chẳng hạn rồi thực thi "include".
Nói chung, 2 lỗ hổng lớn nhất của php là cho phép: include + run bất kể nơi nào. Nếu thắt chặt 2 điểm này thì php an toàn. Nếu paranoid hơn nữa thì nên compile apache để thực hiện chế độ Suexec và buộc account nào đó run php hoàn toàn tách rời và có chủ quyền rất giới hạn trên filesystem.
Good luck.
PS: nếu được, nên chạy php-fpm để isolate giữa công tác parse + run php và công tác i/o files trên apache thì vững hơn.
|
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
08/08/2011 17:11:33 (+0700) | #6 | 244754 |
|
rongchaua
Elite Member
|
0 |
|
|
Joined: 19/01/2003 04:09:23
Messages: 124
Offline
|
|
Hi anh conmale,
cám ơn góp ý của anh nhưng em đang dùng share host (của Bluehost) nên không biết có chỉnh được không nhưng em chắc chắn sẽ xem lại sau giờ làm vào tối nay.
Thân. |
|
My website: http://rongchaua.net |
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
08/08/2011 18:44:06 (+0700) | #7 | 244759 |
cino
Member
|
0 |
|
|
Joined: 29/11/2010 00:50:44
Messages: 37
Offline
|
|
Bác cho em hỏi
conmale wrote:
RemoveHandler .php
php_flag engine off
Options -Includes -Indexes
Nếu ở directory bị mất kiểm soát được/bị override ngược lại thì việc thiết lập trên có hiệu quả không bác? ví dụ:
AddHandler .php
php_flag engine on
Options +Includes +Indexes
conmale wrote:
PS: nếu được, nên chạy php-fpm để isolate giữa công tác parse + run php và công tác i/o files trên apache thì vững hơn.
Em vào trang http://php-fpm.org thấy không được bác ạ. Bác cho em ý niệm về việc isolate này hoặc hint cho em chỗ vọc được không? |
|
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
08/08/2011 19:56:15 (+0700) | #8 | 244762 |
vd_
Member
|
0 |
|
|
Joined: 06/03/2010 03:05:09
Messages: 124
Offline
|
|
// Website url to open
$daurl = $_GET['url'];
// Get that website's content
$handle = fopen($daurl, "r");
giờ nếu tui để proxy.php?url=/etc/passwd thì fopen thành fopen('/etc/passwd',"r")
giải pháp:
- chỉnh httpd.conf để không cho access vào / (<Directory> </Directory>, cái này chắc host provider đã làm
- check $daurl và chỉ pass cho fopen() những gì bạn muốn access
Nguyên tắc: không bao giờ trust client's input
|
|
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
08/08/2011 21:29:08 (+0700) | #9 | 244770 |
cr4zyb0y
Member
|
0 |
|
|
Joined: 27/05/2010 11:50:30
Messages: 51
Offline
|
|
chẹp, ai viết cái proxy.php ghia vậy trời.
rm proxy.php |
|
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
09/08/2011 04:59:36 (+0700) | #10 | 244777 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
cino wrote:
Bác cho em hỏi
conmale wrote:
RemoveHandler .php
php_flag engine off
Options -Includes -Indexes
Nếu ở directory bị mất kiểm soát được/bị override ngược lại thì việc thiết lập trên có hiệu quả không bác? ví dụ:
AddHandler .php
php_flag engine on
Options +Includes +Indexes
Bồ nên đọc thêm ở đây:
http://httpd.apache.org/docs/2.2/howto/htaccess.html
Nếu sử dụng "shared host" thì vấn đề bảo mật nằm trong tay của nhà cung cấp dịch vụ. Muốn bảo mật thì cần kiện toàn, muốn kiện toàn thì cần quyền điều chỉnh mà nhà cung cấp dịch vụ kiểm soát quyền điều chỉnh thì đành... bó tay.
cino wrote:
conmale wrote:
PS: nếu được, nên chạy php-fpm để isolate giữa công tác parse + run php và công tác i/o files trên apache thì vững hơn.
Em vào trang http://php-fpm.org thấy không được bác ạ. Bác cho em ý niệm về việc isolate này hoặc hint cho em chỗ vọc được không?
php-fpm đã được đưa vào php chính thức từ 5.3.x trở đi (nhưng bồ phải compile lại thì mới có). Binaries tiêu chuẩn của nhiều distro vẫn chưa enable php-fpm.
Nếu bồ xem trong php-fpm.org thì ngay trang đầu nó có những thông tin sau:
What is PHP-FPM?
PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites.
These features include:
Adaptive process spawning (NEW!)
Basic statistics (ala Apache's mod_status) (NEW!)
Advanced process management with graceful stop/start
Ability to start workers with different uid/gid/chroot/environment and different php.ini (replaces safe_mode)
Stdout & stderr logging
Emergency restart in case of accidental opcode cache destruction
Accelerated upload support
Support for a "slowlog"
Enhancements to FastCGI, such as fastcgi_finish_request() - a special function to finish request & flush all data while continuing to do something time-consuming (video converting, stats processing, etc.)
... and much more.
It was not designed with virtual hosting in mind (large amounts of pools) however it can be adapted for any usage model.
|
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
09/08/2011 08:05:49 (+0700) | #11 | 244784 |
mv1098
Member
|
0 |
|
|
Joined: 18/07/2009 14:19:13
Messages: 119
Offline
|
|
Bro sử dụng thêm $allowedFileType để kiểm tra đầu vào
Ngoài ra mình có 1 đoạn code nhỏ để phòng chống sql injection
Bạn lưu lại thành file .php rồi include vào file php bạn muốn bảo vệ
Ngoài ra bạn có thể thêm vào $wormprotector các câu truy vấn nhạy cảm hoặc có thể là những text nhạy cảm.
Code:
<?php
$sqlinjectiontrack = $_SERVER['QUERY_STRING'];
$wormprotector = array('chr(', 'chr=', 'chr%20', '%20chr', 'wget%20', '%20wget', 'wget(',
'cmd=', '%20cmd', 'cmd%20', 'rush=', '%20rush', 'rush%20',
'union%20', '%20union', 'union(', 'union=', 'echr(', '%20echr', 'echr%20', 'echr=',
'esystem(', 'esystem%20', 'cp%20', '%20cp', 'cp(', 'mdir%20', '%20mdir', 'mdir(',
'mcd%20', 'mrd%20', 'rm%20', '%20mcd', '%20mrd', '%20rm',
'mcd(', 'mrd(', 'rm(', 'mcd=', 'mrd=', 'mv%20', 'rmdir%20', 'mv(', 'rmdir(',
'chmod(', 'chmod%20', '%20chmod', 'chmod(', 'chmod=', 'chown%20', 'chgrp%20', 'chown(', 'chgrp(',
'locate%20', 'grep%20', 'locate(', 'grep(', 'diff%20', 'kill%20', 'kill(', 'killall',
'passwd%20', '%20passwd', 'passwd(', 'telnet%20', 'vi(', 'vi%20',
'insert%20into', 'select%20', 'nigga(', '%20nigga', 'nigga%20', 'fopen', 'fwrite', '%20like', 'like%20',
'$_request', '$_get', '$request', '$get', '.system', 'HTTP_PHP', '&aim', '%20getenv', 'getenv%20',
'new_password', '&icq','/etc/password','/etc/shadow', '/etc/groups', '/etc/gshadow',
'HTTP_USER_AGENT', 'HTTP_HOST', '/bin/ps', 'wget%20', 'uname\x20-a', '/usr/bin/id',
'/bin/echo', '/bin/kill', '/bin/', '/chgrp', '/chown', '/usr/bin', 'g\+\+', 'bin/python',
'bin/tclsh', 'bin/nasm', 'perl%20', 'traceroute%20', 'ping%20', '.pl', '/usr/X11R6/bin/xterm', 'lsof%20',
'/bin/mail', '.conf', 'motd%20', 'HTTP/1.', '.inc.php', 'config.php', 'cgi-', '.eml',
'file\://', 'window.open', '<SCRIPT>', 'javascript\://','img src', 'img%20src','.jsp','ftp.exe',
'xp_enumdsn', 'xp_availablemedia', 'xp_filelist', 'xp_cmdshell', 'nc.exe', '.htpasswd',
'servlet', '/etc/passwd', 'wwwacl', '~root', '~ftp', '.js', '.jsp', 'admin_', '.history',
'bash_history', '.bash_history', '~nobody', 'server-info', 'server-status', 'reboot%20', 'halt%20',
'powerdown%20', '/home/ftp', '/home/www', 'secure_site, ok', 'chunked', 'org.apache', '/servlet/con',
'<script', '/robot.txt' ,'/perl' ,'mod_gzip_status', 'db_mysql.inc', '.inc', 'select%20from',
'select from', 'drop%20', '.system', 'getenv', 'http_', '_php', 'php_', 'phpinfo()', '><?php', '?>', 'sql=');
$checkworm = str_replace($wormprotector, '*', $sqlinjectiontrack);
if ($sqlinjectiontrack != $checkworm)
{
$cremotead = $_SERVER['REMOTE_ADDR'];
$cuseragent = $_SERVER['HTTP_USER_AGENT'];
die( "Attack detected! <br /><br /><b>This attack was detected and blocked:</b><br />$cremotead - $cuseragent" );
}
?>
|
|
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
09/08/2011 10:52:56 (+0700) | #12 | 244793 |
cino
Member
|
0 |
|
|
Joined: 29/11/2010 00:50:44
Messages: 37
Offline
|
|
conmale wrote:
Bồ nên đọc thêm ở đây:
http://httpd.apache.org/docs/2.2/howto/htaccess.html
Cảm ơn bác,
Vậy là phải thiết lập AllowOverride None
và edit trong httpd.conf; Em muốn hỏi bác thêm là có cách nào chỉ enable cho .htaccess cấu hình với rewrite_url (mod_rewrite) ở directory mà không cho phép override các thứ khác ngoài rewrite không.
conmale wrote:
bồ xem trong php-fpm.org thì ngay trang đầu nó có những thông tin sau:
What is PHP-FPM?
Ability to start workers with different uid/gid/chroot/environment and different php.ini (replaces safe_mode)
Xin lỗi bác, lúc em vào là nó bị 'không truy cập được'.
Nhưng em vẫn chưa hiểu rõ đoạn
conmale wrote:
nên chạy php-fpm để isolate giữa công tác parse + run php và công tác i/o files trên apache thì vững hơn.
và đoạn bôi của bác
Ability to start workers with different uid/gid/chroot/environment and different php.ini (replaces safe_mode)
thì có khác gì với chroot cho apache khi có delicated server cho 1 site hông.
- Và gữa php-fpm, suhosin hay một implementation nào đó có chức năng củng cố bảo mật thì cái nào "ngon" nhất (theo bác). Performance kèm theo có bị ảnh hưởng gì không, hay đó là cái phải đánh đổi.
PS: Cảm ơn rongchaua vì cái topic này nhé! Hồi cách đây mấy năm mình cũng khá 'ái mộ' một số topic (hướng dẫn) 'decrypt' trên site của bạn (do google được). Tiếc là đến giờ trình vẫn còi vì cái gì cũng thích nhúng mũi vào. |
|
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
09/08/2011 12:43:01 (+0700) | #13 | 244798 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
cino wrote:
conmale wrote:
Bồ nên đọc thêm ở đây:
http://httpd.apache.org/docs/2.2/howto/htaccess.html
Cảm ơn bác,
Vậy là phải thiết lập AllowOverride None
và edit trong httpd.conf; Em muốn hỏi bác thêm là có cách nào chỉ enable cho .htaccess cấu hình với rewrite_url (mod_rewrite) ở directory mà không cho phép override các thứ khác ngoài rewrite không.
Cái này do httpd.conf hoặc bất cứ cấu hình nào dành cho virtualhost quyết định. Nếu ở level trên mà áp đặt AllowOverride None
thì tất cả những ấn định trong .htaccess cho từng directory cũng vô ích vì chẳng có giá trị nào hết. Bởi vậy, bảo mật ở cấp độ này hoàn toàn phụ thuộc vào nhà cung cấp dịch vụ.
cino wrote:
conmale wrote:
bồ xem trong php-fpm.org thì ngay trang đầu nó có những thông tin sau:
What is PHP-FPM?
Ability to start workers with different uid/gid/chroot/environment and different php.ini (replaces safe_mode)
Xin lỗi bác, lúc em vào là nó bị 'không truy cập được'.
Nhưng em vẫn chưa hiểu rõ đoạn
conmale wrote:
nên chạy php-fpm để isolate giữa công tác parse + run php và công tác i/o files trên apache thì vững hơn.
và đoạn bôi của bác
Ability to start workers with different uid/gid/chroot/environment and different php.ini (replaces safe_mode)
thì có khác gì với chroot cho apache khi có delicated server cho 1 site hông.
Hai câu trên tương tự nhau. Tính "isolation" nằm ở chỗ thay đổi (hoặc tách rời) uid/gid cho process chạy php-fpm chính là sự tách rời công tác parse + run php mà không động chạm đến read & write. Ví dụ, process chạy php-fpm gán cho account A để nó parse các file trong thư mục /abc chẳng hạn. Thư mục /abc này lại do account B own. Bởi vậy, php-fpm chỉ có thể parse + run php mà không thể upload (write) bất cứ thứ gì trên /abc cả. Bởi vậy, mọi cố gắng "up shell" để exploit đều thất bại.
Cũng trong tinh thần này, nếu website được account A chạy php-fpm và muốn cho phép upload hình ảnh lên thư mục /abc/xyz chẳng hạn thì có thể chỉnh để account A owns /abc/xyz nhưng lại set để "remove handler" và turn off php engine trên từng thư mục. Tất nhiên là httpd.conf trong môi trường "shared host" phải không được chi phối. Trên bình diện cấu hình cho php-fpm, có thể áp dụng trong php-fpm.ini những ấn định cho mỗi virtualhost tương tự như:
php_admin_value[open_basedir] = /home/someone/public_html/
php_admin_value[doc_root] = /home/someone/public_html/
php_admin_value[upload_tmp_dir] = /home/someone/public_html/tmp
php_admin_value[upload_max_filesize] = 8M
php_flag[cgi.force_wwwect] = 1
Làm như vậy, mọi ý định "remote include" đều không thể thực hiện được.
Tất nhiên, nếu webmaster mà tự ý upload một cái proxy.php củ chuối nào đó đầy lỗ hổng thì có trời mới cứu được vì đây không phải là lỗi của php hoặc php-fpm hoặc apache mà do chính người quản trị.
Trong trường hợp cực đoan, chroot cũng là một biện pháp tốt nếu muốn hoàn toàn isolate mỗi "khách hàng" trong một shared host server bởi vì khách hàng này không thể "include" files của khách hành kia hoặc một con php shell chạy bằng account chung để khởi tạo apache có thể thấy hết tất cả mọi thứ do apache own (thì chết toi).
cino wrote:
- Và gữa php-fpm, suhosin hay một implementation nào đó có chức năng củng cố bảo mật thì cái nào "ngon" nhất (theo bác). Performance kèm theo có bị ảnh hưởng gì không, hay đó là cái phải đánh đổi.
Cái này không thể so sánh được vì nó giống như so sánh cái nền nhà bằng xi măng với cái vách tường bằng gạch. Suhosin là một áp dụng cố gắng bảo vệ tránh những exploits thuộc dạng buffer và string format. Trong khi đó, php-fpm hoặc suexec hoặc chroot, uid, gid là những cố gắng tạo isolation. Suhosin giống như cái nền nhà không cho chuột đục thủng còn php-fpm hoặc chroot thì giống như ngăn cái nhà ra nhiều phòng cách biệt vậy . |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
09/08/2011 17:28:06 (+0700) | #14 | 244810 |
|
rongchaua
Elite Member
|
0 |
|
|
Joined: 19/01/2003 04:09:23
Messages: 124
Offline
|
|
Hôm qua đổi password của HVA mà quên thay pass nên không log vào được. Dùng chức năng reset password thì bị firewall HVA chặn. Hôm nay mới biết cách reset là copy cái link vào diễn đàn. Gà quá.
Tối qua sau khi xem xét lại thì đã phát hiện ra lỗi do tay nghề code php quá kém dẫn đến việc thông qua hàm fopen và file_get_contents mở local file. Ví dụ như sau:
http://rongchaua.net/Web/Tmp/proxy.php?url=/homeXXX/YYY/public_html/ZZZ/blog/wp-config.php
http://rongchaua.net/Web/Source/RSS%20Reader/proxy.php?url=/homeXXX/YYY/public_html/ZZZ/blog/wp-config.php
Hiện tại tạm thời xoá các file proxy.php để demo code. Sẽ sửa lại sau. Lần sau sẽ cẩn thận hơn trong việc post file php lên host. Cám ơn mọi người. |
|
My website: http://rongchaua.net |
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
09/08/2011 17:36:18 (+0700) | #15 | 244811 |
mv1098
Member
|
0 |
|
|
Joined: 18/07/2009 14:19:13
Messages: 119
Offline
|
|
Bro có thể tham khảo đoạn code dưới đây
Code:
<?php
@ob_end_clean();
// Only allow mp3 files
$allowedFileType = "mp3";
// Set the filename based on the URL's query string
$theFile = $_REQUEST['theFile'];
// Get info about the file
$f = pathinfo($theFile);
// Check the extension against allowed file types
if(strtolower($f['extension']) != strtolower($allowedFileType)) exit;
// Make sure the file exists
if (!file_exists($theFile)) exit;
// Set headers
header("Pragma: public");
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: private");
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
// Length required for Internet Explorer
header("Content-Length: ".@urldecode(@filesize($theFile)));
// Open file
if (($f = fopen($theFile, 'rb')) === false) exit;
// Push file
while (!feof($f)) {
echo fread($f, (1*(1024*1024)));
flush();
@ob_flush();
}
// Close file
fclose($f);
exit;
?>
|
|
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
15/08/2011 23:30:05 (+0700) | #16 | 245081 |
cino
Member
|
0 |
|
|
Joined: 29/11/2010 00:50:44
Messages: 37
Offline
|
|
conmale wrote:
php_admin_value[open_basedir] = /home/someone/public_html/
php_admin_value[doc_root] = /home/someone/public_html/
php_admin_value[upload_tmp_dir] = /home/someone/public_html/tmp
php_admin_value[upload_max_filesize] = 8M
php_flag[cgi.force_wwwect] = 1
Làm như vậy, mọi ý định "remote include" đều không thể thực hiện được.
Tất nhiên, nếu webmaster mà tự ý upload một cái proxy.php củ chuối nào đó đầy lỗ hổng thì có trời mới cứu được vì đây không phải là lỗi của php hoặc php-fpm hoặc apache mà do chính người quản trị.
Chào bác. Cảm ơn bác đã phân tích chi tiết. Em đã rõ cái "isolation" nhờ php-fpm mà bác nói, nhưng trở lại vấn đề file "proxy.php" (vấn đề theo bác là "có trời mới cứu được").
Code:
$handle = fopen($daurl, "r");
$buffer = fgets($handle, 4096);
echo $buffer;
Nếu webmaster đã "isolate" open_basedir, doc_root, upload_tmp, cấm .htaccess, php-fpm, cấm eval() của php... thì với lỗi không kiểm soát fopen, file_get_contents.... này của proxy.php sẽ gây tổn hại gì cho hệ thống? (cứ cho là thông tin db sẽ bị mất, nhưng db đó không chấp nhận remote connection thì làm sao, nếu là mã nguồn có bị lộ thì hệ thống cũng đâu bị ảnh hưởng gì?) |
|
|
|
|
[Question] Xin xem xét dùm bảo mật site rongchaua.net |
16/08/2011 02:41:41 (+0700) | #17 | 245083 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
cino wrote:
Chào bác. Cảm ơn bác đã phân tích chi tiết. Em đã rõ cái "isolation" nhờ php-fpm mà bác nói, nhưng trở lại vấn đề file "proxy.php" (vấn đề theo bác là "có trời mới cứu được").
Code:
$handle = fopen($daurl, "r");
$buffer = fgets($handle, 4096);
echo $buffer;
Nếu webmaster đã "isolate" open_basedir, doc_root, upload_tmp, cấm .htaccess, php-fpm, cấm eval() của php... thì với lỗi không kiểm soát fopen, file_get_contents.... này của proxy.php sẽ gây tổn hại gì cho hệ thống? (cứ cho là thông tin db sẽ bị mất, nhưng db đó không chấp nhận remote connection thì làm sao, nếu là mã nguồn có bị lộ thì hệ thống cũng đâu bị ảnh hưởng gì?)
Ở trên bồ đưa ra một loạt "cấm" thì có nghĩa bồ đã có một số biện pháp ngăn ngừa rồi. Càng nhiều ngăn ngừa, càng giảm thiểu tác hại.
- Nếu đã ấn định mức độ isolation chặt chẽ thì việc bị fopen cũng sẽ bị giới hạn. Đặc biệt là giới hạn "fopen" đến những chỗ "nhạy cảm" trên hệ thống.
- Nếu không cho truy cập csdl từ xa thì dẫu có lộ db's username và password cũng không thể truy nhập được.
- Nếu mã nguồn bị lộ và trong cái bị lộ này lại "lộ" ra những điểm yếu nào đó có thể khai thác thì sự ảnh hưởng tuỳ thuộc vào những điểm yếu ấy có trầm trọng hay không mà thôi. Đối với bảo mật, một dịch vụ mà để chường source, configuration và csdl thì tính bảo mật đã bị huỷ hoại. Nên nhớ, source (open) được bày trên Internet hoàn toàn có tính chất khác với source của một trang web đang hoạt động mà lại được bày ra do tắc trách. |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
|