XSS攻击"实战"

2022-05-311190

背景

在开发评论管理系统的时候,想到了僵尸粉刷评论的情况, 可以获取大量的用户cookice实现 而偷cookice的方式,就衍生到了 XSS 攻击

XSS 原理

摘抄百度百科: HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,<title>与</title>之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。

即被XSS注入之后的网页被普通用户打开之后, 就会后台执行一些恶意代码, 例如偷取cookice发布评论,发送骚扰邮件 很多的QQ用户在告诉别人密码的情况下,却出现了群发广告的问题, 大概率就是遇到了XSS攻击

实战开始

页面展示

在这里,我简单用Java和Thymeleaf模板写了一个留言板

留言板

代码展示

controller:

@Controller
public class PageController {

    final public static List<String> messageList = new ArrayList<>();

    @RequestMapping(path = {"","/"})
    public String index(HttpServletRequest request,Model model) {
        String userName = request.getParameter("userName");
        model.addAttribute("messageList", messageList);
        model.addAttribute("userName", userName);
        return "bbs";
    }


    @RequestMapping("say")
    public String say(HttpServletRequest request, Model model) {
        String message = request.getParameter("message");
        String userName = request.getParameter("userName");
        messageList.add(message);
        model.addAttribute("userName", userName);
        model.addAttribute("messageList", messageList);
        return "bbs";
    }
}

bbs.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>留言板</title>
</head>
<body>

欢迎: <div th:utext="${userName}">某人</div>

<form method="get" action="/say">
    <p>姓名<input type="text" th:value="${userName}"></p>
    <p>说点什么:<input type="text" name="message"></p>
    <input type="submit" name="提交">
</form>

<hr>
<div th:each="message : ${messageList}">
    <div th:utext="${message}"></div>
    <hr>
</div>

</body>
</html>

xss.js

alert("网站被注入了")
console.log("偷偷发送cookice到服务器")

招式展示

反射式XSS注入

观察上面的代码 在我们进入页面时候,是可以带一个参数 userName 的 参数之后会展示在页面上,那么我们可以通过对这个参数进行尝试注入

来尝试执行

 http://127.0.0.1:8080/?userName=%E5%95%8A%E5%93%88%3Cscript%20src=%22http://127.0.0.1:8080/xss.js%22%3Ealert(%22%E6%B3%A8%E5%85%A5%E5%95%A6%22)%3C/script%3E

效果 弹框提示 后台发送

如果要进行攻击的话,只需要将链接发送给指定的人,他点开之后,就可以完成攻击操作

存储式XSS

观察页面,我们是可以在内容页面进行提交留言的 而留言则会每次打开都会进行渲染 那么我们可以直接提交XSS代码

来让杰哥看看<script src="http://127.0.0.1:8080/xss.js"></script>

存储式XSS

总结

反射式一般只会打开一次攻击一次 而存储式则是会存在服务器,每次打开指定页面都会进行攻击,范围广

怎么预防

永远不要相信别人的数据, 对所有的参数进行转码, 渲染的时候,也转码之后显示, 避免被浏览器直接执行

分享
点赞2
打赏
上一篇:Docker常用命令笔记(一)
下一篇:基于Nginx实现项目平滑部署