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

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

查看響應(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ù)端腳本語(yǔ)言及版本號(hào)
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)再次訪問(wèn)不存在的頁(yè)面,已經(jīng)沒(méi)有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頁(yè)面
什么是404頁(yè)面
當(dāng)用戶請(qǐng)求一個(gè)網(wǎng)站不存在的資源的時(shí)候服務(wù)器會(huì)返回一個(gè)404的錯(cuò)誤頁(yè)面。如下圖所示:

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

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

修復(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文件,如果不存在把文件列出來(lái),如果存在index文件可以直接顯示index文件,因此每個(gè)目錄都必須存在index文件,如果不存在有可能此目錄把文件全部列出來(lái)。
刪除Indexes這個(gè)參數(shù),然后重啟apache服務(wù)。service apache2 restart
164 <Directory /var/www/> #這邊必須是網(wǎng)站根路徑
165 Options FollowSymLinks
166 AllowOverride All
167 Require all granted
168 </Directory>
再次訪問(wèn)就出現(xiàn)403 Forbidden頁(yè)面

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


0x05 服務(wù)器運(yùn)行權(quán)限問(wèn)題
查看Apache的進(jìn)程: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的主進(jìn)程,是以root運(yùn)行的。因?yàn)锳pache的Web開(kāi)放的端口是80或者443,小于1024的端口需要有root權(quán)限,因此主進(jìn)程必須是root.從第二行開(kāi)始為Apache的子進(jìn)程。用戶為www-data,是Ubuntu中運(yùn)行服務(wù)的默認(rèn)用戶,權(quán)限較低。
如果用戶為www-data用戶的話,此時(shí)就算黑客拿到一個(gè)webshell,權(quán)限也是比較底的。如下圖所示:

如果管理配置不當(dāng)(默認(rèn)安裝為www-data),這里是高權(quán)限用戶的話,需要更高為低權(quán)限用戶。
配置文件路徑為:/var/apache2/envvars文件中16、17行進(jìn)行配置:
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會(huì)生成兩個(gè)主要的日志文件,一個(gè)是Web訪問(wèn)日志access.log,一個(gè)是記錄服務(wù)器運(yùn)行時(shí)出錯(cuò)的日志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行是虛擬主機(jī)的日志格式
213行是組合日志格式
213行是通用的日志格式
219行自定義設(shè)置日志使用那個(gè)格式的日志
/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"
遠(yuǎn)端主機(jī):111.196.209.199
遠(yuǎn)端登錄名:-
遠(yuǎn)程用戶名:-
訪問(wèn)時(shí)間:[05/Dec/2017:22:40:02 +0800]
HTTP請(qǐng)求: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'
[日期和時(shí)間] [錯(cuò)誤等級(jí)] 錯(cuò)誤消息