0x01 前言
XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載并執行攻擊者惡意制造的網頁程式,這些惡意網頁程式通常是JavaScript,xss本質上就是瀏覽器執行了域外的代碼,出現的場景比較多,需要具體情況具體分析
0x02 反射型xss
@RequestMapping("/reflect")
@ResponseBody
public static String reflect(String xss) {
return xss;
}
可以看到代碼中設定引數值沒有經過任何過濾訪問直接回傳到頁面中
payload:xss=<script>alert(/xss/)</script>
0x03 存盤型xss
存盤型xss就是把我們嵌入的js代碼存盤到資料中,然后通過訪問資料庫的功能點然后造成xss,所以它相比反射型xss更持久危害更大
@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";
}
這里用cookie來模擬下存盤型xss,設定一個引數值把它寫到cookie中,然后我們再通過以下路由去取這個值然后回傳到頁面中來
@RequestMapping("/stored/show")
@ResponseBody
public String show(@CookieValue("xss") String xss) {
return xss;
}
payload:http://localhost/xss/stored/store?xss=%3Cscript%3Ealert(/xss/)%3C/script%3E

訪問路由/stored/show,觸發xss

0x04 漏洞修復
自定義函式,過濾<>等敏感字符
@RequestMapping("/safe")
@ResponseBody
public static String safe(String xss) {
return encode(xss);
}
private static String encode(String origin) {
origin = StringUtils.replace(origin, "&", "&");
origin = StringUtils.replace(origin, "<", "<");
origin = StringUtils.replace(origin, ">", ">");
origin = StringUtils.replace(origin, "\"", """);
origin = StringUtils.replace(origin, "'", "'");
origin = StringUtils.replace(origin, "/", "/");
return origin;
}
0x05 其它
xss的利用手段主要是網路蠕蟲攻擊和竊取用戶cookie資訊,xss蠕蟲通過漏洞點嵌入惡意的js代碼,執行代碼后,就會添加帶有惡意代碼的頁面或DOM元素,從而進行傳播,而如果盜取cookie資訊,常見的就是進行跨域請求的問題,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/546352.html
標籤:訊息安全
下一篇:java代碼審計-XSS

