某物秋招SDL安全工程師面試

死不悔改奇男子發表於2024-06-21

一、自我介紹

套路,我就不詳細說了。

二、sql注入的原理、分類、防禦(我發現這個非常常問)

就看我上篇文章“某手秋招安全工程師面試”吧,我就不重複寫了。
面試官:現在給你一個java程式碼,你知道怎麼去審計sql注入嗎?
我:我直接說了我對java這塊的程式碼瞭解比較少,對於php程式碼這塊的比較熟,但是也還是按照php如何審計的思路說了一下。

三、XSS漏洞的原理,分類,防禦,危害(這個也非常常問)

看我上篇文章“某手秋招安全工程師面試”吧,我也就不重複寫了。

四、檔案上傳漏洞的原理、防禦

檔案上傳漏洞是指由於程式設計師在對使用者檔案上傳部分的控制不足或者處理缺陷,而導致的使用者可以越過其本身許可權向伺服器上傳可執行的動態指令碼檔案。
原理:

1. 檔案上傳漏洞是指使用者上傳了一個可執行的指令碼檔案,而web系統沒有進行檢測或邏輯做的不夠安全。
2. 檔案上傳功能本身沒有問題,問題在於上傳後如何處理及解釋檔案。
3. 一般情況下,web應用都會允許使用者上傳一些檔案,如頭像、附件等資訊,如果web應用沒有對使用者上傳的檔案進行有效的檢查過濾,那麼惡意使用者就會上傳一句話木馬等webshell,從而達到控制web網站的目的。
4. 存在檔案上傳功能的地方都有可能存在檔案上傳漏洞,比如相簿、頭像上傳、影片、照片分享。論壇發帖和郵箱等可以上傳附件的地方也是上傳漏洞的高危地帶,另外像檔案管理器這樣的功能也有可能被攻擊者所利用。

防禦:

1. 檔案上傳的目錄設定為不可執行。只要web容器無法解析該目錄下面的檔案,即使攻擊者上傳了指令碼檔案,伺服器本身也不會受到影響。
2. 判斷檔案型別。在判斷檔案型別時,可以結合使用MIME Type、字尾檢查等方式。在檔案型別檢查中,強烈推薦白名單方式,黑名單的方式已經無數次被證明是不可靠的。此外,對於圖片的處理,可以使用壓縮函式或者resize函式,在處理圖片的同時破壞圖片中可能包含的HTML程式碼。
3. 使用隨機數改寫檔名和檔案路徑。檔案上傳如果要執行程式碼,則需要使用者能夠訪問到這個檔案。在某些環境中,使用者能上傳,但不能訪問。如果應用了隨機數改寫了檔名和路徑,將極大地增加攻擊的成本。再來就是像shell.php.rar.rar和crossdomain.xml這種檔案,都將因為重新命名而無法攻擊。
4. 使用安全裝置防禦。檔案上傳攻擊的本質就是將惡意檔案或者指令碼上傳到伺服器,專業的安全裝置防禦此類漏洞主要是透過對漏洞的上傳利用行為和惡意檔案的上傳過程進行檢測。惡意檔案千變萬化,隱藏手法也不斷推陳出新,對普通的系統管理員來說可以透過部署安全裝置來幫助防禦,例如:圖床。

面試官:現在很多公司並不是像上傳一個文字就直接能getshell的,是因為它的檔案和應用是分離的,檔案走的是一個物件,而不是檔案形式,你可以理解成一個資料流的形式,那這種的話你有了解過一些安全的風險嗎?
我:這塊的話沒接觸過。
面試官:ok,那你剛剛還提到了上傳白名單,你覺得doc檔案是沒有風險的,還是說可能有風險?
我:可能存在風險,據我所知,存在一個宏病毒,如果doc檔案帶有宏病毒,也是存在一定風險。

五、https協議是如何保證傳輸安全的

https協議是在http的協議基礎上新增了一個SSL安全協議。https採用了對稱加密+非對稱加密的方式。
第一步:客戶端需要向伺服器傳送一個連線請求,以請求建立一個HTTPS連線;
第二步:在客戶端發出HTTPS連線請求之後,伺服器會返回一個數字證書。數字證書中包含了伺服器的公鑰以及其他相關資訊。客戶端需要透過數字證書來驗證伺服器的身份和合法性。
第三步:在數字證書驗證的過程中,客戶端需要驗證以下資訊:
(1)數字證書是否為合法的數字證書,即數字證書是否由CA機構頒發。
(2)數字證書的有效期是否過期。
(3)數字證書中的資訊是否和實際情況相符。
(4)數字證書中的公鑰是否可以用來進行加密通訊。
如果數字證書透過了驗證,客戶端就可以確認當前連線是一個安全的HTTPS連線。
第四步:當數字證書驗證透過之後,客戶端就可以和伺服器建立安全的TLS連線。在TLS連線建立的過程中,客戶端和伺服器需要進行協商,以確定加密演算法和金鑰等引數。一旦協商完成,客戶端和伺服器就可以透過TLS連線進行加密通訊。
第五步:在TLS連線建立之後,客戶端和伺服器可以透過TLS連線進行加密通訊。TLS連線使用對稱金鑰加密演算法來加密通訊資料,同時使用非對稱金鑰加密演算法來進行金鑰交換。這樣,客戶端和伺服器就可以透過TLS連線進行安全的加密通訊,確保通訊資料不被竊取或篡改。

六、我看你實習經歷是關於檔案洩露方面的,那你有了解過文字水印嗎

當時回答了一個影像水印,稍微說了一下我的實習經歷。但是我感覺面試官想要的不是這個。

七、對容器這塊的安全有了解嗎

知道一些常見容器的漏洞,比如apache、nginx。
面試官:那中間價的漏洞呢,像比如log4j或者java框架之類的
我:strusts和shiro漏洞。
面試官:那fastjson反序列化這塊的原理有去了解過嗎?
我:沒去了解過。(可以參考https://blog.csdn.net/qq_53287512/article/details/127865920)

八、你平時程式碼寫的多嗎,主要是擅長哪塊

java和python
面試官:那你現在能用java實現一個ssrf的防禦類,對常見的url進行一個檢測,攔截一些惡意的ssrf語句嗎?
我所寫程式碼如下:(不是很完善)

public static boolean isOk(String url){
        String[] split = url.split("://");
        String protocal=split[0];
        String[] white_list={"http","https"};       //協議白名單
        if(!Arrays.asList(white_list).contains(protocal)){
            return false;
        }
        String[] split1 = split[1].split("/");  //得到域名和目錄
        String IP=split1[0];        //域名
        String[] split2 = IP.split(".");        //根據點號分割
        if(split2[0].equals("10")){     //判斷是不是內網地址
            return false;
        }else if(split2[0].equals("172")&&Integer.parseInt(split2[1])>=16&&Integer.parseInt(split2[1])<=31){
            return false;
        }else if(split2[0].equals("192")&&split2[1].equals("168")){
            return false;
        }
        String[] black_list={"etc","passwd","shadow"};      //目錄黑名單
        for (int i = 1; i < split1.length; i++) {       //如果訪問了目錄黑名單
            if(Arrays.asList(black_list).contains(split1[i])){
                return false;
            }
        }
        return true;
    }

以上就是面試的所有內容。

相關文章