当前位置: 代码迷 >> 综合 >> pikachu+Cross-Site Scripting(XSS)
  详细解决方案

pikachu+Cross-Site Scripting(XSS)

热度:29   发布时间:2023-11-29 13:12:57.0

目录

3.2 反射型XSS(post)

3.3 存储型XSS

3.4 DOM型xss

3.5 DOM型xss-x

3.6 xss之盲打

3.7 xss之过滤

3.8 xss之htmlspecialchars

3.9 xss之href输出

3.10 xss之js输出


3.1 反射型XSS(get)

进入靶场,如图3.1.1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_14,color_FFFFFF,t_70,g_se,x_16

图3.1.1

根据我们前面的测试流程,我们首先输入一些特殊字符和唯一识别字符,如图3.1.2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_13,color_FFFFFF,t_70,g_se,x_16

图3.1.2

结果如下,如图3.1.3

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.1.3

输入测试代码查看是否有过滤,查看下源码。如图3.1.4

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.1.4

测试代码直接在p标签中输出,直接使用<script>alert(/1/)</script>但发现对长度有限制,定位输入框直接修改长度,如图3.1.5

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.1.5

成功执行,如图3.1.6

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_12,color_FFFFFF,t_70,g_se,x_16

图3.1.6

3.2 反射型XSS(post)

进入靶场,如图3.2.1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_15,color_FFFFFF,t_70,g_se,x_16

图3.2.1

先登陆 admin 123456,如图3.2.2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_13,color_FFFFFF,t_70,g_se,x_16

图3.2.2

登入后直接输入payload:<script>alert(/xss/)</script> 触发弹窗,如图3.2.3

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.2.3

3.3 存储型XSS

进入靶场,如图3.3.1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_11,color_FFFFFF,t_70,g_se,x_16

图3.3.1

输入测试代码,查看是否有过滤,如图3.3.2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.3.2

我们发现我们的留言会一直存在,而且从表现上我们输入的内容直接输出了,下面通过源码观察,如图3.3.3

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.3.3

测试代码直接输出在了p标签中,可以直接输入,如图3.3.4

c2c851ac1bbd4885acf86682eb0ce2d5.png

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.3.4

3.4 DOM型xss

进入靶场,如图3.4.1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_13,color_FFFFFF,t_70,g_se,x_16

 图3.4.1

输入测试代码,如图3.4.2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_13,color_FFFFFF,t_70,g_se,x_16

图3.4.2

显示的内容和我们的输入的有所不同查看页面源码,如图3.4.3

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16 图3.4.3

getElementById获取标签id为text的值给str,str通过字符串拼接到a标签中。所以我们要闭合前面的标签,如图3.4.4

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.4.4

点击what do you see,便会触发弹窗,如图3.4.5

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.4.5

3.5 DOM型xss-x

进入靶场,如图3.5.1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_17,color_FFFFFF,t_70,g_se,x_16

图3.5.1

点击请说出你的伤心往事就会弹出一句话,如图3.5.2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_17,color_FFFFFF,t_70,g_se,x_16

图3.5.2

查看下页面源码,如图3.5.3

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.5.3

domxss函数,使用window.location.search获取url的赋值值给str,经过url解码,取出的内容赋值给txss,将txss中的 “+” 替换为 “空格” 赋值给xss,最后将xss拼接到a标签中。和上面的方法相同,payload需要闭合标签,如图3.5.4

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.5.4

当鼠标移动到图片位置就会触发弹窗,如图3.5.5

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.5.5

3.6 xss之盲打

进入靶场,如图3.6.1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_13,color_FFFFFF,t_70,g_se,x_16

图3.6.1

输入常规的payload:<script>alert(/xss/)</script>,点击提交后发现这里提示一段文字,应该是直接打到后台了,如图3.6.2

0302ff7cc038416bb2117e1a9f297c5d.png

图3.6.2

找到后台,如图3.6.3

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.6.3

登录进去,如图3.6.4

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.6.4

登陆到后台时就会遭受攻击,如图3.6.5

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.6.5

3.7 xss之过滤

进入靶场,如图3.7.1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_13,color_FFFFFF,t_70,g_se,x_16

 图3.7.1

输入下面的内容,如图3.7.2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_13,color_FFFFFF,t_70,g_se,x_16

图3.7.2

查看后端源码,发现对 <script 标签进行了过滤,替换为空格,但是只是对小写进行了替换,如图3.7.3

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.7.3

可以看到我们输入的<script>标签被去掉了,尝试大小写绕过,<SCRIPT>alert(/xss/)</sCRIpt>,成功弹窗,如图3.7.4

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.7.4

3.8 xss之htmlspecialchars

进入靶场,如图3.8.1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_14,color_FFFFFF,t_70,g_se,x_16

图3.8.1

输入下面的内容,如图3.8.2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_14,color_FFFFFF,t_70,g_se,x_16

图3.8.2

查看页面源码,如图3.8.3

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.8.3

可以看到<,>,“都做了转码,唯独”’"(单引号)没有进行转码,可以使用单引号构造payload,如图3.8.4

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.8.4

3.9 xss之href输出

进入靶场,如图3.9.1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_16,color_FFFFFF,t_70,g_se,x_16

图3.9.1

输入下面的内容,如图3.9.2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_15,color_FFFFFF,t_70,g_se,x_16

图3.9.2

查看页面源码,如图3.9.3

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.9.3

过滤了 ’,“,<,> 这时候我们可以尝试使用伪协议绕过,如图3.9.4

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.9.4

3.10 xss之js输出

进入靶场,如图3.10.1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_12,color_FFFFFF,t_70,g_se,x_16

图3.10.1

输入下面的内容,如图3.9.2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_12,color_FFFFFF,t_70,g_se,x_16

图3.10.2

查看页面源码,如图3.9.3

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16

图3.10.3

输入的代码被生成再js中并赋值给$ms。既然我们的输入被带入到js中,可以闭合,如图3.10.4

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55G2fndoeQ==,size_20,color_FFFFFF,t_70,g_se,x_16图3.10.4

  相关解决方案