java_sec_code
xss
補充和回憶一下一些開發基礎
@RestController
@RequestMapping(value = "https://www.cnblogs.com/xss")
public class Xsstest {
@ResponseBody
@GetMapping("/test")
public String getxss( HttpServletRequest request, HttpServletResponse response,@RequestParam String xss){
xss = request.getParameter("xss");
request.setAttribute("xss",xss);
System.out.println(xss);
System.out.println(xss);
request.getRequestDispatcher("src/main/java/web/1.jsp");
return xss;
}
}
這里用的是springboot去開發的用的是mvc沒用用servlet那一套基礎類,這樣開發很方便記錄一些點吧
- @RequestMapping(value = "https://www.cnblogs.com/xss") 訪問的地址可以在主類上加然后在后面的方法上面加形成多級目錄
- @RequestParam String xss 注解引數代表的是在url中獲取引數 xss
- @GetMapping("/test")是代表的是只允許get請求去訪問還有@PostMapping
- request.setAttribute("xss",xss);把xss里面的值用xss這個變數名來存盤
我這里原本是準備用request域中去存盤這個值然后做一個跳轉達到這個效果的但是不知道為啥沒有配置好久采用了另一種的方式就是在本頁面不過濾引數直接回傳這就是一種簡單的反射型xss,
還有一種效果就是放到共享域中后又另外的頁面取出內容沒有進行過濾也會造成xss漏洞,
補充一下域相關的知識
1.域物件:一個有作用范圍的物件,可以在范圍內共享資料,
2.request域:代表一次請求的范圍,一般用于請求轉發的多個資源中共享資料
還有一些審計是在前端的就不做審計了自己又在復習這些web漏洞多摸摸靶場
less-1
這里的xss其實并不完善,過于基礎了,第一種是在url插入的一種反射性xss,這種xss存在的危害其實并不大,而且存在的也比較少
用簡單易懂的語言來說一下
為什么會存在反射型xss呢
很簡單的一個道理,一切可控的輸入都是有害的,
@RequestMapping("/reflect")
@ResponseBody
public static String reflect(String xss) {
return xss;
}
看著代碼簡單我們需要簡單去理解一下xss隱含在其中的原理
為什么會有這樣的情況,這樣的情況來自于我們輸入的引數,再沒有任何過濾的情況下就回傳給了客戶端這種情況怎么會存在呢,js代碼沒被過濾,這種情況怎么存在呢
1.很簡單的例子,當我們訪問一個站點,它對我們的引數會跟一個url進行拼接,returun www.example.com?title=#{url}
就這樣我我們可以進行一個拼接,1<script>alter(1)</script)這樣我們收到的回傳的url如果它對這個url引數沒有任何過濾的話就會回傳一個帶js代碼的url,js代碼還會被執行
第二種情況這種情況是存在與java中的
@RestController
@RequestMapping(value = "https://www.cnblogs.com/xss")
public class Xsstest {
@ResponseBody
@GetMapping("/test")
public String getxss( HttpServletRequest request, HttpServletResponse response,@RequestParam String xss){
xss = request.getParameter("xss");
request.setAttribute("xss",xss);
System.out.println(xss);
System.out.println(xss);
request.getRequestDispatcher("src/main/java/web/1.jsp");
return xss;
}
}
叫做域內的xss,這域呢不是內網的域而是javaweb的一種機制吧,就是request域,它可以把從request獲得的值存盤到一個空間里面然后可以再其他地方用方法把它取出來,如果這個setAttribute對輸入和輸出的值都沒有過濾的話也會在其他頁面產生xss
1.域物件:一個有作用范圍的物件,可以在范圍內共享資料,
2.request域:代表一次請求的范圍,一般用于請求轉發的多個資源中共享資料
less-2
那存盤型xss就很好理解了,就是在前段輸入的值會被后端載入且,后端對輸入的內容沒有進行過濾,就會導致js腳本代碼的執行,
@RequestMapping("/stored/store")
@ResponseBody
public String store(String xss, HttpServletResponse response) {
Cookie cookie = new Cookie("xss", xss);
response.addCookie(cookie);
return "Set param into cookie";
}
@RequestMapping("/stored/show")
@ResponseBody
public String show(@CookieValue("xss") String xss) {
return xss;
}
這里是利用cookie的可構造來做出來的,但是現實情況不會出現這種cookie直接構造的,這里只是為了方便,還有很多的利用場景,比如評論區,投訴信這些可能會存在在后臺的都會出現這種構造型別
總結
總的來說java的xss就是這些基礎的東西一個是在域中存盤的問題,和域環境存取內容還有就是有些類也存在這樣的問題(這里后面再分析)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/518738.html
標籤:其他
上一篇:記一次SQL注入的識訓
下一篇:CISCO設備資訊泄漏漏洞案例
