Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
1.反射性XSS;
2.存储型XSS;
3.DOM型XSS;
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
(1)打开页面之后,我们看见Which NBA player do you like?
(2)我们查看一下提示输入kobe,我们打开开发者工具可以看见——,知道是xss攻击
(2所以我们使用最基础的xss攻击,在上一篇说过什么是最基础的xss攻击,我们输入到一半发现无法输入,我们修改maxlength="200",我们可以看到弹窗
我们先讲一下什么是post利用方式:POST型的漏洞一般是使用表单方式进行提交,无法直接使用
URL进行攻击。
(1)我们打开页面发现是一个登录页面,我们输入用户名和密码——admin/123456
(2)登录进去之后, 我们输入kobe,发现和前面一模一样,所以我们输入
存储型xss一般发生在留言板或者标签里面,而且一直存储在服务器里面,只要刷新就会弹窗
(1)打开之后是一个留言板,
(2)我们直接输入,为了和之前用区分,因为我之前测试过xss,害怕混合
(3)我们也可以使用,进行攻击 是图片发送攻击
我们先了解什么是DOMxss,DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
可能触发DOM型XSS的属性:
document.referer属性
window.name属性
location属性
innerHTML属性
documen.write属性
(1)我们直接输入,可以看到没有发生弹窗
(2)我们查看代码,可以知道要使用闭合标签,'>来闭合前面的,我们使用'>使成为一个独立的字符
(3)我们使用'>,弹出百度的页面
这个和前面的DOM型差不多,只是这个要点击一个链接才可以弹窗
(1)我们输入'>,然后就会出现链接
(2)我们点击链接,就会弹窗
(1)盲打,也就是说只有后台才能看到输入的内容,从前端是无法判断是否存在XSS的。一般会联合beef等平台,利用xss盲打对获取管理员的cookie信息等,之后对带着一连串的攻击套路…
(2)我们输入,看到页面没有反应
(3)页面虽然没有回显,但是肯定会提交到后台,如果后台没有做严格的过滤的话,管理员登录后台管理页面的时候,如果后台把我们的内容输出,那么后台管理员就有可能会遭受到我们的的XSS攻击,点一下提示把文件路径加入到url后面进入登录后台,使用默认账号登录,发现js语句确实生效了。
(4)我们也可以插入
1)前端绕过,直接抓包重放,或者修改html前端代码(前端的过滤只能作为辅助手段,是特别容易被绕过的)
2)大小写(一个大写字母一个小写字母)
3)拼凑
(1)我们先输入最基础的xss,可以看到被过滤了
(2)我们使用大小写绕过
htmlspecialchars() 函数把预定义的字符转换为HTML实体,预定义的字符是:
(1)我们输入,看到有'>,我们要使用闭合标签
(2)我们使用闭合'>,可以看到<>被过滤了
(3)所以我们使用' οnclick=alert(1111) '
(1)我们输入最基础的xss,看见有闭合标签
(2)发现是 htmlspecialchars() 过滤, 但是这次过滤了单引号:
服务端进行了两次关键的处理:
这里也可以用JavaScript伪协议来绕过:javascript:alert(xss) // JavaScript伪协议
(3)点击链接即可
它会把我们的输出放到js中,然后对这个变量进行判断,然后再输出,我们可以构造一个闭合,首先一个单引号闭合本身$ms的语句。然后使用一个《/script》闭合页面的)
pikachu-master的xss攻击到这里也就结束了。