Web安全漏洞及代碼審計(第2版)(微課版)課件全套 第1-16章 部署工作環(huán)境-靶機框架漏洞與審計_第1頁
Web安全漏洞及代碼審計(第2版)(微課版)課件全套 第1-16章 部署工作環(huán)境-靶機框架漏洞與審計_第2頁
Web安全漏洞及代碼審計(第2版)(微課版)課件全套 第1-16章 部署工作環(huán)境-靶機框架漏洞與審計_第3頁
Web安全漏洞及代碼審計(第2版)(微課版)課件全套 第1-16章 部署工作環(huán)境-靶機框架漏洞與審計_第4頁
Web安全漏洞及代碼審計(第2版)(微課版)課件全套 第1-16章 部署工作環(huán)境-靶機框架漏洞與審計_第5頁
已閱讀5頁,還剩408頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

部署工作環(huán)境項目1Web安全漏洞及代碼審計(第2版)(微課版)01項目知識準備項目知識準備01在學習語言之初,最先需要做的就是進行環(huán)境搭建。只有配置好相應的環(huán)境,才能部署一套業(yè)務系統(tǒng)。同時,一個漏洞在不同環(huán)境中的利用方式可能不同。因此,我們需要在不同平臺上對多個PHP版本進行切換測試。這時就需要一套可以支持多環(huán)境切換、支持不同PHP版本切換等功能的集成環(huán)境。1.phpStudyphpStudy的Linux版和Windows版同步上線,支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6。目前,該程序包集成了最新的Apache+Nginx+Lighttpd+PHP+MySQL+phpMyAdmin+ZendOptimizer+ZendLoader服務,如圖1-1所示,支持一次性安裝,無須配置即可使用,是非常方便、好用的PHP調試環(huán)境。代碼編輯工具一項目知識準備012.WampServerWAMP環(huán)境是指在Windows服務器上使用Apache、MySQL和PHP的集成安裝環(huán)境,如圖1-2所示。WampServer可以快速安裝和配置Web服務器,集成了Apache、MySQL、PHP、phpMyAdmin服務,只需要在菜單“開啟/關閉”處單擊即可啟用或禁用這些服務。在安裝成功后,訪問localhost時會出現ServerConfiguration(服務器配置)界面,如圖1-3所示。代碼編輯工具一項目知識準備01WAMP/WNMP環(huán)境搭建二在構建PHP代碼審計環(huán)境時由于它不是一個在線環(huán)境,因此為了便于環(huán)境的配置,可以嘗試使用最簡單的構建方法。代碼審計員通常會選擇安裝集成環(huán)境軟件包,如WAMP或LAMP,因為這些軟件包可以快速構建用戶需要的PHP運行環(huán)境。而在選擇安裝的集成環(huán)境軟件包時,代碼審計員必須考慮集成環(huán)境的版本。同時,對于服務軟件的版本(如PHP、MySQL、Apache等),可以嘗試使用最常用的版本(如PHP5.2.X、MySQL5.0及更高版本)來解決特殊漏洞。在測試過程中,我們可能需要安裝不同的服務軟件版本進行測試,并且需要在不同的操作系統(tǒng)下進行測試??梢栽趐hpStudy官網上直接下載phpStudy安裝程序,之后只需要單擊phpStudy主界面中Apache和MySQL等套件后面的“啟動”按鈕,即可啟動相應服務,如圖1-4所示。項目知識準備01WAMP/WNMP環(huán)境搭建二在啟動服務后,訪問http://localhost/即可看到“站點創(chuàng)建成功”的信息提示,如圖1-5所示。選擇界面左側的“網站”標簽,進入網站管理界面,在右側“操作”列中單擊“管理”按鈕,即可在彈出的菜單中選擇相關命令,更改配置和切換Web服務組合,如圖1-6所示。但是,有時在啟動Web服務時,Nginx服務無法啟動。最常見的情況是WebServer服務端口被占用和WebServer配置文件發(fā)生錯誤。對于WebServer服務端口被占用的情況來說,有兩種解決方案:第一種是通過更改配置文件中的監(jiān)聽端口來更改WebServer的服務端口;第二種是結束占用端口的進程。項目知識準備01LAMP環(huán)境搭建三很多時候,在不同的操作系統(tǒng)下,漏洞的測試結果也可能不同。舉一個簡單的例子,如果文件包含截斷,則Windows和Linux下的截斷之間存在差異。為了更好地測試漏洞,需要在Linux下構建一個PHP環(huán)境。而為了方便地調整測試環(huán)境,仍然選擇phpStudy來構建LAMP環(huán)境。phpStudy支持Linux,如CentOS、Ubuntu和Debian。phpStudy的安裝過程如下:項目知識準備01PHP核心配置四1.安全模式PHP安全模式表示PHP以安全模式運行,當safe_mode=on時,它會提供一個基本安全的共享環(huán)境。在部署PHP環(huán)境的Web服務器上,如果服務器運行的PHP開啟了安全模式,就會有一些函數被完全禁止或被限制一些功能,但是在PHP5.4之后的版本中已經刪除了安全模式及其相關設置。在開啟安全模式的情況下,一些文件操作類函數的功能將會受到限制。如果想要操作某個文件,就需要擁有該文件的讀取或寫入的訪問權限,而實現此類功能對于PHP來說是沒有問題的。但是,當開啟安全模式后,用戶嘗試寫入或讀取一個本地文件時,PHP會檢查當前訪問的用戶是不是該文件的擁有者,如果不是,則該用戶的操作會被禁止,此時安全模式等同于模擬實現了防止一個用戶操作另一個用戶的文件的功能。受限制的文件操作類函數如下:項目知識準備01PHP核心配置四1.安全模式同樣地,如果在開啟安全模式的情況下,當需要執(zhí)行系統(tǒng)程序時,必須在safe_mode_exec_dir選項指定的目錄下執(zhí)行程序,否則程序將會執(zhí)行失敗。另外,背部標記操作符(`)也將會被關閉,常見執(zhí)行命令的函數列表也將會受到影響。常見執(zhí)行命令的函數如下,在開啟安全模式后,結果如圖1-7所示。同樣地,如果在開啟安全模式的情況下,當需要執(zhí)行系統(tǒng)程序時,必須在safe_mode_exec_dir選項指定的目錄下執(zhí)行程序,否則程序將會執(zhí)行失敗。另外,背部標記操作符(`)也將會被關閉,常見執(zhí)行命令的函數列表也將會受到影響。常見執(zhí)行命令的函數如下:項目知識準備01PHP核心配置四2.禁用函數測試代碼如下,在通過disable_functions配置禁用函數后,結果如圖1-8所示。在運行環(huán)境中,如果未開啟安全模式,則可以使用此指令來禁止一些敏感函數的使用。在默認狀態(tài)下,disable_functions是沒有禁止任何PHP函數運行的。在配置禁用函數時,應使用逗號來分隔函數名,例如:項目知識準備01PHP核心配置四3.魔術引號過濾magic_quotes_gpc在php.ini文件中是默認開啟的,用于設置GPC($_GET、$_POST、$_COOKIE)的魔術引用狀態(tài)(在PHP4中還包含$_ENV)。當開啟magic_quotes_gpc時,所有的單引號(')、雙引號(")、反斜線(\)和NULL(NULL字符)都會被反斜線自動轉義,相當于調用了addslashes()函數。測試代碼如下:項目知識準備01PHP核心配置四3.魔術引號過濾但是在PHP5中,magic_quotes_gpc并不會過濾$_SERVER變量,從而導致refer、client-ip等漏洞被利用,所以在PHP5.3之后的版本中不推薦使用,并且在PHP5.4之后的版本中已經被取消。如果開啟magic_quotes_runtime,則許多返回外部數據(如數據庫、文本)的函數將會被反斜線轉義。它和magic_quotes_gpc的區(qū)別是處理對象不同,magic_quotes_runtime是對外部引入的數據庫資料或者文件中的特殊字符進行轉義,例如,在Discuz1.0/Discuz3.x中,Discuz安裝文件開始部分的代碼就使用了magic_quotes_runtime這個函數;而magic_quotes_gpc是對post、get、cookie等數組傳遞過來的數據進行特殊字符轉義。測試代碼如下:項目知識準備01PHP核心配置四4.包含遠程文件在allow_url_include(默認關閉)的配置為on的情況下,可以直接包含遠程文件,若包含的變量是可控的,則可以直接控制變量來執(zhí)行PHP代碼。allow_url_open(默認開啟)允許本地PHP文件通過調用URL重寫來打開或關閉寫權限,通過默認的封裝協議提供的FTP和HTTP協議來訪問文件。測試代碼如下:項目知識準備01PHP核心配置四5.可訪問目錄open_basedir用于將PHP所能打開的文件限制在指定的目錄樹中。當程序想要使用fopen()或file_get_contents()函數打開一個文件時,這個文件的位置將會被檢查。當文件在指定的目錄樹之外時,程序將拒絕打開該文件,當然本指令并不受打開或關閉安全模式的影響。使用open_basedir需要注意的是:多個目錄需要以分號(;)分隔;在訪問被限制的指定目錄時,需要使用斜線結束路徑名,如open_basedir=/www/dvwa/,如果將其設置為open_basedir=/www/dvwa,則/www/dvwa和/www/dvwaaaaaaaa都是可以訪問的。另外,如果在程序中使用open_basedir,則應將其寫為ini_set('open_basedir','指定目錄'),但是不建議使用這種方式。項目知識準備01PHP核心配置四6.全局變量注冊開關在register_globals的配置為on的情況下,傳遞過來的值會被注冊為全局變量,從而可以被直接使用;在register_globals的配置為off的情況下,需要通過特定的數組得到它。例如,當register_globals=off時,下一個程序應該使用$_GET['username']來接收傳遞過來的值;當register_globals=on時,下一個程序可以直接使用$username來接收傳遞過來的值。然而,register_globals從PHP5.3起被棄用,并在PHP5.4中被移除,因此不推薦使用。當register_globals=off時,檢查$_SESSION['username']是否被賦值,如果已經被賦值,則會輸出username;如果尚未被賦值,則會輸出false。測試代碼如下:當register_globals=on時,$_SESSION['username']可能會在其他HTTP請求中被賦值,結果如圖1-13所示。02任務1部署Windows平臺的工作環(huán)境任務1部署Windows平臺的工作環(huán)境02能夠在Windows平臺上部署PHP集成環(huán)境熟悉《中華人民共和國網絡安全法》中關于安全漏洞的條款。任務目標一任務實施二1.安裝運行通過phpStudy官網下載對應的壓縮文件,并在下載成功后將該文件解壓縮,之后在彈出的對話框中選擇安裝路徑,如圖1-14所示,單擊“是”按鈕,進行安裝。在單擊“是”按鈕之后,即可將壓縮包內的文件解壓縮到指定目錄中,如圖1-15所示。任務1部署Windows平臺的工作環(huán)境02任務實施二2.目錄結構在項目安裝服務目錄PHPTutorial中,可以看到對應服務,如圖1-16所示。其中,主要內容如下。HTTP服務器:Apache/Nginx/IIS。數據庫:MySQL。腳本語言:PHP。根目錄:WWW。數據庫管理工具:phpMyAdmin(在根目錄下)。任務1部署Windows平臺的工作環(huán)境02任務實施二3.主界面主界面如圖1-17所示,對Apache的運行狀態(tài)而言,綠燈表示正常,紅燈表示不正常。“運行模式”可以被設置為“系統(tǒng)服務”,以后臺進程的方式常駐內存;也可以被設置為“非服務模式”,隨開隨用。4.切換版本選擇“切換版本”選項,即可在彈出的菜單中選擇對應的版本及服務,如圖1-18所示。任務1部署Windows平臺的工作環(huán)境02任務實施二5.站點配置單擊“其他選項菜單”按鈕,在彈出的菜單中選擇“phpStudy設置”→“端口常規(guī)設置”命令,打開“端口常規(guī)設置”對話框,如圖1-19所示。在該對話框中,可以修改Apache的“httpd端口”“網站目錄”、PHP的“全局全量”“腳本運行最長時間”及MySQL的“端口”“最大連接數”等內容。6.修改hosts域名解析文件單擊“其他選項菜單”按鈕,在彈出的菜單中選擇“打開host”命令,如圖1-20所示,即可在彈出的對話框中修改hosts域名解析文件。任務1部署Windows平臺的工作環(huán)境02任務實施二7.PHP擴展設置單擊“其他選項菜單”按鈕,在彈出的菜單中選擇“PHP擴展及設置”命令,如圖1-21所示,即可開啟/關閉PHP擴展等。8.MySQL管理單擊“其他選項菜單”按鈕,在彈出的菜單中選擇“MySQL工具”命令,如圖1-22所示,即可設置或修改密碼,也可以在忘記密碼的情況下重置密碼,默認的用戶名/密碼是root。任務1部署Windows平臺的工作環(huán)境02任務實施二9.phpMyAdmin單擊“其他選項菜單”按鈕,在彈出的菜單中選擇“phpMyAdmin”命令,即可彈出如圖1-23所示的登錄界面,這時可以直接訪問http://localhost/phpMyAdmin/,默認的用戶名/密碼是root。03任務2部署Linux平臺的工作環(huán)境任務2部署Linux平臺的工作環(huán)境03能夠在Linux平臺上部署PHP集成環(huán)境理解Linux開放源代碼的特點,以及我國信息技術應用創(chuàng)新產業(yè)的發(fā)展動因。任務目標一任務實施二1.一鍵安裝腳本下面在Linux平臺上進行環(huán)境部署,目前,phpStudy可以一鍵安裝Web環(huán)境。CentOS的一鍵安裝命令如下、Ubuntu/Deepin/Debian的一鍵安裝命令如下:任務2部署Linux平臺的工作環(huán)境03任務實施二2.安裝部署本書的Linux平臺的工作環(huán)境是在Ubuntu16.04.3中進行安裝和部署的,輸入一鍵安裝腳本,如圖1-24所示。在安裝結束后,結果如圖1-25所示,可以看到相關運行狀態(tài)信息。任務2部署Linux平臺的工作環(huán)境03任務實施二3.相關操作4.訪問面板登錄瀏覽器訪問面板,輸入系統(tǒng)提供的初始賬號和密碼,主界面如圖1-26所示。任務2部署Linux平臺的工作環(huán)境03任務實施二5.軟件管理選擇左側導航欄中的“軟件管理”標簽,進入軟件管理界面,可以看到PHP版本、MySQL版本、Memcached、Redis等相關系統(tǒng)環(huán)境信息,單擊“安裝”按鈕,即可部署對應的服務。在部署成功后,即可在對應的“狀態(tài)”列中設置“已停止”或“運行中”狀態(tài),如圖1-27所示。任務2部署Linux平臺的工作環(huán)境03任務實施二6.數據庫選擇左側導航欄中的“數據庫”標簽,進入數據庫列表界面,單擊“添加數據庫”按鈕,彈出“添加數據庫”對話框,如圖1-28所示。在該對話框中,先輸入數據庫名并選擇編碼格式,再輸入用戶名和密碼并設置訪問權限,最后單擊“保存”按鈕,即可創(chuàng)建數據庫。單擊“root密碼”按鈕,即可在彈出的對話框中修改root密碼,如圖1-29所示。任務2部署Linux平臺的工作環(huán)境03任務實施二7.部署服務選擇左側導航欄中的“文件”標簽,進入文件管理界面,可以進行“文件上傳”“新建文件”“新建目錄”“返回用戶根目錄”等操作,在右側“操作”列可以進行“重命名”“權限”“壓縮”“刪除”等操作,其中根目錄在“/www/admin/localhost_80/”中,如圖1-30所示。04項目復盤項目復盤04在Windows平臺上部署PHP集成環(huán)境。1在Linux平臺上部署PHP集成環(huán)境。2感謝觀看!Web安全漏洞及代碼審計(第2版)(微課版)初識審計軟件項目2Web安全漏洞及代碼審計(第2版)(微課版)01項目知識準備項目知識準備01在代碼審計過程中需要用到很多輔助工具,也就是說,無論是編寫程序還是進行代碼審計,都需要一款合適的代碼編輯器。代碼編輯器如同學生的筆、醫(yī)生的手術刀一樣,是程序開發(fā)人員在工作中的必備工具。可以說,好用的開發(fā)工具能夠極大地提高工作效率,因此,需要找到一款適合自己的代碼編輯器,使開發(fā)效率更高,所以本項目將重點介紹這些輔助工具的使用。1.SublimeText3SublimeText3是一款具有代碼高亮顯示、語法提示、自動完成且反應快速等特點的編輯器軟件,支持插件擴展機制。相比于較難上手的Vim編輯器,SublimeText3編輯器的操作無疑簡單很多,如圖2-1所示。代碼編輯工具一項目知識準備012.PhpStormPhpStorm是JetBrains公司開發(fā)的一款商業(yè)化PHP集成開發(fā)工具,如圖2-2所示。PhpStorm可以隨時幫助用戶對其編寫的代碼進行調整、運行單元測試或者提供可視化debug功能??梢哉f,PhpStorm是輕量級且便捷的PHPIDE,旨在提高用戶編寫代碼的效率。PhpStorm可以深刻理解用戶編寫的代碼,提供智能代碼補全、快速導航及即時錯誤檢查等功能,全面提升了用戶的PHP代碼編寫效率,并極大地節(jié)省了用戶的PHP代碼編寫時間。代碼編輯工具一項目知識準備01代碼審計工具二1.Seay源代碼審計系統(tǒng)Seay源代碼審計系統(tǒng)是一款基于C#語言開發(fā)的代碼審計工具,主要針對PHP代碼進行分析,具有自動代碼審計功能,簡化了人工審計的煩瑣流程,使得代碼審計更加智能、簡潔。它支持一鍵審計、代碼調試、函數定位、插件擴展、規(guī)則配置、代碼高亮、編碼轉換、數據庫管理和監(jiān)控等19項強大功能,主界面如圖2-3所示。在使用Seay源代碼審計系統(tǒng)時,先單擊菜單欄中的“新建項目”按鈕,選擇需要審計的源代碼文件,然后單擊菜單欄中的“自動審計”按鈕,進入“自動審計”界面,最后單擊“開始”按鈕,系統(tǒng)就會開始掃描并分析代碼中的安全問題。代碼中可能出現的漏洞詳情如圖2-4所示。項目知識準備01代碼審計工具二2.RIPSRIPS是一款基于PHP開發(fā)的源代碼分析工具,如圖2-11所示。它使用了靜態(tài)分析技術,能夠自動掃描PHP源代碼潛在的安全漏洞。滲透測試人員可以直接審閱分析結果,而不用審閱整個程序代碼。它實現了在函數定義和調用之間進行靈活跳轉的功能,支持多種樣式的代碼高亮,還可以詳細地列出每個漏洞的描述、舉例、PoC、補丁和安全函數。項目知識準備01代碼審計工具二2.RIPS項目知識準備01代碼審計工具二2.RIPS此時可以看到,界面中多出了一個“windows”視窗,如圖2-16所示,其中包括4個按鈕,具體作用如下。(1)files:顯示掃描和已包含的文件。(2)userinput:顯示傳入的參數,也可以在此回溯代碼,尋找可控的變量。(3)stats:顯示可視化掃描結果。(4)functions:顯示源代碼中所有定義的方法,在此可以快速定位到方法所在的位置。項目知識準備01代碼審計工具二3.FortifySCAFortifySCA是HP的一款商業(yè)化產品,也是一款靜態(tài)的、白盒的軟件源代碼安全測試工具,如圖2-17所示。它通過內置的五大主要分析引擎——數據流、語義、結構、控制流、配置流,對應用軟件的源代碼進行靜態(tài)分析,并在分析過程中與其特有的軟件安全漏洞規(guī)則集進行全面的匹配、查找,從而將源代碼中存在的安全漏洞掃描出來,整理、生成完整的報告。掃描結果中不僅包括詳細的安全漏洞信息,還包括相關的安全知識說明,以及相應的修復建議。FortifySCA支持常見的操作系統(tǒng),如Windows、Solaris、RedHatLinux、OSX、HP-UX、IBMAIX;提供常見開發(fā)平臺的IDE插件,如VisualStudio、Eclipse、RAD、RSA;可以檢測600多種源代碼安全漏洞。對于CWE組織發(fā)布的漏洞信息,FortifySCA都會及時跟進并更新漏洞庫。FortifySCA目前可以支持多達21種常見開發(fā)語言的檢測,可以掃描和分析有安全漏洞和安全隱患的源代碼。FortifySCA支持C/C++/C#、Java、VB,數據庫開發(fā)語言Transact-SQL、PL/SQL,大型項目和管理平臺開發(fā)語言COBOL、ColdFusion、ABAP、Flex,腳本語言JSP、JavaScript/AJAX、VBScript、Python,網絡和網頁開發(fā)語言ASP.NET、VB.NET、ASP、PHP、HTML,以及移動應用開發(fā)語言Android、Objective-C等。ScanJavaProject表示掃描Java項目,AdvancedScan表示高級掃描項目。在進行高級掃描項目分析時(見圖2-18),會出現一些參數,常見的參數及其含義如表2-1所示。項目知識準備01代碼審計工具二3.FortifySCA項目知識準備01輔助驗證工具三1.SQL執(zhí)行監(jiān)控工具在進行SQL執(zhí)行監(jiān)控時,可以使用Seay源代碼審計系統(tǒng)中自帶的監(jiān)控插件。在Seay源代碼審計系統(tǒng)2.0之后的版本中,增加了MySQL執(zhí)行監(jiān)控,可以監(jiān)控自定義斷點后執(zhí)行的所有SQL語句,方便調試SQL注入,如圖2-22所示。另外,也可以通過互聯網尋找一些Python腳本,目前互聯網中有一些小腳本。MySQL執(zhí)行監(jiān)控的主要原理是開啟MySQL的general_log表來記錄MySQL的歷史執(zhí)行語句。它有兩種記錄方式:默認的記錄方式是記錄到文件中;另一種記錄方式是直接記錄到MySQL的general_log表中。在開啟MySQL的general_log表后,會在本地生成log文件,可以根據本地生成的正則匹配log文件來篩選出執(zhí)行的SQL語句。項目知識準備01輔助驗證工具三2.BurpSuiteBurpSuite是一款使用Java編寫的,用于Web應用安全審計與掃描的工具。它集成了諸多實用的小工具以完成HTTP請求的轉發(fā)、修改、掃描等操作,同時這些小工具之間還可以互相協作,在BurpSuite這個框架下進行各種強大的、可定制的攻擊/掃描方案。安全人員可以使用它進行半自動的網絡安全審計,開發(fā)人員也可以使用它的掃描工具進行網站壓力測試與攻擊測試,以檢測Web應用的安全問題。BurpSuite主界面如圖2-23所示。BurpSuite主要包括Dashboard、Proxy、Intruder、Repeater、Sequencer、Decoder、Comparer、Extender和Projectoptions模塊等。項目知識準備01輔助驗證工具三2.BurpSuite代理功能是最常用的功能,這是因為其他幾個常用功能都基于該功能捕獲的數據包。該功能的使用非常簡單,在打開BurpSuite后,在界面上方選擇“Proxy”選項卡即可打開代理功能界面。如果想要使用BurpSuite,則需要設置代理服務器。下面,使用火狐瀏覽器進行測試。項目知識準備01輔助驗證工具三2.BurpSuiteIntruder模塊是一個高度可配置的、可用于自動化攻擊的模塊。用戶可以使用Intruder模塊執(zhí)行很多任務,包括枚舉標識符、獲取有用的數據和模糊測試。攻擊類型取決于應用程序的情況,可能包括SQL注入、跨站點腳本、路徑遍歷、暴力攻擊認證系統(tǒng)、枚舉、數據挖掘、并發(fā)攻擊、應用程序的拒絕服務攻擊等。Intruder模塊主要由以下4個模塊組成。(1)Target(2)Positions(3)Payloads(4)Options用戶可以在發(fā)動攻擊之前,在Intruder模塊的用戶界面上編輯這些選項,也可以在進行攻擊時對正在運行的窗口修改大部分設置。使用較多的是暴力破解登錄用戶密碼,因為它具有非常強大的兼容性,可以支持各種數據格式爆破。下面來看看Intruder模塊到底有多強大。這里在DVWA中演示使用它進行爆破的過程。項目知識準備01輔助驗證工具三2.BurpSuite項目知識準備01輔助驗證工具三3.正則調試工具正則表達式使用自定義的特定字符組合在正則分析引擎中執(zhí)行字符匹配的操作。正則表達式非常靈活,可以應用于許多不同的場景中,如驗證注冊的用戶名是否正確。同時,在搜索文件內容時,相當多的WAF(Web應用防火墻)的規(guī)則也基于正則表達式。但是,如果不嚴謹地編寫正則表達式,則經常會出現各種錯誤,如繞過防火墻等。因此,需要熟悉正則表達式的用法,熟悉各個符號的含義,這樣才能編寫出嚴謹的正則表達式,才能在代碼審計中發(fā)現正則表達式的問題所在。下面介紹一個常用的測試和分析正則表達式的工具——Regester。測試和分析正則表達式的工具,支持實時預覽,也就是說,用戶在輸入框中修改正則表達式或者需要匹配的源字符時,調試的結果會實時顯示在下方的信息欄中,非常直觀和方便。項目知識準備01輔助驗證工具三4.編碼與加/解密工具BurpSuite中有一個Decoder模塊,這個Decoder模塊的功能比較簡單,可以對字符串進行編碼和解碼,目前支持URL、HTML、Base64、ASCII、Hex、Octal、Binary、Gzip等編碼格式。它的用法也非常簡單,只需要在輸入域中輸入要轉換的字符,之后選擇轉換的編碼格式即可,如圖2-33所示。02任務1使用Seay審計DVWA任務1使用Seay審計DVWA02能夠使用Seay軟件進行初步的代碼審計了解國家信息安全漏洞庫(CNNVD)中安全漏洞的分類和發(fā)展態(tài)勢。任務目標一任務實施二1.DVWA簡介DVWA(DamnVulnerableWebApplication)是一個用來進行安全脆弱性鑒定的PHP/MySQLWeb應用,旨在為安全管理人員測試自己的專業(yè)技能和工具提供合法的環(huán)境,幫助Web開發(fā)者更好地理解Web應用安全防范的過程。DVWA的漏洞示例分為4個安全等級:Low、Medium、High、Impossible。任務1使用Seay審計DVWA02任務實施二2.環(huán)境搭建在DVWA官網上,下載最新版本DVWA,如圖2-34所示。單擊“DOWNLOAD”按鈕,即開始下載。下載完成的文件是一個壓縮包,將其解壓縮后把DVWA安裝到phpStudy的根目錄下,如圖2-35所示。任務1使用Seay審計DVWA02任務實施二2.環(huán)境搭建之后,打開本地網址,界面中會提示配置文件錯誤,如圖2-36所示。需要注意的是,將config文件夾下的config.inc.php.dist文件修改為config.inc.php,即可進入安裝界面,如圖2-37所示。任務1使用Seay審計DVWA02任務實施二2.環(huán)境搭建在/config/config.inc.php文件中修改數據庫信息,將配置文件中的數據庫密碼db_password改為root后保存,如圖2-38所示,之后單擊“Create/ResetDatabase”按鈕,即可安裝成功,如圖2-39所示。在軟件安裝成功后,就會跳轉到登錄界面,如圖2-40所示。DVWA默認的賬號(Username)是admin,密碼(Password)是password。任務1使用Seay審計DVWA02任務實施二3.使用工具審計打開Seay源代碼審計系統(tǒng),單擊“新建項目”按鈕,選擇想要審計的源代碼程序,單擊“開始”按鈕,程序就會自動根據規(guī)則對源代碼中可能存在的安全隱患進行模糊審計,如圖2-41所示。在漏洞掃描完成后,可以發(fā)現,程序在下面提示“掃描完成,發(fā)現188個可疑漏洞,花費時間56.41秒”,并且在漏洞描述的第170行可能存在SQL注入漏洞,如圖2-42所示。任務1使用Seay審計DVWA02任務實施二3.使用工具審計雙擊“漏洞描述”列中某項漏洞后面的“漏洞詳細”列的相應內容,即可定位到出現可疑漏洞的代碼,代碼如下:任務1使用Seay審計DVWA02任務實施二3.使用工具審計在上述代碼中可以看到,通過POST方式傳遞過來的參數$id會經過mysqli_real_escape_string()函數的處理。該函數主要用于對SQL語句中使用的字符串中的特殊字符進行轉義??杀晦D義字符如表2-2所示。參數$id經過處理之后,將被傳入SQL語句中執(zhí)行。因此,只需要控制用戶輸入的內容,即可突破轉義限制。同時,Seay源代碼審計系統(tǒng)提供生成報告的功能,在“自動審計”界面中,單擊“生成報告”按鈕,就會生成一份報告信息以供用戶查看,如圖2-43所示。03任務2使用RIPS審計DVWA任務2使用RIPS審計DVWA03能夠使用RIPS軟件進行初步的代碼審計了解國家信息安全漏洞共享平臺(CNVD)中安全漏洞的分類和發(fā)展態(tài)勢。任務目標一任務實施二1.RIPS環(huán)境的本地搭建在通過RIPS官網下載最新版本的RIPS后,將壓縮包解壓縮到網站根目錄下即可運行它,如圖2-44所示??梢允褂没鸷鼮g覽器訪問RIPS(目前RIPS聲稱只支持火狐瀏覽器)。任務2使用RIPS審計DVWA03任務實施二2.使用工具審計在程序啟動后,可以看到RIPS主界面,其中包括以下選項。path/file、subdirs、verbositylevel、vulntype、scan、codestyle、/regex/、search任務2使用RIPS審計DVWA03任務實施二2.使用工具審計在第8行代碼中可以看到,通過GET方式傳入的參數name會進入str_replace()函數,在經過這個函數處理后,程序會將處理后的內容顯示到頁面上,從而導致跨站腳本攻擊。下面來介紹一下str_replace($search,$replace,$subject)函數。該函數返回一個字符串或數組,該字符串或數組是將subject中全部的$search替換為$replace之后的結果。其中,$search是要查找的值;$replace是將查找到的值進行替換的內容;$subject是執(zhí)行替換的字符串或數組。也就是說,這個函數會查找傳入的參數name中是否存在<script>,如果存在,就會將它替換成NULL(空值)。因此,在進行最終驗證時,只要在Payload中繞過這種機制,就會觸發(fā)跨站腳本攻擊。04項目復盤項目復盤04使用Seay源代碼審計系統(tǒng)進行代碼審計。1掌握本地搭建RIPS環(huán)境。2復現任務1中的SQL注入攻擊問題并突破轉義限制。3復現任務2中的跨站腳本攻擊問題并繞過防護限制。4感謝觀看!Web安全漏洞及代碼審計(第2版)(微課版)基于DVWA的漏洞分析與代碼審計項目3Web安全漏洞及代碼審計(第2版)(微課版)01項目知識準備項目知識準備01漏洞簽名:是指經常伴隨漏洞出現的特征代碼,簡單來說,就是經常伴隨漏洞出現的函數,如SQL注入的mysql_query()函數及命令注入的shell_exec()函數等。這時可以直接在源代碼中全文搜索危險函數,快速定位可能出現問題的位置,分析危險函數的上下文,判斷輸入的參數是否可控,并跟蹤參數的傳遞流程。也可以根據一些特征去匹配關鍵字。例如:在SQL語句中使用SELECT查詢語句等。雖然這種方式的審計效率較高,可以快速定位漏洞,但是由于對程序的了解不是很深入,因此該方式無法確定一些邏輯層面的漏洞。尋找漏洞簽名一項目知識準備01當有了一定的代碼審計經驗后,通??梢哉莆粘R姷穆┒从|發(fā)場景。因此,也可以通過這種方式進行代碼審計,并在程序部署成功后查看系統(tǒng)中存在哪些功能模塊,了解對應功能的程序文件是什么樣的。當了解了程序的大體功能后,就可以針對功能點進行定向審計。例如,在上傳頭像時:若沒有校驗上傳文件的格式類型,則可能導致文件上傳漏洞;在加載圖片或分享鏈接時會發(fā)送網絡請求,若沒有校驗內網地址和限制規(guī)定協議,則可能導致SSRF漏洞;在文件操作界面中,若不同賬戶的權限不同,則可能因權限校驗不嚴格而導致越權漏洞。因此,可以優(yōu)先尋找經常出現問題的功能點來進行代碼審計,以快速提高審計效率。功能點定向審計二項目知識準備01使用通讀全文的方式可以快速了解整個程序的業(yè)務邏輯,使審計更加全面。在人工審計代碼時,通常需要收集系統(tǒng)的設計文檔、系統(tǒng)開發(fā)說明書等技術資料,以便更好地了解系統(tǒng)的業(yè)務功能。首先,需要了解程序代碼的目錄結構,包括主目錄文件、功能模塊文件、靜態(tài)資源目錄文件及日志文件等,而index.php、admin.php文件通常是整個程序的入口,通過讀取index.php文件可以知道程序的架構、運行流程、包含的配置文件、包含的過濾文件及包含的安全過濾文件等,從而了解程序的業(yè)務邏輯。在配置文件(如config.php)中,會保存數據庫和程序配置的相關信息,如果數據庫采用GBK編碼格式,則可能存在寬字節(jié)注入問題,如果變量的值使用雙引號,則可能存在雙引號二次解析引起的代碼執(zhí)行等問題。在公共函數文件和安全過濾文件中,可能會對用戶輸入的參數進行轉義,這關系到漏洞點能否被利用??梢酝ㄟ^讀取過濾文件,清晰地掌握用戶輸入的數據中哪些數據被過濾了,哪些數據沒有被過濾。如果數據被過濾了,那么可以了解數據是在什么位置被過濾的,過濾的機制是什么樣的,是通過替換的方式還是正則的方式過濾的,是否開啟了魔術引號或使用了過濾函數,以及能否繞過過濾機制。這樣一來,在使用通讀全文的方式進行代碼審計時,可以更有方向地通讀全文的代碼,不僅可以梳理一遍程序的架構、流程,還可以審計出更多有質量的漏洞。通讀全文三02任務1功能點定向審計任務1功能點定向審計02能夠進行功能點的定向審計了解OWASP和國際漏洞庫(CVE)中安全漏洞的分類和發(fā)展態(tài)勢。任務目標一任務實施二1.尋找漏洞簽名這里選擇使用Seay源代碼審計系統(tǒng)來演示如何尋找漏洞簽名,如圖3-1所示。單擊菜單欄中的“新建項目”按鈕,選擇需要審計的項目后單擊菜單欄中的“自動審計”按鈕,進入“自動審計”界面,之后單擊“開始”按鈕,即可開始審計。任務1功能點定向審計02任務實施二在審計結束后,會得到一些頁面中可能存在的漏洞列表,如圖3-2所示。選擇位于content.php頁面的那一條信息,雙擊第15行中“漏洞詳細”列的相應內容,即可直接定位到這段代碼中,如圖3-3所示。1.尋找漏洞簽名任務1功能點定向審計02任務實施二定位代碼中的SQL語句使用的是拼接的方式,也就是說,SQL語句中的$id是可控的。通過分析上下文可知,$id是通過轉義后的參數cid賦值的,傳遞過來的參數cid會經過addslashes()函數轉義,而addslashes()函數的作用是在單引號(')、雙引號(")、反斜線(\)與NULL字符之前加上反斜線。可以通過報錯語句來讀取數據庫信息,在請求中輸入如下代碼:1.尋找漏洞簽名任務1功能點定向審計02任務實施二1)程序安裝:在進行程序安裝時,如果未嚴格過濾配置文件,則攻擊者可以在安裝過程中向配置文件中插入惡意代碼以執(zhí)行任意命令,甚至可以直接獲取Webshell。2)文件上傳:在網站運營的過程中,不可避免地要更新網站的某些頁面或內容,因此有必要在網站中使用文件上傳功能。3)文件操作:在進行文件操作時,除任意文件讀取漏洞外,若程序開發(fā)人員先將重復的代碼單獨寫到一個文件中,然后在需要使用該文件中的代碼時,直接使用包含函數包含該文件并調用,則很可能存在文件包含漏洞。4)登錄驗證:在進行登錄驗證時,經常會出現的漏洞。5)找回密碼:在找回密碼的過程中,雖然看起來沒有文件包含這種可以危害到服務器安全的漏洞,但是如果攻擊者可以重置管理員的密碼,則可以間接控制業(yè)務權限甚至拿到服務器權限。2.功能點定向審計任務1功能點定向審計02任務實施二這里使用熊海CMS1.0進行演示,此系統(tǒng)功能比較簡單,也比較容易理解。首先看一下目錄結構,如圖3-5所示。index.php文件代碼如下:3.通讀全文任務1功能點定向審計02任務實施二在inc目錄中,有一些配置數據庫的文件,其中checklogin.php文件中的代碼如下:3.通讀全文這個配置文件是用于驗證后臺登錄信息的文件,而后臺是否登錄是通過獲取Cookie中的參數user進行判斷的。如果參數user為空,則會跳轉到登錄界面。幾乎所有后臺都是通過這種Cookie來進行認證的,因此,只要在Cookie中自行加入參數user的值,就可以成功繞過后臺權限。以/admin/files/wzlist.php文件為例,如圖3-7所示。03任務2暴力破解漏洞與審計任務2暴力破解漏洞與審計03能夠進行暴力破解漏洞的分析與代碼審計了解國內漏洞平臺(CNVD/CNNVD)、國外漏洞平臺(OWASP/CVE)中關于暴力破解漏洞的新資訊。任務目標一任務實施二1.Low等級任務2暴力破解漏洞與審計03任務實施二2.Medium等級任務2暴力破解漏洞與審計03任務實施二3.High等級任務2暴力破解漏洞與審計03任務實施二4.Impossible等級任務2暴力破解漏洞與審計03任務實施二4.Impossible等級04任務3命令注入漏洞與審計任務3命令注入漏洞與審計04能夠進行命令注入漏洞的分析與代碼審計了解國內漏洞平臺(CNVD/CNNVD)、國外漏洞平臺(OWASP/CVE)中關于命令注入漏洞的新資訊。任務目標一任務實施二1.Low等級任務3命令注入漏洞與審計04任務實施二2.Medium等級任務3命令注入漏洞與審計04任務實施二3.High等級任務3命令注入漏洞與審計04任務實施二4.Impossible等級05任務4跨站請求偽造漏洞與審計任務4跨站請求偽造漏洞與審計05能夠進行跨站請求偽造漏洞的分析與代碼審計了解國內漏洞平臺(CNVD/CNNVD)、國外漏洞平臺(OWASP/CVE)中關于跨站請求偽造漏洞的新資訊。任務目標一任務實施二1.Low等級在存在CSRF漏洞的提交框內輸入要修改的密碼并提交,之后復制提交信息后的URL,如/dvwa/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change#。該URL中包含要修改的密碼,攻擊者可以將這個網站地址發(fā)送給目標對象,如果目標對象此時正以管理員的身份登錄此網站,并單擊了該URL,攻擊者就可以成功地修改此網站的賬戶和密碼。代碼如下:任務4跨站請求偽造漏洞與審計05任務實施二上述Low等級代碼是一段用于修改密碼的PHP程序。通過上述代碼可以看出,當password_new與password_conf一致時,程序就會進行修改密碼的操作。(1)通過發(fā)送電子郵件或信息等方式將URL發(fā)送給該網站的一個用戶,當該用戶單擊了這個鏈接后,其密碼就會被自動修改為password,但是會進入密碼修改成功的提示界面,使得用戶有所察覺。(2)構造攻擊頁面,插入<imgsrc='改密url'/>標簽,當用戶訪問該網站時,瀏覽器在加載圖片時就會自動修改密碼,代碼如下:1.Low等級任務4跨站請求偽造漏洞與審計05任務實施二2.Medium等級任務4跨站請求偽造漏洞與審計05任務實施二2.Medium等級參數Referer繞過過濾規(guī)則,結果如圖3-14所示。密碼修改成功,結果如圖3-15所示。任務4跨站請求偽造漏洞與審計05任務實施二3.High等級任務4跨站請求偽造漏洞與審計05任務實施二上述High等級代碼增加了token的限制。在用戶每次訪問改密頁面時,服務器都會返回一個隨機的token。當客戶端向服務器發(fā)起請求時,客戶端需要提交token,而服務器在收到請求時,會優(yōu)先檢查token,只有token正確,服務器才會處理客戶端的請求。攻擊者只有獲取token后才能模擬請求,且只有登錄后才能訪問該頁面并獲取token。但是瀏覽器有同源策略限制,不允許跨域請求。此時攻擊者配合XSS漏洞,在XSS頁面注入JavaScript腳本,可以實現改密操作。下面利用High等級代碼中的XSS漏洞協助獲取token來完成CSRF攻擊。由于這里的name存在XSS漏洞,因此進行抓包,在參數中寫入XSS語句<iframesrc="../csrf"onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>,即可成功彈出token,如圖3-16所示。3.High等級任務4跨站請求偽造漏洞與審計05任務實施二4.Impossible等級06任務5文件包含漏洞與審計任務5文件包含漏洞與審計06能夠進行文件包含漏洞的分析與代碼審計了解國內漏洞平臺(CNVD/CNNVD)、國外漏洞平臺(OWASP/CVE)中關于文件包含漏洞的新資訊。任務目標一任務實施二1.Low等級通過分析上述Low等級代碼可以發(fā)現,該代碼直接從參數GET['page']中獲取文件名,并將其改為任意文件。具體操作步驟如下。(1)直接執(zhí)行遠程PHP代碼,示例代碼如下:任務5文件包含漏洞與審計06任務實施二(2)采用base64_encode的方式讀取文件內容,并展示在頁面中,示例代碼如下:1.Low等級上述Low等級代碼沒有過濾任何內容。index.php文件直接包含了Low等級代碼中$file的值。要使用遠程文件包含功能,需要在php.ini配置文件中開啟兩個參數:allow_url_fopen=on;allow_url_include=on。使用遠程文件包含功能演示在DVWA目錄下的1.txt文件中寫入phpinfo()函數和一句話,如圖3-18所示。任務5文件包含漏洞與審計06任務實施二2.Medium等級通過分析上述Medium等級代碼可以發(fā)現,該代碼對參數進行了簡單的過濾。$file=str_replace(array("http://","https://"),"",$file);$file=str_replace(array("../","..\""),"",$file);hhttps://ttp://過濾后剛好為http://,繞過了該防護,可見過濾并不嚴謹,如圖3-21所示。任務5文件包含漏洞與審計06任務實施二3.High等級上述High等級代碼的主要功能是引用file1.php、file2.php、file3.php、include.php文件,所以該代碼增加了對文件名的驗證,代碼如下:利用File協議即可繞過該正則判斷,如vulnerabilities/fi/?page=file:///D:/phpstudy_pro/WWW/DVWA/1.txt,結果如圖3-22所示。任務5文件包含漏洞與審計06任務實施二4.Impossible等級通過分析上述Impossible等級代碼可以發(fā)現,該代碼中的策略是正確的,但是其正則表達式寫得不夠嚴謹,可以通過在代碼中使用白名單的方式進行文件名稱全匹配,從而避免引入其他未知文件。同時,Impossible等級代碼中的if語句是根據條件進行判斷的,如果包含的不是include.php文件且文件名不是以file開頭的,就會報錯。07任務6文件上傳漏洞與審計任務6文件上傳漏洞與審計07能夠進行文件上傳漏洞的分析與代碼審計了解國內漏洞平臺(CNVD/CNNVD)、國外漏洞平臺(OWASP/CVE)中關于文件上傳漏洞的新資訊。任務目標一任務實施二1.Low等級通過分析上述Low等級代碼可以發(fā)現,該代碼沒有進行過濾或本地JavaScript校驗,也沒有進行任何防護,更沒有對上傳文件的格式進行限制,且文件不需要重命名,所以可以直接上傳PHP腳本文件等。任務實施二2.Medium等級通過分析上述Medium等級代碼可以發(fā)現以下內容。(1)上傳.php文件,會出現如下報錯信息:(2)通過修改Content-Type:image/png,可以成功上傳phpinfo.php文件。源代碼如下:任務6文件上傳漏洞與審計07任務實施二3.High等級上述High等級代碼增加了對文件名后綴的判斷,但是未對文件進行重命名。上傳test.php%00.png文件,在文件內容開始位置增加png頭“89504E470D0A1A0A”,在PHP版本號小于5.3.4或Magic_quote_gpc=off時,通過substr()函數獲取的后綴為png;在保存文件時,%00會將文件名截斷為test.php。%00的增加方式有以下兩種。(1)使用BurpSuite抓包,在Row模式下文件名中間增加空格,之后切換到Hex編碼,找到20并將其改成00。(2)在Row模式下的文件名中增加“%00”,之后右擊“%00”,選擇相應命令,進行URLDecode編碼。任務6文件上傳漏洞與審計07任務實施二4.Impossible等級任務6文件上傳漏洞與審計0708任務7SQL注入漏洞與審計任務7SQL注入漏洞與審計08能夠進行SQL注入漏洞的分析與代碼審計了解國內漏洞平臺(CNVD/CNNVD)、國外漏洞平臺(OWASP/CVE)中關于SQL注入漏洞的新資訊。任務目標一任務實施二1.Low等級從上述Low等級代碼中可以清楚地看到,參數被直接拼接在SQL語句中,可以被注入任意SQL語句中;在出現語法錯誤時,會有SQL語句報錯,可以更加方便地編寫SQL注入。通過$_GET['id']=1'or1=1---可以繞過判斷,之后利用union查詢數據庫中的內容。任務實施二SQL手動注入的方法:利用上面的漏洞對SQL語句進行手動注入的方法如下。(1)通過id=1和id=1',利用回顯不同來判斷是否存在漏洞。(2)通過id=1'and1=1---和id=1'and1=0---,確認SQL注入點。(3)通過orderby查詢前面的字段數目。id=1'orderby[n]---,當n=2時正常,當n=3時報錯,則說明有兩個字段。(4)通過查詢?yōu)榭?,之后利用union確定回顯字段。id=1'and1=0unionselect1,2---,確定回顯字段為1,2。(5)在union后構造查詢語句,可以獲取數據庫信息。常用的union構造查詢語句有以下幾條:任務7SQL注入漏洞與審計081.Low等級任務實施二這里的普通SQL注入是非常容易被利用的SQL注入漏洞,例如,直接通過聯合查詢注入就可以查詢數據庫的內容。一般的SQL注入工具也能夠非常好地利用SQL注入漏洞,如sqlmap。sqlmap是目前使用非常多的SQL注入工具,并且是一款開源的國外SQL注入工具。該工具基于Python開發(fā),具有強大的檢測引擎,可以用來進行自動化檢測,支持多種方式及多種類型的SQL注入。但是,攻擊者利用SQL注入漏洞,可以獲取數據庫服務器的權限,獲取存儲在數據庫中的數據,訪問操作系統(tǒng)文件,甚至通過外部數據連接執(zhí)行操作系統(tǒng)命令。sqlmap常用的指令如下。(1)-u:指定目標URL,SQL注入點。(2)-cookie:當前會話的Cookie值。(3)-b:獲取數據庫類型,檢索數據庫管理系統(tǒng)的標識。(4)-current-db:獲取當前數據庫信息。(5)-current-user:獲取當前登錄數據庫的用戶信息。任務7SQL注入漏洞與審計081.Low等級任務實施二sqlmap還有更多的指令,可以使用-h或--help指令查看更多的指令操作,如果不想在每次執(zhí)行語句時都要手動確認一些選項,則可以使用--batch指令,讓sqlmap自己決定。對于sqlmap,本書不再贅述,感興趣的讀者可以自行查閱相關資料。任務7SQL注入漏洞與審計081.Low等級任務實施二任務7SQL注入漏洞與審計082.Medium等級任務實施二通過分析上述High等級代碼可以發(fā)現,從Session中獲取參數id,理論上很安全,但是攻擊者可以通過前端隨意修改Session,因此,這種方式同樣是不安全的。利用BurpSuite進行抓包,如圖3-25所示。任務7SQL注入漏洞與審計083.High等級任務實施二通過抓包可以發(fā)現,首先請求的是session-input.php文件,下面分析一下session-input.php文件中的代碼。這里接收通過POST方式傳遞的參數id的值,也就是第一個請求包中參數id的值,之后把參數id的值存儲到high.php文件的Session中。變量$id的值就是獲取的$_SESSION['id']的值,之后將它代入SQL語句中執(zhí)行。任務7SQL注入漏洞與審計083.High等級任務實施二在上述Impossible等級代碼中,int型參數增加了is_numeric判斷,不接收其他字符串,從而避免了SQL注入。同時,使用PDO綁定參數的方式查詢數據庫十分安全。因此,在進行數據庫查詢時,推薦使用PDO方式,使$變量完全不出現在SQL語句中;要對參數增加嚴格校驗及格式轉換的步驟,只接收自己想要的參數;不要相信任何用戶輸入、SERVER變量、數據庫查詢的數據等。漏洞防范:雖然SQL注入漏洞是當前被廣泛利用的漏洞,但是解決SQL注入漏洞的問題實際上比較簡單。在PHP中,可以使用魔術引號來解決,但是在PHP5.4之后的版本中取消了魔術引號,并且GPC在面對int型注入時并沒有那么強大,因此通常使用的方法是過濾函數和類、PDOprepare預編譯。下面來看一下這兩種方法。(1)過濾函數和類。(2)PDOprepare預編譯。任務7SQL注入漏洞與審計084.Impossible等級09任務8SQL盲注漏洞與審計任務8SQL盲注漏洞與審計09能夠進行SQL盲注漏洞的分析與代碼審計了解國內漏洞平臺(CNVD/CNNVD)、國外漏洞平臺(OWASP/CVE)中關于SQL盲注漏洞的新資訊。任務目標一任務實施二1.Low等級通過分析上述Low等級代碼可以發(fā)現,變量$id接收$_GET['id']的值,變量$getid被設置為"SELECTfirst_name,last_nameFROMusersWHEREuser_id='$id';",變量$result執(zhí)行SQL語句,從而判斷出該SQL注入是字符類型的注入。if語句用于判斷SQL語句執(zhí)行后的返回值,如果條件成立,則顯示“UserIDexistsinthedatabase.”,否則顯示“UserIDisMISSINGfromthedatabase.”。任務實施二在DVWA中執(zhí)行SQL語句,并進行如下操作。(1)通過1和1'的顯示判斷是否存在漏洞。(2)通過1'and1=1---和1'and1=0---,確認SQL注入點“and1=0”。(3)通過猜測,得到數據庫名:①1'andlength(database())=[1-100]---(獲取數據庫名長度為4)。②1'andascii(SELECTSUBSTR(database(),1,1)=[97-255]---(通過判斷是否相等來獲取字符的ASCII值,并查詢所有ASCII值,得到數據庫名)。上述Low等級代碼沒有進行過濾,因此直接使用sqlmap運行代碼即可。1.Low等級任務8SQL盲注漏洞與審計09任務實施二Medium等級代碼和Low等級代碼的區(qū)別在于,前者是通過POST方式傳遞參數的,后者是通過GET方式傳遞參數的。但相同的是,Medium等級代碼也沒有進行過濾,也可以直接進行抓包,并使用sqlmap運行代碼。2.Medium等級任務8SQL盲注漏洞與審計09任務實施二High等級代碼改為接收Cookie傳遞過來的值,之后拼接SQL語句,因此前文中的SQL注入變?yōu)榱薈ookie注入。cookie-input.php文件的代碼如下:3.High等級任務8SQL盲注漏洞與審計09任務實施二通過分析上述代碼可以發(fā)現,該程序接收通過POST方式傳遞過來的參數值并將其存儲到Cookie中。使用BurpSuite抓包進行分析,第一次請求的是cookie-input.php文件。第二次請求為攜帶數據“id=1&Submit=Submit”請求cookie-input.php文件。第三次請求的是sqli_blind/,此時,Cookie的值是id=1。3.High等級任務8SQL盲注漏洞與審計09任務實施二4.Impossible等級任務8SQL盲注漏洞與審計0910任務9脆弱會話漏洞與審計任務9脆弱會話漏洞與審計10能夠進行脆弱會話漏洞的分析與代碼審計了解國內漏洞平臺(CNVD/CNNVD)、國外漏洞平臺(OWASP/CVE)中關于脆弱會話漏洞的新資訊。任務目標一任務實施二1.Low等級通過分析上述Low等級代碼可以發(fā)現,Session的值last_session_id的初始設置為0,之后每執(zhí)行一次“$_SESSION['last_session_id']++;”,其值加1,即1,2,3,…,n,最后使用setcookie()函數將其最終值作為瀏覽器端的Cookie值。任務實施二可以嘗試不使用密碼登錄,進入DVWA的脆弱會話漏洞,單擊“Generate”按鈕,如圖3-37所示。這時可以簡單地猜測出,下一個參數dvwaSession的值是這個參數值加1,所以使用Google瀏覽器在Cookie中添加dvwaSession=2,之后發(fā)現雖然Google瀏覽器沒有登錄過DVWA,但是通過這個Session,繞過了輸入賬號、密碼的過程,直接登錄了賬戶,如圖3-38所示。1.Low等級任務9脆弱會話漏洞與審計10任務實施二可以嘗試不使用密碼登錄,進入DVWA的脆弱會話漏洞,單擊“Generate”按鈕,如圖3-37所示。這時可以簡單地猜測出,下一個參數dvwaSession的值是這個參數值加1,所以使用Google瀏覽器在Cookie中添加dvwaSession=2,之后發(fā)現雖然Google瀏覽器沒有登錄過DVWA,但是通過這個Session,繞過了輸入賬號、密碼的過程,直接登錄了賬戶,如圖3-38所示。通過分析上述Medium等級代碼可以發(fā)現,該代碼使用了time()函數來設置$cookie_value的值,之后使用setcookie()函數將該值作為瀏覽器端的Cookie值。使用BurpSuite進行抓包,如圖3-39所示。2.Medium等級任務9脆弱會話漏洞與審計10任務實施二上述High等級代碼使用了!isset()函數對Session變量$_SESSION['last_session_id_high']進行檢查,如果沒有對該變量進行賦值,則將該變量的初始值設置為0,同時每執(zhí)行一次相應代碼,該變量的值都遞增1,之后將該變量進行MD5加密后賦值給$cookie_value,最后使用setcookie()函數將$cookie_value的值作為瀏覽器端的Cookie值。將DVWA中Session變量的值進行MD5解密后,就可以輕松發(fā)現其中的規(guī)律了,其他操作與Low等級代碼中的操作相同,這里就不再進行演示了。3.High等級任務9脆弱會話漏洞與審計10任務實施二通過分析上述Impossible等級代碼可以發(fā)現,該代碼先使用mt_rand()函數選取隨機數,然后加上時間戳和字符串,通過sha1()函數進行SHA加密后賦值給$cookie_value,最后使用setcookie()函數將$cookie_value的值作為瀏覽器端的Cookie值。該Impossible等級代碼已經成功攔截了99%的脆弱會話攻擊。4.Impossible等級任務9脆弱會話漏洞與審計1011任務10反射型XSS漏洞與審計任務10反射型XSS漏洞與審計11能夠進行反射型XSS漏洞的分析與代碼審計了解國內漏洞平臺(CNVD/CNNVD)、國外漏洞平臺(OWASP/CVE)中關于反射型XSS漏洞的新資訊。任務目標一任務實施二1.Low等級通過分析上述Low等級代碼可以發(fā)現,用戶參數被直接顯示在頁面上,因此存在反射型XSS漏洞。在輸入“<script>alert(1);</script>”后,因為上述Low等級代碼沒有進行任何過濾,所以會直接彈出窗口。任務實施二通過分析上述Medium等級代碼可以發(fā)現,該代碼過濾了<script>標簽,將<script>標簽置換為空,但是攻擊者可以通過<img>標簽或者<ScrIpt>這種以大小寫形式區(qū)分標簽的方式來繞過該過濾。使用<img>標簽的示例代碼如下:Payload:<imgsrc='1'onerror='alert(1)'/>成功彈出窗口,如圖3-43所示。2.Medium等級任務10反射型XSS漏洞與審計11任務實施二通過分析上述High等級代碼可以發(fā)現,該代碼通過正則表達式進行了過濾,無論<script>標簽中間添加了什么都能被過濾掉。使用<img>標簽同樣可以繞過防護,用法為<imgsrc='1'onerror='alert(1)'/>,結果如圖3-44所示。3.High等級任務10反射型XSS漏洞與審計11任務實施二通過分析上述Impossible等級代碼可以發(fā)現,該代碼使用htmlspecialchars()函數將特殊字符轉換為實體字符,默認不轉義單引號('),只轉義雙引號("),如果要轉義單引號,則需要使用額外的參數來指明。4.Impossible等級任務10反射型XSS漏洞與審計1112任務11存儲型XSS漏洞與審計任務11存儲型XSS漏洞與審計12能夠進行存儲型XSS漏洞的分析與代碼審計了解國內漏洞平臺(CNVD/CNNVD)、國外漏洞平臺(OWASP/CVE)中關于存儲型XSS漏洞的新資訊。任務目標一任務實施二1.Low等級通過分析上述Low等級代碼可以發(fā)現,該代碼使用trim()函數移除字符串兩端的空白字符或其他預定義字符。但如果將字符串兩端的空白字符或其他預定義字符移除,之后將其直接放到SQL語句中執(zhí)行,則明顯會有XSS漏洞。<input>標簽中有限制字符長度的參數設置,直接將maxlength=“10”刪除,之后輸入如下代碼就可以彈出窗口了。Payload:<script>alert(1)</script>任務實施二當再次輸入“1”和“<script>alert('hack')</script>”時,strip_tags()函數會將<script>標簽給剝除,addslashes()函數會將'轉義成\

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論