برای معرفی این ترفند بیایید ترافیک HTTP را بین یک ماشین کلاینت و سرور دبیان sniff کنیم در حالیکه سهوا در login به PhpMyAdmin با استفاده از یوزر و پسورد root دیتابیس و به اشتباه لاگین کردیم ( مطابق با پست قبلی ما درباره تغییر و امن کردن لینک صفحه لاگین phpmyadminn )
همانطور که در ترفند قبل گفتیم اگر نمیخواهید که user و password تان افشاء شود این کار را انجام ندهید. برای شروع sniff کردن ترافیک دستور زیر را اجرا کنید.
مدت زمان زیادی طول نخواهد کشید که username و password ارسال شده از طریق کابل و به فرمت plain text تشخیص داده شود. شما میتوانید این مورد را در خروجی کوتاه دستور tcpdump در تصویر زیر مشاهده کنید.
لطفا دقت کنید که ما بخش پسورد root را با رنگ آبی مخفی کردیم.
برای جلوگیری از این مورد باید صفحه لاگین را با یک certificate امن کنید برای این منظور پکیج mode_ssl را روی توزیع های برپایه centos نصب کنید.
اگر چه ما از نام و مسیرهای دبیان / اوبونتو استفاده میکنیم، اما مراحل یکسانی برای centos و redhat نیز میتوان استفاده کرد تنها کافیست دستورات و مسیرهای زیر را با موارد مشابه در centos جابجا کنید.
یک دایرکتوری برای ذخیره کردن key و certificate ایجاد کنید.
اکنون key و certificate را ایجاد میکنیم.
نمونه خروجی :
سپس key و certificate را بررسی میکنیم.
در سیستم های دبیان / اوبونتو مطمئن شوید که apache روی پورت 443 برای سایت پیش فرض (/etc/apache2/sites-available/000-default.conf) در حال listen باشد و سه خط مربوط به ssh را درون قسمت Virtual Host اضافه کنید.
درتوزیع های بر پایه centos باید apache را برای listen کردن روی پورت 443 کانفیگ کنید و قسمت listen را در فایل /etc/httpd/conf/httpd.conf پیدا کنید و خطوط بالا را زیر آن اضافه کنید.
تغییرات را ذخیره کنید، ماژول ssh apache را روی توزیع های دبیان / اوبونتو load کنید (در centos این ماژول به صورت خودکار زمانیکه شما پکیج mode_ssl را نصب میکنید load میشود)
در اینجا phpmyadmin را مجبور به استفاده از ssl کنید و مطمئن شوید که خط زیر در فایل /etc/phpmyadmin/config.inc.php یا /etc/phpMyAdmin/config.inc.php موجود باشد.
سپس وب سرور را restart کنید.
در مرحله بعد مرورگر را باز کنید و لینک https://<ip address>/my را همانند زیر وارد کنید. ( آموزش نحوه تغییر url پیش فرض phpmyadmin )
نکته : لطفا دقت کنید که صفحه زیر تنها میگوید که کانکشن شما امن نیست زیر ما از یک certificate ریجیستر نشده و self-signed استفاده کردیم. روی advanced کلیک و برای مورد امنیتی confirm را کلیک نمایید.
بعد از تایید مورد امنیتی بالا و قبل از لاگین کردن بیایید ترافیک های http و https را sniff کنیم :
سپس با user و password قبلی لاگین کنید همانطور که میبینید sniffer تنها یکسری حروف نامفهوم و شکسته و درهم را با تمام تلاش خودش capture خواهد کرد.
در مقاله بعد ما نحوه محدود کردن دسترسی phpmyadmin با استفاده از username و password را آموزش خواهیم داد.
همانطور که در ترفند قبل گفتیم اگر نمیخواهید که user و password تان افشاء شود این کار را انجام ندهید. برای شروع sniff کردن ترافیک دستور زیر را اجرا کنید.
کد PHP:
# tcpdump port http -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --line-buffered -B20
لطفا دقت کنید که ما بخش پسورد root را با رنگ آبی مخفی کردیم.
برای جلوگیری از این مورد باید صفحه لاگین را با یک certificate امن کنید برای این منظور پکیج mode_ssl را روی توزیع های برپایه centos نصب کنید.
کد PHP:
# yum install mod_ssl
یک دایرکتوری برای ذخیره کردن key و certificate ایجاد کنید.
کد PHP:
# mkdir /etc/apache2/ssl [On Debian/Ubuntu based systems]
# mkdir /etc/httpd/ssl [On CentOS based systems]
کد PHP:
----------- On Debian/Ubuntu based systems -----------
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/
apache2/ssl/apache.crt
----------- On CentOS based systems -----------
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/apache.key -out /etc/
httpd/ssl/apache.crt
کد PHP:
........................+++
.....................................................+++
writing new private key to '/etc/httpd/ssl/apache.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:mohammad
Locality Name (eg, city) [Default City]:Tehran
Organization Name (eg, company) [Default Company Ltd]:LinuxZone
Organizational Unit Name (eg, section) []:LinuxZone
Common Name (eg, your name or your server's hostname) []:LinuxZone
Email Address []:admin@linux-zone.com
کد PHP:
# cd /etc/apache2/ssl/ [On Debian/Ubuntu based systems]
# cd /etc/httpd/ssl/ [On CentOS based systems]
# ls -l
total 8
-rw-r--r--. 1 root root 1424 Sep 7 15:19 apache.crt
-rw-r--r--. 1 root root 1704 Sep 7 15:19 apache.key
کد PHP:
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
درتوزیع های بر پایه centos باید apache را برای listen کردن روی پورت 443 کانفیگ کنید و قسمت listen را در فایل /etc/httpd/conf/httpd.conf پیدا کنید و خطوط بالا را زیر آن اضافه کنید.
کد PHP:
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl/apache.key
کد PHP:
# a2enmod ssl
کد PHP:
$cfg['ForceSSL'] = true;
کد PHP:
# systemctl restart apache2 [On Debian/Ubuntu based systems]
# systemctl restart httpd [On Debian/Ubuntu based systems]
نکته : لطفا دقت کنید که صفحه زیر تنها میگوید که کانکشن شما امن نیست زیر ما از یک certificate ریجیستر نشده و self-signed استفاده کردیم. روی advanced کلیک و برای مورد امنیتی confirm را کلیک نمایید.
بعد از تایید مورد امنیتی بالا و قبل از لاگین کردن بیایید ترافیک های http و https را sniff کنیم :
کد PHP:
# tcpdump port http or port https -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --line-buffered -B20
در مقاله بعد ما نحوه محدود کردن دسترسی phpmyadmin با استفاده از username و password را آموزش خواهیم داد.