pikachu 靶场-XSS-跨站脚本

0 阅读4分钟

Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型: 1.反射性XSS; 2.存储型XSS; 3.DOM型XSS;

反射型xss(get)

反射型xss:它允许攻击者将恶意脚本注入到网页中,当用户浏览这些页面时,这些恶意脚本会被执行。

信息收集与分析

随便输入一个字符串,输入aa,然后提交,在下面会有反显的内容。很明显这是个反射型xss。

image.png

这边输入框对输入内容做了限制,最长20字符,突破这个限制有两个方法,

  • 直接发送请求,就没有这个限制
  • 直接通过Devtool修改这个长度

实施

我们注入的代码如下:

 <script>alert(1)</script>
  • 通过bp抓包修改

image.png

  • 通过浏览器的开发者工具,在Elements中直接修改maxlength的值

image.png

总结

绕过前段限制的两种方式,一种直接跟服务器发请求,一种通过开发者工具修改。

反射型xss(post)

信息收集与分析

这一关应该是登录后,通过xss获取到cookie,我这边默认密码是admin|123456

image.png

登录后是一个输入框,并且这边的输入框没有限制。

image.png

实施

注入的代码有:

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

登录后,输入注入代码即可

image.png

总结

通过前段获取登录后的cookie信息。

存储型xss

存储型XSS是指攻击者将恶意脚本提交到目标网站的数据库中,这些脚本随后被服务器端读取并在用户的浏览器中执行。与反射型XSS不同,反射型XSS通常涉及将恶意脚本作为URL参数传递,而存储型XSS涉及将脚本存储在服务器端(例如,数据库或服务器文件系统中)。

信息收集与分析

此处是存储型,保存后,刷新页面后数据依然存在,而反射型就没有了。有信息保存的,并且会把这个信息文本显示的地方就会有这个漏洞。

image.png

实施

注入的代码:

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

输入代码后,显示:

image.png

image.png

总结

学习了存储型的特性,注入的代码会存储到数据库的。

dom型xss

DOM XSS它发生在客户端,通过修改网页的DOM结构来注入恶意脚本。

信息收集与分析

输入的内容,会包含在一个a标签的href属性中,那么我们输入javascript:alert(1);

image.png

实施

注入的代码:

 javascript:alert(1)

image.png

总结

学习了对dom型的用例;

DOM型xss-x

信息收集与分析

此关主要是上一关的变形,只是需要点击两次,但是最总还是把输入的内容添加到一个a标签的href中

image.png

实施

注入代码:

 javascript:alert(1)

image.png

xss盲打

信息收集与分析

随便输入一些信息后,当前页面没有显示相关的内容。

image.png

查看下提示 :

image.png

地址为:

 /pikachu/vul/xss/xssblind/admin_login.php#

image.png

账号密码是:admin|123456

终于看到对应的内容:

image.png

实施

注入的内容是:

 <script>alert(1)</script>

image.png

总结

学习了一个新的场景,不会直接在当前页面实现,而是在管理员页面显示。

xss过滤

信息收集与分析

我们输入:

 <script>alert(1)</script>

结果被过滤掉,只出现了一个>

image.png

查看提示:

image.png

这边只能乱测试,可以考虑大小写是否能逃过。

我们通过源码可以看到过滤的代码:

image.png

根据这个,我们使用大写就能绕过了。

实施

注入的代码:

 <sCRIPT>alert(1)</sCRIPT>

image.png

总结

尝试大小写、编码等方便尝试绕过。

xss之htmlspecialchars

htmlspecialchars() 会将以下字符转换为对应的 HTML 实体:

  • < 转换为 <
  • > 转换为 >
  • & 转换为 &
  • " 转换为 "
  • ' 转换为 '

htmlspecialchars() 是一种简单而有效的防止 XSS 攻击的方法,尤其适用于需要快速实现数据净化的场景。通过将特殊字符转换为 HTML 实体,可以确保这些字符不会被浏览器解析为实际的 HTML 或 JavaScript 代码。然而,对于更复杂的数据净化需求,如需要保留部分 HTML 标签或属性,建议使用更强大的工具,如 HTML Purifier,以实现更精细的控制。

信息收集与分析

输入的内容,被转化

 '"<>6666

image.png

我们可以输入下面内容绕过的代码

 ' onclick='alert(1)
 javascript:alert(1)

实施

下面是注入的代码与效果图

 ' onclick='alert(1)

image.png

总结

学习了绕过htmlspecialchars的方法;

xss之href输出

信息收集与实施

这边关主要是对输入的内容,创建a标签的href中,之前的关卡中也都有过这样的例子,我们这边就直接实施了,输入下面的代码:

 javascript:alert(1)

效果:

image.png

xss之js输出

信息收集与分析

这一关把输入框的内容生成对应的js内容,我可以输入:asdfasdf ,进行测试,查看下页面的代码:

image.png

根据代码格式,我们想办法把 ' 闭合,

 $ms='内容';

下面是可以绕过的代码:

 ';alert(1);';

实施

输入绕过代码的效果:

image.png

总结

需要根据代码的具体内容,组织代码绕过。