Pikachu靶场之XSS漏洞详解

目录

1、反射型xss(get)

1.1 查看源码

方法三:

 2、反射性xss(post)

3、存储型XSS演示

4、Dom型XSS演示

5、DOM型xss-x

6、xss盲打

7、XSS的过滤和绕过

8、XSS之htmlspecialchars

9、xss之href输出

10、xss之js输出


1、反射型xss(get)

1.1 查看源码

 方法一:

直接把20给它改成200

<script>alert(document.cookie)</script>

方法二:

用hackbar

方法三:

网页框之间输入

因为输入的Payload会在网址框显示,而网址框是没有长度限制的
所以可以之间在网址框插入Payload

<script>alert("caker")<%2fscript>
%2f为URL编码中的 /

 2、反射性xss(post)

和1差不多,要先以post方式登入

<script>alert(document.cookie)</script>

 

3、存储型XSS演示

        存储型XSS漏洞跟反射型形成的原因一样,不同的是存储型XSS下攻击者可以将脚本注入到后台存储起来,构成更加持久的危害,因此存储型XSS也称“永久型”XSS。

        页面切换,然后再次切换回来,发现弹窗依然存在,说明我们输入的语句已经被存储起来。

4、Dom型XSS演示

什么是DOM

HTML DOM 是关于如何获取、更改、添加或删除 HTML 元素的标准

 看起来应该是a标签,打开页面源码,CTRL+F搜索这串字符

 利用了DOM将字符串进行了拼接并把值给a标签的href,然后输出一个what do you see?

所以我们可以利用已知条件构建payload效果为弹窗,弹窗内容为XSS

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

故:

#' onclick="alert(xss)">

5、DOM型xss-x

 查看源码

 分析代码,利用了DOM将字符串进行了拼接并把值给a标签的href,就是比第4题更容易利用而已

#' οnclick="alert(xss)">

tip:

由于本关payload在url中,因此比第4关好利用很多
DOM型XSS只在前端,与后端毫无关系。DOM-X型危害更大,它能够像反射型一样在URL中体现,将URL发给了受害者就能进行攻击。

6、xss盲打

 输入代码后,页面没有反应

 不妨打开后端页面

         登录后发现我们之前输入的内容已经记录在后台,而且内容和用户名都有显示,所以对两个输入框都进行测试

Payload:

<script>alert(document.cookie)</script>

 

        这种情况就是xss盲打,对攻击者来说只是尝试的输入,并不知道后台是否被输出,只是尝试的输入跨站脚本。管理员被x到,攻击者成功。这种危害比较大,如果在前端输入一段盗取cookie的脚本,管理员一登陆,管理员的cookie就会被获取。攻击者就可以伪装管理员登陆后台,后台的权限就大了。

7、XSS的过滤和绕过

XSS绕过-过滤-转换;

  1. 大小写,比如: <SCRIPT> aLeRT(111)</sCRIpt>
  2. 前端限制绕过,直接抓包重放,或者修改html前端代码
  3. 拼凑: <scri<script> pt> alert(111)</scri</script> pt>
  4. 使用注释进行干扰: <scri<!--test--> pt> alert(111)</sc <--jinyouxin--> ript>
     

先输入<SCRIPT> aLeRT(111)</sCRIpt>,试试

好家伙, 全被过滤掉了。

输入所有可能的敏感字母:"<>'on/`() script href src img

 可以把这些一个个输入提交试试,如果单独输入"<>‘on/’()则什么都没有被过滤,如果输入了"<>‘on/’() script img href src,则<>‘on/’() script被删掉了,这说明过滤语句超可能是<.*script

<a herf="#" onclick="alert(document.cookie)">
<img src=x onerror="alert(666)">

8、XSS之htmlspecialchars

htmlspecialchars()函数把预定义的字符转换为HTML实体

  • & (和号)成为 &amp;
  • " (双引号)成为 &quot;
  • ' (单引号)成为 '
  • < (小于)成为 &lt;
  • > (大于)成为 &gt;

我们输入:jinyouxin' "<>#$% have a try

 

除了单引号其他的特殊字符都进行了编码,我们可以输入#' οnclick='alert(document.cookie)' 第一个单引号是对前面进行闭合。

 

9、xss之href输出

先用 jinyouxin' "<>#$% 试试

 补充:

href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。如果用户选择了<a>标签中的内容,那么浏览器会尝试检索并显示 href 属性指定的 URL 所表示的文档,或者执行 JavaScript 表达式、方法和函数的列表。

敏感字母都被编码了,可以使用JS伪协议绕过:

javascript:alert(document.cookie)

 

思考:

那么当用户输入由href属性输出时,该怎么防御xss呢?

仅仅html编码就不够了,本关的php源代码中给了提示(有点简略,这里稍微扩充一点)。遇到这种情况,需要两点处理:

  1. 检查用户输入,必须以http或者https开头。注意,不可以仅仅是包含http和https。
  2. 进行html实体编码
     

10、xss之js输出

先用 jinyouxin' "<>#$% 试试

 直接在<script> </script>中,这样就容易了,payload:';alert(/xss/);//

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Camelus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值