產品常見安全漏洞挖掘和分析以及解決方案

2021-10-06 11:28:54 字數 2975 閱讀 4779

原理

當函式內的乙個陣列緩衝區接受使用者輸入的時候,未對輸入的長度進行合法性檢查時,可以構造資料覆蓋超過緩衝區的高位址上原本的其他棧幀資料,如果本身的資料內就儲存了一系列的指令的二進位制**,一旦棧溢位修改了函式的返回位址,並將該位址指向這段二進位制**的起始位置,那麼就形成成了基本的溢位攻擊行為。

防護措施

1)只使用安全的記憶體操作函式。

2)在進行記憶體操作之前,對要操作的長度和被操作空間的長度進行比較,如果大於禁止繼續進行操作。

–這裡要注意整數溢位,長度對比時要注意,使用安全函式也要注意(安全函式有傳入的長度限制,溢位後這個限制就無用了 ,例如strncpy第三引數是無符號,溢位後就變得很大)

挖掘方法

1)檢查是否有使用strcpy、strcat、sprintf、vsprintf等危險函式,其資料是否有越界可能。(這個先記錄後分析)

2)檢查使用gets、fgets、getchar、fgetc、getc、read、scanf、sscanf、fscanf、getenv等函式時,其資料是否有越界可能。

3)檢查使用strncpy、strncat、snprintf等函式時,n為是否為緩衝區可接收的最大長度減1 。(snprintf在linux上內部有減1)

4)檢查使用memcpy、 memmove等函式時,n為要拷貝的長度,並且在拷貝之前要對n進行檢查,是否小於等於緩衝區最大容量。

原理與快取沖區溢位類似

挖掘方法:通過工具靜態掃瞄(codescan),分析掃瞄結果 (這個通過工具掃瞄,人工挖掘無較好方式–無關鍵字,得逐行檢視)

原理:使用使用者輸入的字串作為格式字串,通過構造格式化字串(如%x,%s,%n), 攻擊者將有機會對任意記憶體位址進行讀寫操作。

防護措施:禁止使用使用者輸入的字串作為格式字串

挖掘方法:搜尋所有scanf, printf, sprintf, snprintf, vsprintf, vsnprintf, syslog,等檢查是否有使用使用者輸入的字串作為格式化字串。

原理:有符號整數會在最高位用0表示正數,用1表示負數,無符號整數則沒有這種限制,其之間的操作會存在上溢和下溢,從而導致安全漏洞。

挖掘方法:檢視外部輸入引數長度做校驗的地方,是否存在整數溢位而繞過檢查,導致超過快取取大小的資料寫入、程式崩潰或邏輯漏洞等。

檢查點:

1)無符號整數的下溢和上溢(賦值)。

2)有符號整數之間的比較。

3)有符號整數的運算。

4)無符號整數和有符號整數的對比。

通過工具掃瞄,人工挖掘無較好方式–無關鍵字,得逐行檢視,關鍵**通過**走讀(模組待定)。

原理:呼叫系統命令前未對外部使用者輸入資料進行合法性檢查,導致直接執行非法使用者構造的命令

挖掘方法:檢視system、popen、exec系列函式,以及封裝的函式,確認命令裡面使用的引數是否有做限制(保證無特殊字元)或做轉義(escapeshellarg或類似方法)

原理:構造特殊的sql語句(引數)對資料庫進行非法操作

挖掘方法:以使用sqlite資料庫為例,檢視是否有使用sqlite,搜尋sqlite3,關鍵字包括sqlite3_exec,sqlite3_get_table等,檢視sql語句是否通過sqlite3_snprintf/sqlite3_mprintf構造,不是則需要替換,若通過sqlite3_snprintf/sqlite3_mprintf構造的,則需要注意字串引數是否都是使用的%q且是用單引號擴起來(%q會對單引號做處理,使用%s就存在注入可能)

原理:服務端未檢測檔案型別,可能導致上傳非法的檔案到裝置後台

挖掘方法:檢查產品中上傳檔案的相關api函式,是否有對檔案型別判斷(字尾和內容限制),並確保檔名無特殊字元或00截斷(後面這個可能導致命令注入)

原理:直接使用外部傳入引數做路徑,未對引數進行檢測(如包含…/、範圍非法等),導致其訪問限制外的目錄或檔案

挖掘方法:檢查產品中上傳檔案的api函式是否有對檔案路徑做檢查

原理:以cgi為例,cgi輸出是通過替換html模板內容輸出的,替換內容為客戶端上傳(沒有限制xss特殊字元),且替換時也沒有做處理就存在xss注入漏洞

挖掘方法:替換時html模板內容時檢測內容是否為外部傳入,是否做過特殊字元限制,是否對字元進行轉義處理。

防護措施:通過檢查http請求中的referer頭部資訊;服務端下發唯一並且具備時效性的token後,檢查客戶端請求中提交的token

原理:服務程式接收客戶端上傳的url,未做過濾和限制直接訪問url

挖掘方法:檢視是否有使用curl、wget等的進行url訪問,檢查url是否是外部輸入,是否做了過濾和限制。

原理:在儲存某個欄位的配置時利用\r\n(linux伺服器上\n就可以了)進行換行,輸入其他欄位的資料,以達到 越權修改 其他字段資料,或繞後其他字段 資料格式 校驗的目的

挖掘方法:搜尋儲存配置的方法,檢查是否為外部輸入,是否做了格式校驗或限制\r\n(或者\n)的輸入

原理:即xml外部實體注入,當允許引用外部實體時,而xml資料又是來自外部輸入,通過構造惡意內容,就可能導致任意檔案讀取、系統命令執行、內網埠探測、攻擊內網**等

挖掘方法:搜尋載入xml的**,檢視xml內容**是否為外部輸入,是否可以構造外部實體(dtd)進行載入

Jsonp常見安全漏洞分析

jsonp json with padding 是資料格式 json 的一種 使用模式 可以讓網頁從別的網域要資料。這個解釋來自於網際網路上面的答案。jsonp只是 一種使用json模式,之所以能夠很廣泛使用。主要用它來解決跨域訪問問題。可以方便跨網域名稱傳輸資料。一些是乙個jsonp的例子。但是,...

常見應用安全漏洞

1.注入 注入攻擊漏洞,例如sql os ldap注入。這些攻擊發生在當不可信的資料作為命令或查詢語句的一部分,被傳送給直譯器的時候,攻擊者傳送的惡意資料可以欺騙直譯器,以執行計畫外的命令或未授權的查詢。2.失效的身份認證和會話管理 與身份認證和會話管理相關的應用程式功能往往得不到正確的實現,這就導...

常見Web安全漏洞

不同許可權賬戶之間的存在越權訪問 檢測防範 1伺服器端必須對每個頁面鏈結進行許可權判斷。2使用者登陸後,伺服器端不應再以客戶端提交的使用者身份資訊為依據,而應以會話中服務端儲存的已登陸的使用者身份資訊為準。3頁面提交的資源標誌與已登陸的使用者身份進行匹配比對,然後判斷其對當前鏈結是否有許可權。4必須...