201609-12 前端安全之路-代碼保護 0x00前言在信息安全領域,可信系統(Trustedsystem)是一個讓人心動的目標,它指的是一個通過實施特定的安全策略而達到一定可信程度的系統。在計算機中,可信平臺模塊(TrustedPlatformModule,TPM)已經投入使用,它符合可信賴計算組織(TrustedComputingGroup,TCG)制定的TPM規范,是為了實現可信系統目標的而打造的一款安全芯片。作為可信系統的信任根,TPM是可信計算的核心模塊,為計算機安全提供了強有力的保障... 繼續閱讀 >
201608-06 網站滲透思路全方面總結 針對新手寫一點滲透的小思路、小技巧,主要講的是思路,所有不會太詳細。經常逛一些好的博客或者門戶站,堅持下來,每天學一點思路,你會積累到很多東西,記住:技術需要時間沉淀。(一)針對網站程序,不考慮服務器。一、查找注入,注意數據庫用戶權限和站庫是否同服。二、查找XSS,最近盲打很流行,不管怎樣我們的目的是進入后臺。三、查找上傳,一些能上傳的頁面,比如申請友鏈、會員頭像、和一些敏感頁面等等,注意查看... 繼續閱讀 >
201603-16 PHP安全-加密 加密 作為一本相關安全方面的書,通常加密是需要提及的話題。我之所以在本書的主體部分忽略了加密問題,是因為它的用途是狹窄的,而開發者應從大處著眼來考慮安全問題。過分依賴于加密常常會混淆問題的根源。盡管加密本身是有效的,但是進行加密并不會神奇地提高一個應用的安全性。 一個PHP開發人員應主要熟悉以下的加密方式: l 對稱加密l ... 繼續閱讀 >
201603-16 PHP安全-函數 函數 在我寫作本書的時候,http://php.net/quickref.php列出了共3917個函數,其中包括一些類似函數的語法結構,在此我不準備把它們從函數中區分開來,而是把它作為函數看待。 由于函數數量很大,一一說明它們的正確及安全用法是不太可能的。在此我選出了我認為最需要注意的函數。選擇的標準包括使用的頻繁度、使用時的危險(安全)度及我本人的經驗。 對于每一個列出的函數,我都會提供推薦的使用方法。... 繼續閱讀 >
201603-16 PHP安全-配置選項 配置選項 盡管本書的焦點是在于應用的安全性,但有一些配置選項是任何關心安全的開發者必需熟悉的。PHP的配置會影響你所寫代碼的行為以及你使用的技巧,必要時你需要稍稍負責一下應用程序以外的東西。 PHP的配置主要由一個名為php.ini的文件所指定。該文件包含很多配置選項,每一項都會對PHP產生非常特定的影響。如果該文件不存在,或者該文件中的某選項不存在,則會使用默認值。 如果你不知道php.ini... 繼續閱讀 >
201603-15 PHP安全-文件系統瀏覽 文件系統瀏覽 除了能在共享服務器上讀取任意文件之外,攻擊者還能建立一個可以瀏覽文件系統的腳本。由于你的大多數敏感文件不會保存在網站主目錄下,此類腳本一般用于找到你的源文件的所在位置。請看下例: <pre> <?php if(isset($_GET['dir'])) { ls($_GET['dir']); } elseif(isset($_GET['file'])) { cat($... 繼續閱讀 >
201603-15 PHP安全-會話注入 會話注入 一個與會話暴露類似的問題是會話注入。此類攻擊是基于你的WEB服務器除了對會話存儲目錄有讀取權限外,還有寫入權限。因此,存在著編寫一段允許其他用戶添加,編輯或刪除會話的腳本的可能。下例顯示了一個允許用戶方便地編輯已存在的會話數據的HTML表單: <?php session_start(); ?> <formaction="inject.php"method="POST"> <?php&nbs... 繼續閱讀 >
201603-15 PHP安全-會話數據暴露(二) 會話數據暴露 當你關注于防止源碼的暴露時,你的會話數據只同樣存在著風險。在默認情況下,SESSION保存在/tmp目錄下。這樣做在很多情形下是很方便的,其中之一是所有用戶都有對/tmp的寫入權限,這樣Apache同樣也有權限進行寫入。雖然其他用戶不能直接從shell環境讀取這些會話文件,但他們可以寫一個簡單的腳本來進行讀取: <?php header('Content-Type:text/plain'); session_s... 繼續閱讀 >
201603-15 PHP安全-源碼暴露(二) 源碼暴露 你的WEB服務器必須要能夠讀取你的源確并執行它,這就意味著任意人所寫的代碼被服務器運行時,它同樣可以讀取你的源碼。在一個共享主機上,最大的風險是由于WEB服務器是共享的,因此其它開發者所寫的PHP代碼可以讀取任意文件。 <?php header('Content-Type:text/plain'); readfile($_GET['file']); ?> 通過在你的源碼所在的主機上運行上面... 繼續閱讀 >
201603-15 PHP安全-永久登錄 永久登錄 永久登錄指的是在瀏覽器會話間進行持續驗證的機制。換句話說,今天已登錄的用戶明天依然是處于登錄狀態,即使在多次訪問之間的用戶會話過期的情況下也是這樣。 永久登錄的存在降低了你的驗證機制的安全性,但它增加了可用性。不是在用戶每次訪問時麻煩用戶進行身份驗證,而是提供了記住登錄的選擇。 圖7-2.攻擊者通過重播用戶的cookie進行未授權訪問 據我觀察,最常見的有缺陷的永... 繼續閱讀 >
201603-15 PHP安全-重播攻擊 重播攻擊 重播攻擊,有時稱為演示攻擊,即攻擊者重現以前合法用戶向服務器所發送的數據以獲取訪問權或其它分配給該用戶的權限。 與密碼嗅探一樣,防止重播攻擊也需要你意識到數據的暴露。為防止重播攻擊,你需要加大攻擊者獲取任何用于取得受限資源的訪問權限的數據的難度。這主要要求做到避免以下做法: 設定受保護資源永久訪問權的數據的使用;設定受保護資源訪問權的數據的暴露(甚至是只提供臨時... 繼續閱讀 >
201603-15 PHP安全-密碼嗅探 密碼嗅探 盡管攻擊者通過嗅探(察看)你的用戶和應用間的網絡通信并不專門用于訪問控制,但要意識到數據暴露變得越來越重要,特別是對于驗證信息。 使用SSL可以有效地防止HTTP請求和回應不被暴露。對任何使用https方案的資源的請求可以防止密碼嗅探。最好的方法是一直使用SSL來發送驗證信息,同時你可能還想用SSL來傳送所有的包含會話標識的請求以防止會話劫持。 為防止用戶驗證信息不致暴露,在表單的actio... 繼續閱讀 >
201603-15 PHP安全-暴力攻擊 暴力攻擊 暴力攻擊是一種不使用任何特殊手段而去窮盡各種可能性的攻擊方式。它的更正式的叫法是窮舉攻擊——窮舉各種可能性的攻擊。 對于訪問控制,典型的暴力攻擊表現為攻擊者通過大量的嘗試去試圖登錄系統。在多數情況下,用戶名是已知的,而只需要猜測密碼。 盡管暴力攻擊沒有技巧性可言,但詞典攻擊似乎有一定的技巧性。最大的區別是在進行猜測時的智能化。詞典攻擊只會最可能的情況列表中進行窮舉,而... 繼續閱讀 >
201603-15 PHP安全-命令注入 命令注入 使用系統命令是一項危險的操作,尤其在你試圖使用遠程數據來構造要執行的命令時更是如此。如果使用了被污染數據,命令注入漏洞就產生了。 Exec()是用于執行shell命令的函數。它返回執行并返回命令輸出的最后一行,但你可以指定一個數組作為第二個參數,這樣輸出的每一行都會作為一個元素存入數組。使用方式如下: <?php $last=exec('ls',$output,$return); ... 繼續閱讀 >
201603-14 PHP安全-遠程文件風險 遠程文件風險 PHP有一個配置選項叫allow_url_fopen,該選項默認是有效的。它允許你指向許多類型的資源,并像本地文件一樣處理。例如,通過讀取URL你可以取得某一個頁面的內容(HTML): <?php $contents=file_get_contents('http://example.org/'); ?> 正如第五章所討論的那樣,當被污染數據用于include和require的文件指向時,會產生嚴重漏洞。實際上,我認為這種漏... 繼續閱讀 >
201603-14 PHP安全-文件系統跨越 文件系統跨越 無論你用什么方法使用文件,你都要在某個地方指定文件名。在很多情況下,文件名會作為fopen()函數的一個參數,同時其它函數會調用它返回的句柄: <?php $handle=fopen('/path/to/myfile.txt','r'); ?> 當你把被污染數據作為文件名的一部分時,漏洞就產生了: <?php $handle=fopen("/path/to/{$_GET['filename']}.t... 繼續閱讀 >