常見Web開發漏洞解決方法
由於一般的Web開發專案主要是內部使用的業務系統,所以對於安全性一般不是看的很重,基本上由於是內網系統。但有時候一些系統平臺,需要外網也要使用,這種情況下,各方面的安全性就要求比較高了,所以往往會交付給一些專門做安全測試的第三方機構進行測試,然後根據反饋的漏洞進行修復,如果你平常對於一些安全漏洞不夠了解,那麼反饋的結果往往是很殘酷的,迫使你必須在很多細節上進行修復完善。本文針對這些漏洞問題的修復方案,介紹在這方面的一些經驗。
基本上,參加的安全測試(滲透測試)的網站,可能或多或少存在下面幾個漏洞:SQL隱碼攻擊漏洞、跨站指令碼攻擊漏洞、登陸後臺管理頁面、IIS短檔案/資料夾漏洞、系統敏感資訊洩露。
1、測試的步驟及內容
這些安全性測試,據瞭解一般是先收集資料,然後進行相關的滲透測試工作,獲取到網站或者系統的一些敏感資料,從而可能達到控制或者破壞系統的目的。
第一步是資訊收集,收集如IP地址、DNS記錄、軟體版本資訊、IP段等資訊。可以採用方法有:
1)基本網路資訊獲取;
2)Ping目標網路得到IP地址和TTL等資訊;
3)Tcptraceroute和Traceroute的結果;
4)Whois結果;
5)Netcraft獲取目標可能存在的域名、Web及伺服器資訊;
6)Curl獲取目標Web基本資訊;
7)Nmap對網站進行埠掃描並判斷作業系統型別;
8)Google、Yahoo、Baidu等搜尋引擎獲取目標資訊;
9)FWtester 、Hping3 等工具進行防火牆規則探測;
10)其他。
第二步是進行滲透測試,根據前面獲取到的資料,進一步獲取網站敏感資料。此階段如果成功的話,可能獲得普通許可權。採用方法會有有下面幾種
1)常規漏洞掃描和採用商用軟體進行檢查;
2)結合使用ISS與Nessus等商用或免費的掃描工具進行漏洞掃描;
3)採用SolarWinds對網路裝置等進行搜尋發現;
4)採用Nikto、Webinspect等軟體對Web常見漏洞進行掃描;
5)採用如AppDetectiv之類的商用軟體對資料庫進行掃描分析;
6)對Web和資料庫應用進行分析;
7)採用WebProxy、SPIKEProxy、Webscarab、ParosProxy、Absinthe等工具進行分析;
8)用Ethereal抓包協助分析;
9)用Webscan、Fuzzer進行SQL隱碼攻擊和XSS漏洞初步分析;
10)手工檢測SQL隱碼攻擊和XSS漏洞;
11)採用類似OScanner的工具對資料庫進行分析;
12)基於通用裝置、資料庫、作業系統和應用的攻擊;採用各種公開及私有的緩衝區溢位程式程式碼,也採用諸如MetasploitFramework 之類的利用程式集合。
13)基於應用的攻擊。基於Web、資料庫或特定的B/S或C/S結構的網路應用程式存在的弱點進行攻擊。
14)口令猜解技術。進行口令猜解可以採用X-Scan、Brutus、Hydra、溯雪等工具。
第三步就是嘗試由普通許可權提升為管理員許可權,獲得對系統的完全控制權。在時間許可的情況下,必要時從第一階段重新進行。採用方法
1)口令嗅探與鍵盤記錄。嗅探、鍵盤記錄、木馬等軟體,功能簡單,但要求不被防病毒軟體發覺,因此通常需要自行開發或修改。
2)口令破解。有許多著名的口令破解軟體,如L0phtCrack、John the Ripper、Cain 等
以上一些是他們測試的步驟,不過我們不一定要關注這些過程性的東西,我們可能對他們反饋的結果更關注,因為可能會爆發很多安全漏洞等著我們去修復的。
2、SQL隱碼攻擊漏洞的出現和修復
1)SQL隱碼攻擊定義:
SQL隱碼攻擊是黑客對資料庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫查詢程式碼,根據程式返回的結果,獲得某些他想得知的資料,這就是所謂的SQL Injection,即SQL隱碼攻擊。
SQL隱碼攻擊有時候,在地址引數輸入,或者控制元件輸入都有可能進行。如在連結後加入’號,頁面報錯,並暴露出網站的物理路徑在很多時候,很常見,當然如果關閉了Web.Config的CustomErrors的時候,可能就不會看到。
另外,Sql注入是很常見的一個攻擊,因此,如果對頁面引數的轉換或者沒有經過處理,直接把資料丟給Sql語句去執行,那麼可能就會暴露敏感的資訊給對方了。如下面兩個頁面可能就會被新增註入攻擊。
①HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestD... type='U' and status>0)>0 得到第一個使用者建立表的名稱,並與整數進行比較,顯然abc.asp工作異常,但在異常中卻可以發現表的名稱。假設發現的表名是xyz,則
②HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name fromTestDB.dbo.sysobjects& ... tatus>0 and name not in('xyz'))>0 可以得到第二個使用者建立的表的名稱,同理就可得到所有用建立的表的名稱。
為了遮蔽危險Sql語句的執行,可能需要對進行嚴格的轉換,例如如果是整形的,就嚴格把它轉換為整數,然後在操作,這樣可以避免一些潛在的危險,另外對構造的sql語句必須進行Sql注入語句的過濾,如我的框架(Winform開發框架、Web開發框架等)裡面就內建了對這些有害的語句和符號進行清除工作,由於是在基類進行了過濾,因此基本上子類都不用關心也可以避免了這些常規的攻擊了。
/// <summary>
/// 驗證是否存在注入程式碼(條件語句)
/// </summary>
/// <param name="inputData"></param>
public bool HasInjectionData(string inputData)
{
if (string.IsNullOrEmpty(inputData))
return false;
//裡面定義惡意字符集合
//驗證inputData是否包含惡意集合
if (Regex.IsMatch(inputData.ToLower(), GetRegexString()))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 獲取正規表示式
/// </summary>
/// <returns></returns>
private static string GetRegexString()
{
//構造SQL的注入關鍵字元
string[] strBadChar =
{
//"select\\s",
//"from\\s",
"insert\\s",
"delete\\s",
"update\\s",
"drop\\s",
"truncate\\s",
"exec\\s",
"count\\(",
"declare\\s",
"asc\\(",
"mid\\(",
"char\\(",
"net user",
"xp_cmdshell",
"/add\\s",
"execmaster.dbo.xp_cmdshell",
"net localgroupadministrators"
};
//構造正規表示式
string str_Regex = ".*(";
for (int i = 0; i < strBadChar.Length - 1; i++)
{
str_Regex += strBadChar[i] +"|";
}
str_Regex +=strBadChar[strBadChar.Length - 1] + ").*";
return str_Regex;
}
上面的語句用於判別常規的Sql攻擊字元,我在資料庫操作的基類裡面,只需要判別即可,如下面的一個根據條件語句查詢資料庫記錄的函式。
/// <summary>
/// 根據條件查詢資料庫,並返回物件集合
/// </summary>
/// <param name="condition">查詢的條件</param>
/// <param name="orderBy">自定義排序語句,如Order ByName Desc;如不指定,則使用預設排序</param>
/// <param name="paramList">引數列表</param>
/// <returns>指定物件的集合</returns>
public virtual List<T> Find(string condition, string orderBy,IDbDataParameter[] paramList)
{
if (HasInjectionData(condition))
{
LogTextHelper.Error(string.Format("檢測出SQL隱碼攻擊的惡意資料,{0}", condition));
throw new Exception("檢測出SQL隱碼攻擊的惡意資料");
}
...........................
}
本文為Anyforweb技術分享部落格,需要了解網站建設及更多Web應用相關資訊,請訪問anyforweb.com。
相關文章
- Python開發常見漏洞Python
- 【JAVA-WEB常見漏洞-XSS漏洞】JavaWeb
- As常見問題解決方法
- 常見的Web安全漏洞及測試方法介紹Web
- 4 個常見的軟體安全開發問題及其解決方法
- Web中介軟體常見漏洞總結Web
- web開發技巧-網頁排版佈局常見問題及解決辦法Web網頁
- 網站常見反爬解決方法網站
- Nacos 常見問題及解決方法
- web 應用常見安全漏洞一覽Web
- 光纖收發器常見故障及對應解決方法
- 5大常見開源軟體問題及解決方法
- 貼片電感器發燙常見原因以及解決方法詳解
- 常見BUG解決
- WEB前端效能優化常見方法Web前端優化
- 常見的死鎖情況及解決方法
- 高併發解決方案詳解(9大常見解決方案)
- 開發微信小程式之HTTPS報錯常見問題彙總及解決方法微信小程式HTTP
- workerman開發過程中遇到的一些常見的問題與解決方法
- WEB應用常見15種安全漏洞一覽Web
- MySQL併發時經典常見的死鎖原因及解決方法MySql
- 【MySQL】六、常見slave 延遲原因以及解決方法MySql
- Windows共享資料夾常見問題解決方法Windows
- 網路交換機常見故障及解決方法
- DNS故障的幾種常見原因及解決方法DNS
- 社交電商系統開發時的常見問題和解決方法
- uni-app開發 常見異常和解決辦法APP
- keepalived 1.3.5常見配置以及常見問題解決
- Python爬蟲程式設計常見問題解決方法Python爬蟲程式設計
- Flink生產環境常見問題及解決方法
- SSL證書7大常見錯誤及解決方法!
- 中科三方——SSL常見錯誤及解決方法
- git常見問題解決Git
- 快應用開發常見問題以及解決方案【持續更新】
- CentOS 常見異常及解決辦法CentOS
- DVWA中學習PHP常見漏洞及修復方法PHP
- 滲透測試之小白的常見web漏洞總結(下)Web
- 滲透測試之小白的常見web漏洞總結(上)Web
- 論PHP常見的漏洞PHP