該文也是參考了網(wǎng)上好幾篇文章自己親自動手又做了一遍,親自實現(xiàn)的時候也是遇到各種各樣的坑,總結(jié)了以下這些內(nèi)容,收獲很多。
提醒:在修改完配置文件之后一定要重啟服務(wù)?。。。?/p>
0x00 思維導(dǎo)圖

0x01 錯誤詳情頁banner隱藏
黑客在滲透的過程中,收集服務(wù)器的信息是至關(guān)重要的,這對于他在后期漏洞的利用上有很大的幫助。
錯誤詳情頁
測試方法:
在訪問站點時,隨便訪問一個不存在的頁面,如果站點沒做404重定向的話,就會泄露一些敏感信息。詳情如下圖:

查看響應(yīng)頭信息:
$curl -I http://114.115.214.203/zk/shell.php
HTTP/1.1 200 OK
Date: Tue, 05 Dec 2017 07:47:46 GMT
Server: Apache/2.4.7 (Ubuntu) #中間件版本及操作系統(tǒng)
X-Powered-By: PHP/5.5.9-1ubuntu4.22 # 顯示服務(wù)端腳本語言及版本號
Content-Type: text/html; charset=UTF-8
修復(fù)方法:
1)修改配置文件:/etc/apache2/apache2.conf或者/etc/httpd/conf/httpd.conf隱藏中間件信息。修改或者添加以下配置:
ServerTokens Prod
ServerSignature Off
2)修改配置文件:/etc/php5/apache2/php.ini第367行隱藏PHP信息,將expose_php = On修改為Off
376 expose_php = Off
3)保存退出之后,重啟apache服務(wù)。
root@ubuntu:~# service apache2 restart
* Restarting web server apache2 [ OK ]
4)再次訪問不存在的頁面,已經(jīng)沒有banner信息了。

$curl -I http://114.115.214.203/zk/shell.php
HTTP/1.1 200 OK
Date: Tue, 05 Dec 2017 07:51:41 GMT
Server: Apache
Content-Type: text/html; charset=UTF-8
0x02 重定向404頁面
什么是404頁面
當用戶請求一個網(wǎng)站不存在的資源的時候服務(wù)器會返回一個404的錯誤頁面。如下圖所示:

為什么要自定義404頁面
1)通過上圖可以看出,默認的404頁面是非常不友好的。當一個用戶訪問到一些不存在的頁面或者錯誤的鏈接時,如果我們沒有制作一個頁面去引導(dǎo)用戶訪問該站點的其它頁面時,會損失大量的用戶。
2)自定義404頁面會告訴百度、谷歌、bing等搜索引擎的爬蟲,這條記錄本站已經(jīng)刪除,請搜索放棄收錄,利于seo優(yōu)化。
加固步驟
1) 在網(wǎng)站根目錄新建一個.htaccess文件
ErrorDocument 404 /404.html
2) 在同目錄下新建404.html,文件名與上一步指定的文件名相同。
<!DOCTYPE html>
<html>
<head>
<title>404頁面</title>
</head>
<body>
Hello,This is 404 page!!
</body>
</html>
3) 此時我們自定義的頁面已經(jīng)生效,如下圖所示:

真實的404頁面是需要設(shè)計的,沒有這樣簡陋。符合網(wǎng)站自身的設(shè)計風(fēng)格,最好能加入網(wǎng)站導(dǎo)航和底部。
注意事項
1、不要將404錯誤直接轉(zhuǎn)向到網(wǎng)站首頁,這將導(dǎo)致首頁不被收錄;
2、/404.html 前面不要帶主域名,否則返回的狀態(tài)碼是302或200狀態(tài)碼;
3、自定義的404頁面必須是大于512B,如果小于這個大小,瀏覽器就不會執(zhí)行;
0x03 列目錄問題
什么是列目錄
當Web服務(wù)器配置不當?shù)臅r候,如果當前目錄不存在默認文件(比如index.html),Apache會列出當前目錄下所有文件,造成敏感信息泄露。如下圖所示:

修復(fù)方法
修改配置文件/etc/apache2/apache2.conf或者/etc/httpd/conf/httpd.conf
164 <Directory /var/www/> #這邊必須是網(wǎng)站根路徑
165 Options Indexes FollowSymLinks
166 AllowOverride All
167 Require all granted
168 </Directory>
Options Indexes FollowSymLinks
這里的indexes 是指在目錄中要存在index文件,如果不存在把文件列出來,如果存在index文件可以直接顯示index文件,因此每個目錄都必須存在index文件,如果不存在有可能此目錄把文件全部列出來。
刪除Indexes這個參數(shù),然后重啟apache服務(wù)。service apache2 restart
164 <Directory /var/www/> #這邊必須是網(wǎng)站根路徑
165 Options FollowSymLinks
166 AllowOverride All
167 Require all granted
168 </Directory>
再次訪問就出現(xiàn)403 Forbidden頁面

0x04 文件權(quán)限問題
控制文件權(quán)限的意義
現(xiàn)在大部分站點都存在文件上傳,比如說頭像上傳,附件上傳等等。如果在代碼層對上傳的文件限制的不夠嚴格,很容易被上傳Webshell。一旦被上傳Webshell對服務(wù)器造成十分大的威脅。如下圖所示:
[圖片上傳中...(Apache-security-config-7.png-bc7db5-1512700791341-0)]
加固方法
如果我們對存放上傳文件的目錄限制腳本執(zhí)行的權(quán)限的話,上傳的腳本文件就無法執(zhí)行,在一定程度上能夠減輕黑客攻擊造成的危害,并且還不影響正常的業(yè)務(wù),上穿的圖片不需要執(zhí)行權(quán)限,也能正常打開。
修改配置文件/etc/apache2/apache2.conf或者/etc/httpd/conf/httpd.conf
170 <Directory /var/www/html/zk/> #這里文件夾設(shè)置想要限制的
171 php_flag engine off
172 </Directory>
此時上傳的小馬已經(jīng)無法執(zhí)行


0x05 服務(wù)器運行權(quán)限問題
查看Apache的進程:lsof -i:80
root@ubuntu:~# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 11302 root 4u IPv6 28205389 0t0 TCP *:http (LISTEN)
apache2 11304 www-data 4u IPv6 28205389 0t0 TCP *:http (LISTEN)
apache2 11305 www-data 4u IPv6 28205389 0t0 TCP *:http (LISTEN)
apache2 11306 www-data 4u IPv6 28205389 0t0 TCP *:http (LISTEN)
apache2 11307 www-data 4u IPv6 28205389 0t0 TCP *:http (LISTEN)
apache2 11308 www-data 4u IPv6 28205389 0t0 TCP *:http (LISTEN)
apache2 13248 www-data 4u IPv6 28205389 0t0 TCP *:http (LISTEN)
apache2 14885 www-data 4u IPv6 28205389 0t0 TCP *:http (LISTEN)
或者ps aux|grep apache|grep -v grep
root@ubuntu:~# ps -aux | grep apache |grep -v grep
root 11302 0.0 0.2 71104 2340 ? Ss Dec04 0:03 /usr/sbin/apache2 -k start
www-data 11304 0.0 0.2 71176 2252 ? S Dec04 0:00 /usr/sbin/apache2 -k start
www-data 11305 0.0 0.2 71176 2256 ? S Dec04 0:00 /usr/sbin/apache2 -k start
www-data 11306 0.0 0.2 71200 2284 ? S Dec04 0:00 /usr/sbin/apache2 -k start
www-data 11307 0.0 0.2 71184 2252 ? S Dec04 0:00 /usr/sbin/apache2 -k start
www-data 11308 0.0 0.2 71176 2276 ? S Dec04 0:00 /usr/sbin/apache2 -k start
www-data 13248 0.0 0.2 71176 2352 ? S Dec04 0:00 /usr/sbin/apache2 -k start
www-data 14885 0.0 0.2 71176 2368 ? S Dec04 0:00 /usr/sbin/apache2 -k start
第一行是Apache的主進程,是以root運行的。因為Apache的Web開放的端口是80或者443,小于1024的端口需要有root權(quán)限,因此主進程必須是root.從第二行開始為Apache的子進程。用戶為www-data,是Ubuntu中運行服務(wù)的默認用戶,權(quán)限較低。
如果用戶為www-data用戶的話,此時就算黑客拿到一個webshell,權(quán)限也是比較底的。如下圖所示:

如果管理配置不當(默認安裝為www-data),這里是高權(quán)限用戶的話,需要更高為低權(quán)限用戶。
配置文件路徑為:/var/apache2/envvars文件中16、17行進行配置:
15 # /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
16 export APACHE_RUN_USER=www-data
17 export APACHE_RUN_GROUP=www-data
0x06 Apache日志文件格式
Apache會生成兩個主要的日志文件,一個是Web訪問日志access.log,一個是記錄服務(wù)器運行時出錯的日志error.log。
配置文件/etc/apache2/apache2.conf或者/etc/httpd/conf/httpd.conf中定義了日志格式
212 LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
213 LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
214 LogFormat "%h %l %u %t \"%r\" %>s %O" common
215 LogFormat "%{Referer}i -> %U" referer
216 LogFormat "%{User-agent}i" agent
217
218
219 CustomLog ${APACHE_LOG_DIR}/access.log common
212行是虛擬主機的日志格式
213行是組合日志格式
213行是通用的日志格式
219行自定義設(shè)置日志使用那個格式的日志
/var/log/apache2/access.log日志格式如下:
111.196.209.199 - - [05/Dec/2017:22:40:02 +0800] "GET /zk/shell.php HTTP/1.1" 304 164 "http://114.115.214.203/zk/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
遠端主機:111.196.209.199
遠端登錄名:-
遠程用戶名:-
訪問時間:[05/Dec/2017:22:40:02 +0800]
HTTP請求:GET /zk/shell.php HTTP/1.1
HTTP狀態(tài)碼:304
發(fā)送的字節(jié)數(shù):164
Referer:http://114.115.214.203/zk/
User-Agent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
/var/log/apache2/error.log日志格式如下:
[Tue Dec 05 22:39:10.798632 2017] [core:notice] [pid 2970] AH00094: Command line: '/usr/sbin/apache2'
[日期和時間] [錯誤等級] 錯誤消息