首先看pom.xml檢視第三方元件和第三方元件的版本
常用的第三方元件:
第三方元件 | 漏洞型別 | 元件漏洞版本 |
---|---|---|
log4j2 | 遠端程式碼執行 | Apache log4j2 >= 2.0, <= 2.14.1 |
Fastjson | 反序列化遠端程式碼執行 | Fastjson <= 1.2.80 |
iBatis(MyBatis) | SQL隱碼攻擊 | |
Struts2 | 命令執行 | |
Shiro | 反序列化 | |
中介軟體 | Tomcat,WebLogic,WebShere Jboss,Jetty,Glassfish |
|
..... | ... |
對於sql注入來講,只要是與資料庫存在互動的地方,應用程式對使用者的輸入沒有進行有效的過濾,都有可能存在SQL隱碼攻擊漏洞。
DAO: 存在拼接的SQL語句
String sql="select * from user where id="+id
Hibernate框架
session.createQuery("from Book where title like '%" + userInput + "%' and pu
blished = true")
Mybatis框架
Select * from news where title like ‘%${title}%’
Select * from news where id in (${id}),
Select * from news where title =‘java’ order by ${time} asc
網站與後端互動的輸入輸出沒有做好過濾,導致攻擊者可以插入惡意js語句進行攻擊。根據後端程式碼不同 ,大致可以分為反射型、儲存型、DOM型。
全域性搜尋使用者的輸入與輸出,查詢是否存在過濾。
XXE就是XML外部實體注入。當允許參照外部實體時,通過構造惡意內容,就可能導致任意檔案讀取、系統命令執行、內網埠探測、攻擊內網網站等危害。
XML解析一般在匯入設定、資料傳輸介面等場景會用到,xml解析器是否禁用外部實體。
全域性搜尋如下函數:
javax.xml.parsers.DocumentBuilder
javax.xml.stream.XMLStreamReader
org.jdom.input.SAXBuilder
org.jdom2.input.SAXBuilder
javax.xml.parsers.SAXParser
org.dom4j.io.SAXReader
org.xml.sax.XMLReader
javax.xml.transform.sax.SAXSource
javax.xml.transform.TransformerFactory
javax.xml.transform.sax.SAXTransformerFactory
javax.xml.validation.SchemaFactory
javax.xml.bind.Unmarshaller
javax.xml.xpath.XPathEx
程式碼中提供了從其他伺服器應用獲取資料的功能但沒有對目標地址做過濾與限制。
只要是能夠對外發起網路請求的地方,就有可能會出現SSRF漏洞。重點查詢以下函數。
HttpClient.execute
HttpClient.executeMethod
HttpURLConnection.connect
HttpURLConnection.getInputStream
URL.openStream
new URL()
:構造一個url物件openConnection()
:建立一個範例URLConncetion.getInputStream()
:獲取URL的位元組流 跨站請求偽造是一種使已登入使用者在不知情的情況下執行某種動作的攻擊。因為攻擊者看不到偽造請求的響應結果,所以CSRF攻擊主要用來執行動作
,而非竊取使用者資料。當受害者是一個普通使用者時,CSRF可以實現在其不知情的情況下轉移使用者資金、傳送郵件
等操作;但是如果受害者是一個具有管理員許可權的使用者
時CSRF則可能威脅到整個Web系統的安全。
一些增刪改查方法,是否進行Referer頭檢驗
、token檢驗
無法構造的亂數引數
、驗證碼密碼
。
搜尋session["token"]
一個使用者,如果他被允許輸入結構化的XML片段,則他可以在 XML 的資料域中注入 XML 標籤
來改寫目標 XML 檔案的結構與內容。
全域性搜尋如下字串
在專案中搜尋. Xsd 檔案
常見的一些java檔案操作類的漏洞:任意檔案的讀取、下載、刪除、修改,這類漏洞的成因基本相同,都是因為程式沒有對檔案和目錄的許可權進行嚴格控制,或者說程式沒有驗證請求的資原始檔是否合法導致的。
全域性搜尋鍵碼或者方法
伺服器端沒有針對執行命令的函數進行過濾,導致攻擊者可以提交惡意構造語句。java中常見如:Runtime.exec() Process ProcessBuilder.start
Java中的命令執行離不開呼叫反射的機制,在實際的場景往往離不開反序列化的利用。
伺服器端直接存在可執行函數(exec()等),且對傳入的引數過濾不嚴格導致 RCE 漏洞
伺服器端不直接存在可執行函數(exec()等),且對傳入的引數過濾不嚴格導致 RCE 漏洞
由表示式注入導致的RCE漏洞,常見的如:OGNL、SpEL、MVEL、EL、Fel、JST+EL等
由java後端模板引擎注入導致的 RCE 漏洞,常見的如:Freemarker、Velocity、Thymeleaf等
由java一些指令碼語言引起的 RCE 漏洞,常見的如:Groovy、JavascriptEngine等
由第三方開源元件引起的 RCE 漏洞,常見的如:Fastjson、Shiro、Xstream、Struts2、weblogic等
審計的時候可以重點尋找:
當輸入的反序列化的資料可被使用者控制,那麼攻擊者即可通過構造惡意輸入,讓反序列化產生非預期的物件,在此過程中執行構造的任意程式碼。
反序列化操作常常出現在匯入模版檔案、網路通訊、資料傳輸、紀錄檔格式化儲存或者資料庫儲存等業務功能處,在程式碼審計時可重點關注一些反序列化操作函數並判斷輸入是否可控。
**中介軟體**是提供系統軟體和應用軟體之間連線的軟體,它將應用程式執行環境與作業系統隔離,從而實現應用程式開發者不必為更多系統問題憂慮,而直接關注該應用程式在解決問題上的能力 。容器就是中介軟體的一種。
常見的JAVA Web中介軟體有:
Tomcat WebLogic WebShere Jboss Jetty Glasshfish
直接開啟pom.xml檔案檢視其 使用的中介軟體及其版本,然後到漏洞庫裡找漏洞即可。
常見的業務邏輯漏洞主要是越權,分為平行越權和垂直越權。在javaweb的各個功能點中都可能存在越權漏洞。
主要原因還是因為程式沒有對當前使用者的許可權進行嚴格控制,或者是後臺沒有判斷當前使用者id。
在每個request.getParameter("userid");
之後檢視是否有檢驗當前使用者與要進行增刪改查的使用者。
介面從host頭或者引數中取值,直接跳轉到使用者自定義的url,導致url重定向。
查詢sendRedirect
,跳轉的url是否使用者可控,如果可控是否有進行過濾判斷。
特別是在刪掉某個資源的斜槓,有可能就進行了302跳轉,該處時常出現url重定向漏洞。
java中存在的安全問題還有很多,比如ldap注入、jndi注入、rmi反序列化等