@RestController @RequestMapping(value = "/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那一套基础类,这样开发很方便记录一些点吧
我这里原本是准备用request域中去存储这个值然后做一个跳转达到这个效果的但是不知道为啥没有配置好久采用了另一种的方式就是在本页面不过滤参数直接返回这就是一种简单的反射型xss。
还有一种效果就是放到共享域中后又另外的页面取出内容没有进行过滤也会造成xss漏洞。
补充一下域相关的知识
1.域对象:一个有作用范围的对象,可以在范围内共享数据。 2.request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
还有一些审计是在前端的就不做审计了自己又在复习这些web漏洞多摸摸靶场
这里的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 = "/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域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
那存储型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就是这些基础的东西一个是在域中存储的问题,和域环境存取内容还有就是有些类也存在这样的问题(这里后面再分析)