那些年我改過的漏洞
那些年我改過的漏洞
在開發(fā)過程中常常會(huì)遇到各種各樣的漏洞,當(dāng)漏洞發(fā)生時(shí)一定要及時(shí)的去修復(fù),否則可能會(huì)造成巨大損失。這篇文章就說一說我遇到過的漏洞,后續(xù)遇到新的漏洞將會(huì)你繼續(xù)更新,請(qǐng)您持續(xù)關(guān)注!!!
mysql服務(wù)器漏洞
Mysql漏洞大多是由于版本未升級(jí)造成的,但是由于生產(chǎn)環(huán)境的數(shù)據(jù)庫(kù)也不可能頻繁的升級(jí),常在河邊走,哪能不濕鞋,一次的失誤就可能給客戶造成難以承受的損失。Mysql官方針對(duì)漏洞也提供了對(duì)應(yīng)的補(bǔ)丁方案,修補(bǔ)漏洞時(shí)可以采用補(bǔ)丁或者卸載升級(jí)兩種方案

上圖中的漏洞是通過綠盟掃描出來的,這里僅針對(duì)解決過程進(jìn)行描述

漏洞文檔中會(huì)有漏洞補(bǔ)丁鏈接,可以通過補(bǔ)丁鏈接查看當(dāng)前漏洞存在版本,然后進(jìn)行對(duì)應(yīng)版本的升級(jí)

網(wǎng)頁(yè)搜索漏洞編號(hào),即可查看到漏洞存在版本,針對(duì)版本進(jìn)行升級(jí) 還有一種方式就是下載補(bǔ)丁,但是這種方式?jīng)]有采用過,就不做贅述了(畢竟我只想寫有用過的,沒用過的沒有什么意義)
后臺(tái)回復(fù)“Mysql升級(jí)”獲取完整版的MySQL升級(jí)方案(純手寫)
Nginx相關(guān)漏洞方案
腳本下載
我們?cè)诓渴饂ar包的時(shí)候可能會(huì)將啟動(dòng)腳本或者其他文件放在一個(gè)公共的目錄下,此時(shí)如果文件夾或文件如果沒有做任何限制的話,腳本或配置文件很有可能會(huì)直接暴露在公網(wǎng)環(huán)境下

此時(shí)可以通過配置nginx的攔截策略禁止.sh、.properties等鏈接的訪問
location?~?\.(sh|properties)$?{
??????deny?all;
}利用X-Forwarded-For偽造客戶端IP
攻擊者在請(qǐng)求頭上帶上一個(gè)偽造的X-Forwarded-For,由于后續(xù)每層代理只會(huì)追加而不會(huì)覆蓋,那么最終到達(dá)應(yīng)用服務(wù)器時(shí),獲取的左邊第一個(gè)IP地址將會(huì)是客戶端偽造的IP。
解決方案:在直接對(duì)外的Nginx反向代理服務(wù)器上配置以下代碼:proxy_set_header X-Forwarded-For $remote_addr;。使用$remote_addr替代$proxy_add_x_forwarded_for。$remote_addr是獲取的是直接TCP連接的客戶端IP,這個(gè)是無法偽造的。
server?{
???????...
??????location?/?{
??????????...
??????????proxy_set_header?X-Forwarded-For?$remote_addrp;
??????????...
??????}
??????...
}注意,如果業(yè)務(wù)中有統(tǒng)計(jì)用戶來源ip,該配置有可能會(huì)導(dǎo)致用戶來源ip不精準(zhǔn),因?yàn)槿绻谀愕膎ginx上游還有其他服務(wù)器,比如防火墻等,所獲取的ip將會(huì)是nginx上游距離最近的一個(gè)服務(wù)器ip,而不是用戶來源ip。
Iframe點(diǎn)擊劫持
頁(yè)面允許被iframe嵌套,當(dāng)嵌套一個(gè)透明不可見的頁(yè)面時(shí),你鼠標(biāo)的操作其實(shí)是被嵌套的看不到的頁(yè)面,浮在表層的一系列圖片按鈕只是為了誘騙你點(diǎn)擊固定的位置從而達(dá)到攻擊者的目的。將域名或者鏈接添加到已經(jīng)寫好的HTML文件中,該文件里面已經(jīng)嵌套了一個(gè)透明iframe頁(yè)面,然后在瀏覽器訪問該文件,如果頁(yè)面訪問正常出現(xiàn)特定樣式則說明存在點(diǎn)擊劫持漏洞
簡(jiǎn)單來說,就是禁止iframe中嵌套網(wǎng)站頁(yè)面
解決方案:
server?{
???????...
??????add_header?X-Frame-Options?SAMEORIGIN;
??????...
}DENY:瀏覽器拒絕當(dāng)前頁(yè)面加載任何Frame頁(yè)面
SAMEORIGIN:frame頁(yè)面的地址只能為同源域名下的頁(yè)面
ALLOW-FROM origin:origin為允許frame加載的頁(yè)面地址
Tomcat相關(guān)漏洞方案
版本泄露
訪問Tomcat頁(yè)面是如果頁(yè)面不存在或者鏈接異常常會(huì)泄露Tomcat的版本號(hào),官方會(huì)公開該版本所存在的漏洞,不法分子很可能會(huì)通過版本號(hào)針對(duì)性的進(jìn)行漏洞攻擊,給網(wǎng)站帶來極大的威脅

此時(shí)可以通過修改tomcat配置來隱藏版本號(hào)
進(jìn)入tomcat的lib目錄找到catalina.jar文件
unzip?catalina.jar之后會(huì)多出兩個(gè)文件夾
進(jìn)入org/apache/catalina/util?編輯配置文件ServerInfo.properties
修改為
server.info=Apache?Tomcat
server.number=0.0.0.0
server.built=Nov?7?2016?20:05:27?UTC
將修改后的信息壓縮回jar包
cd?/tomcat/lib
jar?uvf?catalina.jar?org/apache/catalina/util/ServerInfo.properties
重啟tomcat代碼相關(guān)漏洞方案
Missing Secure Attribute in Encrypted Session (SSL) Cookie(加密會(huì)話(SSL) Cookie中缺少安全屬性)
該漏洞是指部分Cookie未設(shè)置安全屬性,安全屬性指:HttpOnly?和Secure


解決方案:這兩個(gè)cookie是由第三方插件產(chǎn)生的,起初沒有很好地方案,但是后來想了想,不管是不是第三方插件,只要是站內(nèi)的鏈接,均可以使用過濾器進(jìn)行來設(shè)置cookie屬性,后采用在代碼中對(duì)這兩個(gè)屬性進(jìn)行屬性設(shè)置

@Component
@ServletComponentScan
@WebFilter(urlPatterns?=?"/*",?filterName?=?"CookieFilter")
public?class?CookieFilter?implements?Filter?{
????@Override
????public?void?init(FilterConfig?filterConfig)?throws?ServletException?{
????}
????@Override
????public?void?doFilter(ServletRequest?servletRequest,?ServletResponse?servletResponse,?FilterChain?filterChain)?throws?IOException,?ServletException?{
????????HttpServletResponse?httpServletResponse?=?(HttpServletResponse)?servletResponse;
????????//設(shè)置安全參數(shù)
????????HttpServletRequest?req?=?(HttpServletRequest)servletRequest;
????????Cookie[]?cookies?=?req.getCookies();
????????if?(cookies?!=?null)?{
????????????for?(Cookie?cookie?:?cookies)?{
????????????????if("BMAP_SECKEY".equals(cookie.getName())||"SECKEY_ABVK".equals(cookie.getName())){
????????????????????String?value?=?cookie.getValue();
????????????????????StringBuilder?builder?=?new?StringBuilder();
????????????????????builder.append(cookie.getName()+"="+value+";");
????????????????????builder.append("Secure;");//Cookie設(shè)置Secure標(biāo)識(shí)
????????????????????builder.append("HttpOnly;");//Cookie設(shè)置HttpOnly
????????????????????httpServletResponse.addHeader("Set-Cookie",?builder.toString());
????????????????}
????????????}
????????}
????????filterChain.doFilter(servletRequest,?servletResponse);
????}
????@Override
????public?void?destroy()?{
????}
}屬性設(shè)置之后,再訪問即可

第三方相關(guān)漏洞方案
Log4J漏洞
Log4j爆"核彈級(jí)"漏洞,那就來做個(gè)拆彈專家吧
未完待續(xù)...
