文春生 唐陽華
(湖南科技學院 學報編輯部,湖南 永州 425199)
由于Web 應用程序或基于Web 的數(shù)據(jù)處理存在安全漏洞,導致其很容易遭到黑客的攻擊,因此保證 Web 站點的安全是確保信息安全的關鍵問題。對 Web 攻擊在一定的層面上可以理解為黑客入侵,保障 Web 網(wǎng)站的安全運行可以從檢測網(wǎng)頁存在的漏洞、發(fā)現(xiàn)網(wǎng)頁木馬、測試網(wǎng)頁是否被篡改、有沒有欺詐網(wǎng)站等著手。越來越多的重要或敏感數(shù)據(jù)被存儲在 Web 類應用系統(tǒng)中,專業(yè)、全面的安全檢測對保證業(yè)務安全必不可少。滲透測試,就是這樣一種機制[1],通過識別目標網(wǎng)站的安全漏洞來幫助網(wǎng)站擁有者理解網(wǎng)站當前的安全狀況,目的是為了使網(wǎng)絡防御按照預期計劃正常運行。本文在本地搭建 bug4.0 靶機站點,模擬各種攻擊方法對 Webug4.0 站點進行滲透,通過研究Web 滲透測試方法的設計分析和防護措施,以檢驗其對Web 網(wǎng)站的信息安全是否可行、有效。
(1)漏洞原理。因為后臺SQL 語句拼接了用戶的輸入,Web 應用程序對用戶輸入數(shù)據(jù)的合法性沒有進行判斷、過濾,前者傳入后端的參數(shù)是攻擊者可以控制的,導致攻擊者通過構造不同的SQL 語句實現(xiàn)對數(shù)據(jù)庫的任意操作。
(2)漏洞危害。攻擊者利用SQL 注入漏洞可以繞過應用程序的安全措施、繞過網(wǎng)頁或者 Web 應用程序的身份驗證和授權等,使用 SQL 注入來增加、查詢、修改和刪除數(shù)據(jù)庫中的記錄。不法分子可能會利用此漏洞訪問用戶的敏感數(shù)據(jù)、個人隱私、客戶信息、知識產(chǎn)權、商業(yè)機密等等。
(3)漏洞防范。
①使用預編譯語句,綁定變量;
②使用存儲過程,將 SQL 語句定義在數(shù)據(jù)庫中,在使用存儲過程時盡量避免使用動態(tài) SQL 語句,當無法避免時,使用嚴格的輸入過濾和編碼函數(shù)來處理用戶的輸入數(shù)據(jù);
③檢查數(shù)據(jù)類型;
④使用安全的函數(shù)。
(1)漏洞原理。由于Web 對實現(xiàn)文件上傳功能的代碼對用戶上傳的文件后綴名和文件類型并沒有作出嚴格的限制,導致攻擊者可以利用這個缺陷通過Web 訪問的目錄上傳任意PHP 文件,還能將這些文件傳遞給 PHP 解釋器,攻擊者能在遠程服務器上執(zhí)行任意的PHP 腳本文件。
(2)漏洞危害。
①網(wǎng)站被控制;
②服務器淪陷;
③同一服務器的其他網(wǎng)站淪陷。
(3)漏洞原理。XSS 漏洞攻擊時,攻擊者通過在網(wǎng)頁中嵌入惡意腳本,比如用JavaScript 編寫的惡意代碼,使得用戶在瀏覽已被嵌入了惡意代碼的網(wǎng)頁時,惡意代碼被執(zhí)行,從而實現(xiàn)對用戶瀏覽器的控制。
⑵漏洞分類。XSS 攻擊方式通常分為三大類:反射型XSS、存儲型XSS、DOM 型XSS。
⑶漏洞危害。獲取用戶的 Cookie、修改網(wǎng)頁內(nèi)容、網(wǎng)站掛馬及利用網(wǎng)站重定向等。
(4)漏洞防范。嚴格過濾輸入輸出,檢測輸入輸出是否存在某些特殊字符或者直接過濾某些關鍵字,例如<>和 script 等。HttpOnly 本身對防御XSS 漏洞起不到任何作用,可在 Cookie 中加入HttpOnly,可解決XSS 漏洞后續(xù)產(chǎn)生的Cookie 劫持攻擊。
(1)漏洞原理。一般情況下,程序開發(fā)人員為了方便使用會把一些重要的函數(shù)寫到一個文件中,這樣就不需要再次編寫,直接調用文件就行,而這個調用的過程就是文件包含。由于在生成這個文件過程中沒有對其文件名做出嚴格的過濾,就會被攻擊者利用,從而使包含了 Web 根目錄和其他文件的信息泄露,甚至可能被注入惡意代碼等操作。
(2)漏洞分類。本地文件包含(LFI):當被包含的文件在服務器本地時,就叫本地文件包含;遠程文件包含(RFI):當被包含的文件在第三方服務器時,就叫遠程文件包含。值得注意的是,php.ini 中的 allow_url_fopen 和 allow_url_include 需要打開。
(3)漏洞危害。文件泄露,惡意的代碼注入。
(4)漏洞防范。第一,嚴格判斷包含的參數(shù)是否是外部可以控制的;第二,進行路徑限制,既要限制被包含的文件只能存在于單一文件夾內(nèi),也要禁止目錄跳轉字符,例如:“./”等;第三,進行包含文件的驗證,查看黑名單中是否存在被包含的文件;第四,嚴格動態(tài)包含的使用,盡量不使用動態(tài)包含,當需要包含時,在頁面固定寫好即可,如:“include<”admin。php”>”。
Web 滲透測試基本步驟主要有:對目標網(wǎng)站進行滲透,發(fā)掘出其中存在的漏洞和風險,而后撰寫滲透測試報告,將其提供給客戶。根據(jù)滲透測試報告,客戶會對網(wǎng)站存在的漏洞進行相應的修補,防止入侵[6]。
滲透測試分為白盒測試和黑盒測試[7]。白盒測試是在已知目標網(wǎng)站源碼和其他一些相關信息的情況下對其進行滲透,類似于代碼分析。黑盒測試就是只告知了網(wǎng)站的 URL,模擬黑客對網(wǎng)站的滲透。如圖1所示完整的滲透測試基本流程可概括為:目標確定→收集信息→探索漏洞→漏洞利用→獲得Webshell→清除痕跡→測試報告撰寫。
圖1 滲透測試流程
信息收集一般分為:主動信息收集和被動信息收集。通過從目標 Web 服務器下載或進行交互等技術獲取相關信息的方式稱為主動信息收集;通過搜索引擎或者社交工具等間接的手段獲取目標Web 網(wǎng)站信息的方法稱為被動信息收集。
(1)域名的獲取。滲透測試從域名開始,通過域名發(fā)現(xiàn)該域名所對應的目標 Web 主機 IP、端口、Web 應用服務,從而分析潛在的攻擊面,這是信息收集階段最關鍵的任務之一。
(2)目標網(wǎng)站所有者的查詢。通過一個名為Who.is 傳輸協(xié)議查詢目標網(wǎng)站的 IP、持有者等相關信息的,或利用 Who.is 反查出與同一域名注冊人相匹配的其他域名、DNS 記錄等情況。根據(jù)域名注冊人姓名、電話、電子郵箱等信息,利用社會工程學欺騙等手段進行滲透測試。該協(xié)議信息查詢常用的工具有微步、Http://who.is/、chinaz、命令等。
(3)備案信息的查詢。通過工業(yè)和信息化部ICP/IP 地址/域名信息備案管理系統(tǒng)、天眼查、企業(yè)信用信息公示系統(tǒng)等查詢域名的備案信息。
(4)收集子域名。通過子域名的收集,可以發(fā)現(xiàn)更多的目標,從而發(fā)現(xiàn)更多安全漏洞。而子域名的收集,可以通過字典暴力枚舉、子域名猜測、 Layer 子域名挖掘機、 搜索引擎、SubDomainsBrute、Wydomain 工具及在線工具Phpinfo.me 進行。
(5)Web 服務器信息獲取??梢允褂?host、nslookup、dig 命令以及 dnswalk、dnstracer、dnsenum 等工具獲取DNS 的信息。另外,DNS 域傳送漏洞可能因DNS 配置不當所致,這種漏洞的存在會導致Web 網(wǎng)絡拓撲圖的泄露。
(6)收集 IP 地址。通過網(wǎng)絡命令 ping、nslookup、查詢二級域名、查看歷史解析記錄、網(wǎng)站的漏洞等方法繞過CDN 查找到目標節(jié)點的真實IP 地址。
(7)旁站及C 段查詢。同一Web 服務器的其他站點稱為旁站,同一網(wǎng)段的其他服務器叫做 C段,利用python 可以查詢旁站和C 段。
(8)服務端口收集。服務端口與安全相對應,Web 主機開啟的端口越多,存在漏洞的可能性越大,面對的安全威脅也越大,使用 masscan、Nmap 等工具可以進行端口滲透的探測。
(9)網(wǎng)站架構信息的收集。操作系統(tǒng)、中間件、數(shù)據(jù)庫、腳本語言等一起構成網(wǎng)站架構。通過 Nmap、AWVS、wappalyzer、云悉在線等工具可以收集網(wǎng)站的操作系統(tǒng)信息。通過 IIS、Tomcat、Apache、Nginx 等可以收集網(wǎng)站的中間件信息。通過數(shù)據(jù)庫管理軟件如 MySQL、access、SQL server、Oracle 等可探查網(wǎng)站數(shù)據(jù)庫所采用的數(shù)據(jù)庫管理類型。通過 Nmap、wappalyaer、云悉在線工具等可以方便地獲取中間件、數(shù)據(jù)庫、腳本語言。另外,還可通過HTTP 消息中header 頭部信息,網(wǎng)頁默認頁面及報錯頁面信息等方式獲取網(wǎng)站其他信息。
(10)探測 Web 應用防護系統(tǒng) WAF。WAF 不僅能夠解析HTTP請求,也能進行相應的規(guī)則檢測,從而做出防御。要判斷 WAF 是否存在,可通過提交惡意數(shù)據(jù)或者使用Nmap、wafwoof 等工具進行。
(11)敏感目錄、敏感信息及源碼泄露。利用搜索引擎搜索敏感目錄、敏感文件和敏感信息,還可以利用暴力字典枚舉目錄等等,這些都是信息收集中要盡可能的獲取的內(nèi)容途徑。
(12)指紋信息。指紋信息包括:CMS(內(nèi)容管理系統(tǒng))指紋、目標的操作系統(tǒng)登錄指紋、目標的服務版本。進行滲透測試應盡量的檢索 Web 信息,通過指紋可以識別出目標網(wǎng)站使用的CMS 信息類型,為進一步的了解滲透測試環(huán)境提供幫助。檢查CMS 類型方法有:通過robots.txt、文件版權信息、查看網(wǎng)頁代碼、比較網(wǎng)站的 md5 判斷網(wǎng)站CMS,也可以使用云悉、bugscaner 等工具對CMS 進行收集。
(13)社會工程學。利用微博、微信、網(wǎng)購網(wǎng)站、求職平臺等互聯(lián)網(wǎng)平臺獲取相關的信息,這些信息在滲透測試中有可能起到意想不到的效。
漏洞挖掘基于海量的信息,判斷網(wǎng)站是否存在 Web 諸如 SQL 注入、XSS 跨站腳本、文件上傳、文件包含、文件解析等漏洞,要進行針對性的探測,利用Nessus、AppScan、AWVS 等工具可以有效地進行探測。如 SQL 注入的步驟可簡單的概括為:“判斷 SQL 注入→注入點尋找→數(shù)據(jù)庫類型判斷→注入實施并提升權限”。GET 型注入漏洞,主要環(huán)節(jié)包括整型參數(shù)判斷和字符串型參數(shù)判斷,針對性的判斷直接影響滲透測試推進。
(1)工具掃描。使用工具掃描能快速發(fā)現(xiàn) Web站點是否存在相應的漏洞,也會生成對應的payload,以便于我們分析漏洞。集成掃描漏洞模塊越多的工具,功能也就越強大。漏洞掃描的具體方案:首先確定掃描的目標網(wǎng)站系統(tǒng),然后從多個漏洞掃面工具中選取出一款合適的工具,最后對其掃描結果做出輸出列表。
(2)手工檢測。在對Web 站點進行漏洞挖掘的時候,當發(fā)現(xiàn) Web 服務器里安裝有對應的防火墻或安全狗時,使用工具掃描的話,將會在短時間內(nèi)頻繁地對系統(tǒng)進行訪問,導致 IP 被攔截限制,最終會造成無法訪問 Web 站點程序,這時只能通過手工去慢慢挖掘漏洞。
①要判斷是否存在 SQL 注入,簡單地方法是在id 參數(shù)后面提交單引號和通過and1=1 和and1=2回顯來判斷是否存在SQL 注入漏洞。
②檢測后臺登陸是否存在弱口令。試試在后臺登錄地址里輸入admin/admin 或者類似一些弱口令,或者嘗試使用萬能密碼是否能夠成功登錄。
③使用谷歌語法。使用谷歌語句 site:xxx.com inurl:upload 等查看是否存在編輯器或者上傳點。
針對性地利用漏洞是在探測到網(wǎng)站的漏洞之后。因為基于單一的漏洞很難獲取網(wǎng)站的Webshell,所以需要結合多個漏洞獲取網(wǎng)站的 Webshell,利用 SQLmap、AWVS 等工具在此過程中會使Webshell 的獲取事半功倍。在獲取 Webshell 后,需要進行提權,SUID 提權(Linux),系統(tǒng)溢出漏洞提權、第三方軟件提權、數(shù)據(jù)庫提權等是常用的提權方法。數(shù)據(jù)庫提權,可利用 MySQL、SQL Server 等數(shù)據(jù)庫實現(xiàn)提權。
完成對目標的滲透測試后,清除痕跡是必須的,具體做法是掩蓋網(wǎng)絡痕跡和清除日志。使用代理或多層代理可實現(xiàn)真實 IP 地址掩蓋,不同系統(tǒng)存在不同的日志清除方式,Linux 系統(tǒng)需刪除“/var/log”下文件,Windows 系統(tǒng)則需要刪除Log 文件或安裝Clearlogs 工具才能進行清理。
滲透測試完成后,結合測試結果撰寫滲透測試報告,指出系統(tǒng)存在的漏洞,給出修補漏洞的方法??蛻舾鶕?jù)滲透測試報告,有針對性地進行漏洞修復,以此強化Web 的信息安全保障。
VMware 15.5,DC-8 靶機虛擬機,kali 虛擬機(均為NAT 模式),ip 為:192.168.86.129
測試時兩臺主機為NAT 模式,并屬同一個網(wǎng)段,使用 Nmap 進行同網(wǎng)段的 IP 存活掃描。圖 2所示,Kali 攻擊機的 IP 為 192.168.86.129,Nmap掃描命令為:nmap-sP192.168.86.1/24。
圖2 存活IP 地址開放端口
靶機192.168.86.132 對此IP 進行全端口掃描,查看是否開啟 Web 的端口。通過 Nmap 命令:nmap -sS-Pn-p-192.168.86.132 看到目標機開啟了22 和 80 端口,22 是 SSH 協(xié)議,可以進行 SSH 爆破,然后 Xshell 遠程連接。因開啟了 80,說明Web 服務開啟,如圖3 所示。訪問彈出了Web 頁面,用插件wappalyzer 識別。
圖3 Wappalyzer 識別
圖3 中發(fā)現(xiàn)是一個drupal 版本為7 的cms,后臺腳本為 PHP,Web 容器為 apache。然后百度得知drupal7 后臺gets hell 漏洞,選擇PHP_CODE 模式(編輯 PHP 代碼)并預覽,在預覽頁面加載后就會執(zhí)行代碼。在編輯處寫入代碼:
其中的IP 為Kali 的IP 地址,端口是接收反彈的一個Kali 未被占用的端口??梢栽贙ali 上執(zhí)行NC 監(jiān)聽,如圖 4 所示。先在 Kali 上執(zhí)行 NC 監(jiān)聽,再進行目標站點的后臺編輯 PHP 代碼進行保存。
圖4 NC 監(jiān)聽
見圖 5,保存后沒有反彈,查看發(fā)現(xiàn)在 view模塊處要提交郵箱等信息才能完成,隨便填入信息,確定試試,會發(fā)現(xiàn)反彈成功,交互式 shell 被獲取。
圖5 成功反彈信息
使用 find 查看那些命令是 root 權限發(fā)現(xiàn)exim4,如圖6 所示。
圖6 版本信息
圖7 使用searchsploit 查找響應的漏洞
圖7 所示,把目標程序下載到靶機,并用scp在kali 上開啟ssh 服務scproot@192.168.86.132:/usr/share/exploitdb/exploits/linux/local/46996.sh /tmp/,運行./46996.sh 可以查看到完整信息,如圖8 所示。
圖8 完整信息
再次執(zhí)行,先監(jiān)聽kali 上的8888 端口,然后反彈成功,注意這里很快就會短鏈,要快。
滲透測試技術能通過主動發(fā)掘目標 Web 系統(tǒng)所存在的安全漏洞,分析漏洞的成因并及時修補,以達到主動防御,防患于未然的目的。本文結合滲透測試技術,分析 Web 系統(tǒng)存在的安全漏洞,通過在本地搭建 bug4.0 靶機站點,模擬各種攻擊方法對Webug4.0 站點進行滲透,對Web 滲透測試方法的設計分析和防護措施進行研究,實際證明,在有關網(wǎng)絡安全中積極的防守在于有目的的進攻,滲透測試技術在 Web 網(wǎng)站系統(tǒng)的應用,對保障網(wǎng)站信息安全是可行、有效的。