跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。
XSS的分类:
反射型XSS
存储型XSS
基于DOM的XSS
XSS一般分为3类:
1.反射型XSS,相对来说,危害较低,需要用户点击特定的链接才能触发。
2.存储型XSS,该类XSS会把攻击代码保存到数据库,所以也叫持久型XSS,因为它存在的时间是比较长的。
3.DOM 型XSS,这类XSS主要通过修改页面的DOM节点形成XSS,称为DOM Based XSS。
最简单的测试语句:
<script>alert("hello");</script>
语句执行后,浏览网页源码,发现这个语句已写入网页中了。
可以输入其他的JS代码,来让浏览器做其他的事,比如弹出用户cookie,在输入框中输入<script>alert(document.cookie)</script>,其中document.cookie可以用来获取用户的cookie。
HTTP是无状态协议,它依靠cookie来识别用户身份,如果我们通过JS来获取了用户的cookie后,我们就可以冒充他人的身份,比如:如果某银行网站存在XSS,你通过XSS获取了别人的cookie后,你可以把cookie替换成别人的cookie来冒充其他人,然后你就可以自由转账了。注:事实上,银行的网站一般都设置了HttpOnly,JS脚本无法读取到cookie信息,而且银行转账一般需要短信验证码,特别是大额转账,所以即使你找到XSS,想要利用也很难。
参考合天实验室的XSS进阶一
实例一:尝试构造语句使浏览器执行弹出对话框的脚本。
实例二:小写不行,就大写吧
因为会对<script></script>进行过滤,如关键代码:
尝试构造语句,改变script大小写,使浏览器执行弹出对话框的脚本。
实例三:大写小写都不行,看你怎么办?
对script大小写都进行过滤, 如关键代码,/i表示不区分大小写:
尝试构造语句,用其他html标签,<img src=123 οnerrοr=alert('xss')>,使浏览器执行弹出对话框的脚本。
参考合天实验室的实验:XSS进阶二
如果后台脚本,通过正则表达式限制了alert怎么办?如下:
尝试用confirm()函数,如下结果:
用prompt()函数也可以
js要参考:https://www.w3school.com.cn/js/index.asp
PHP 语法:https://www.w3school.com.cn/php/php_syntax.asp
另一个例子:页面中写入如下代码
则把用户输入存入有个变量
思路:使各种引号闭合后,加入js语句,如下:
查看源码如下:
页面代码
这是要对一些符号进行html编码:如<,<,如下:
思路:还是用单引号闭合,再插入xss语句:如下
关键代码:
页面形式:
源码:
思路:使路径双引号闭合,传入XSS代码
构造如下URL,并浏览
观察源码:
输入任何内容提交:成功!!!!
页面代码:显示一个锚点的值
源码:
#号后面,直接构造:<img src=1 οnerrοr=alert(1)>
也可以试试onload(),进行跳转