安全街
一步步,我们的信息安全时代

1.一句话说XSS

XSS攻击就是攻击者在网页中本该输入正常数据的地方插入一段恶意代码,当用户浏览此页面时,会执行这段恶意代码的一种攻击。XSS的本质是HTML注入

2.XSS的分类

XSS一般分为储存型XSS,反射型XSS和DOM Based XSS

  • 储存型XSS:将恶意代码插入到数据库中,当用户浏览时,从数据库中加载出恶意代码并执行。比如留言板的XSS。
  • 反射型XSS:将恶意代码由客户端提交到服务端,经过一些处理后返回到前端页面中并执行。
  • DOM Based XSS:恶意代码插入后直接由前端直接插入到某个位置并执行,未经过服务器。

3.XSS的攻击姿势

3.1 Cookie劫持

在XSS平台上新建一个项目,将真正的攻击代码放入其中,平台会提供一个指向脚本的短连接。将短连接插入有XSS漏洞的网站,当XSS触发时,便会运行真正的攻击代码,将受害者的Cookie发送到XSS平台上。

Cookie劫持的核心代码是将目标网站的document.cookie发送到我们自己的服务器上并储存

3.2 钓鱼

这个姿势我在看我如何用骚姿势钓鱼管理员中有用到。
具体做法:

  • 做一个和后台登录一模一样的页面,让管理员不会产生怀疑的那种。建议直接把后台网页另存为到本地,然后修修补补。这个工作是需要很多时间去填的,需要耐心。
  • 页面做好后,要将表单什么的preventDefault掉,写入新的JS,发送账号和密码到XSS平台,或者我们提前做好的搭在自己服务器上的简易接受页上。这样一个钓鱼页面就做好了。
  • 写一段这样的JS:
    • 创建一个iframe标签
    • 将制作好的钓鱼页面插入到iframe标签中
    • 将这个iframe全屏覆盖到当前页面上
    • 点击登录后销毁这个iframe

这样我们就得到了最终的XSS payload。还是将这个payload放在其他服务器或者XSS平台上,创建一个指向它的短链接,插入有XSS的地方。
管理员打开含有XSS漏洞的页面后,触发我们的js代码,在当前页面上就覆盖上了我们的钓鱼页面,即伪装的后台登录界面。这会让管理员误以为登录失效了,输入账号密码,点击登录后,钓鱼页面被销毁,露出本来的页面。
由于钓鱼页面是基于DOM创建的,地址栏的链接并没有出站,所以并不容易引起怀疑。
当然这只是最基础的钓鱼,伪装的还不够好。XSS页面的选择也比较重要,如果管理员查看的不是需要后台权限的页面却触发了后台登录,那就可能会产生怀疑。

3.3 XSS蠕虫

所谓XSS蠕虫就是做了一些不可告人的事后,再进行自我传播来危害更多用户的一种姿势。
举个形象的例子:假如聊天界面有XXS漏洞,一个朋友给你发了XSS蠕虫payload,你查看后,触发漏洞,Cookie被打,紧接着把这条payload自动发送给你其他的好友,当其他的好友查看后…如此反复。
XSS蠕虫危害巨大,但一般动静也会很大。

3.4 获取CSRF Token

CSRF一般都会使用Token来防御。在页面涉及到表单时,会在服务器端生成一个Token,在页面加载时创建一个值为Token的input,插入到表单中,并设置type=”hidden“隐藏。当提交表单时,会将这个Token值一起提交。服务器端验证这个Token是否正确,如果不正确就会扔掉此次请求。由于同源策略,攻击者不能从请求后返回的页面中解析任何值,获取Token,所能做的就只有发送请求而已。
但如果要攻击的站点上有一个XSS漏洞的话,我们就可以通过XSS漏洞来获取CSRF的Token了。
具体方法我在骚姿势:当XSS与CSRF相遇中有详细说明。

3.5 DDOS

写一个死循环,不停的new WebSocket目标网站。如果用户多,目标网站小的话,一会它就被D死了。

3.6 挖矿

使用特定的挖门罗币的js引擎。

3.7 探测内网IP

这个只是听说过,博主没试过。

4.XSS编码绕过

  • 大小写绕过
  • 双写绕过
  • 通过事件触发
  • 使用十六进制UnicodeHTML等编码
  • 可控的字符集编码

5.防御XSS

5.1 为Cookie设置HTTP-ONLY

禁止js访问带有此属性的Cookie。

5.2 输入检查

过滤一些危险字符,如引号、斜杠、尖括号、script,通过白名单(一般输入)或黑名单(大段文字)的方式。

5.3 输出检查

变量输出时,使用HTMLEntitles转换为HTML实体。

5.4 使用CSP

CSP(网页安全政策)不再利用匹配关键字,而是利用同源策略从协议层将XSS干掉。它利用白名单机制定义了哪些资源可以被加载或执行,就算是发现了漏洞也无法利用,除非有一台白名单内的可信主机。

这篇文章还没有人发言,快抢第一!

发表评论