freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

pikachu靶机学习之XSS篇(保姆级教学)
2022-01-04 10:24:06
所属地 浙江省

pikachu系列之XSS(后续会更新其它系列)

漏洞类型:Cross-Site Scripting

XSS(跨站脚本攻击):

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。

(以上来自百度百科)


XSS有三种类型:

  • 反射型

交互的数据不会放在服务端,所见即所得,一般出现在查询界面

  • 存储型

交互的数据会放在服务端的数据库中,永久存在,一般出现在留言板,注册界面等

  • DOM型(类似反射型)

交互的数据同样不会服务端,是DOM操作前端JS代码时产生的,一次性的反射

XSS测试很简单,见框就插。每一个输入的地方都可能存在。

反射型XSS(get)

来看一下第一关:

先输入个’ljf666’再看看前端源码:

可以看到参数之间是直接拼接在一起的

那既然是直接拼接没有过滤那就直接上payload,上的过程中发现前端对输入框的长度进行了限制,小问题,改一下长度再上payload

具体操作按F12,再点击我箭头指向的那个按钮,再点击输入框就会自动查看到输入框的那段代码,将20修改一下改为大于我们payload的长度。

Payload:<script>alert('ljf666')</script>

拿捏!

反射型XSS(post)

先按照tips登录

然后进入下面这个界面

有输入框啊,怎么说,肯定是见框就插 payload

直接上我们的究极payload: <script>alert('ljf666')</script>

拿捏!

存储型XSS

看一下页面

哇哦,又是输入框,直接上payload: <script>alert('ljf666')</script>

再次拿捏!

我们来看一下我之前写的XSS分类定义,存储型是会到服务端的数据库的,永久存在,即任何人再次访问这个界面的时候都会弹框,不需要做任何事。

直接刷新,继续弹框,要想解决只有将代码删除才可以。

DOM型XSS

先看一下界面

又有输入框,啧,想都不想先上payload: <script>alert(‘ljf666’)</script>

欸,没有弹框啊,看一下前端源码,发现我们输入的payload被构造进了a标签的href属性里面,哇哦这个就属于DOM型,接下来构造一下新的payload

我把这个js复制下来方便大家看

<a href="<script>alert(" ljf666')<="" script="">'&gt;what do you see?</a>

着重看前面这个<a href="<script>alert(" ljf666')<="" script="">

想要造成XSS首先我们需要先闭合a标签,不然我们输入的任何参数都在a标签的<>里面

'><img src=xss onerror=alert('ljf666')>

这个payload原理就是图片的onerr报错属性

拿捏!

看一下源码

发现是直接将参数拼接在a标签里面的。

DOM型 XSS-X

看一下界面

先随便输入一个 长太帅 试一下

出现了一个链接啊,点一下看看

出现了两个链接,这个时候查看一下前端源码,找到两个链接对应的代码

这个时候长得确实帅的就已经注意到了我们输入的内容被拼接在了就让往事随风的a标签里面

那还说什么,老生常谈,像上面一样闭合标签就完事

Payload: '><img src=xss onerror=alert('ljf666')>

输入payload后,点击提交会跳转到初始页面

你以为失败了?NONONO,你忘了咱这是什么类型的XSS,随便输入点东西重新进入提交payload的那个页面,欸嘿,出来了

拿捏!

看一下源码,就是很自然的拼接到a标签里面

XSS之盲打

看一下界面

一看标题XSS盲打,欸,蒙了,什么是盲打,别慌,让我们百度一下

盲打仅仅是一种惯称的说法,就是不知道后台不知道有没有xss存在的情况下,不顾一切的输入xss代码在留言啊,feedback啊之类的地方,尽可能多的尝试xss的语句与语句的存在方式,就叫盲打。

“xss盲打”是指在攻击者对数据提交后展现的后台未知的情况下,站点採用了攻击者插入了带真实攻击功能的xss攻击代码(一般是使用script标签引入远程的js)的数据。当未知后台在展现时没有对这些提交的数据进行过滤,那么后台管理人员在操作时就会触发xss来实现攻击者预定好的“真实攻击功能”。

 通俗讲就是见到输入框就输入提前准备的xss代码,一般是使用script标签引入远程的js代码,当有后台人员审核提交数据时候,点击了提交的数据,触发获取到有价值信息。

其实总得来说就是指你输入的语句得不到回显,只有后台才能看到你得输入,你的攻击目标也换成了后台管理员。

那么我们先随便输入,看看什么情况

可以看到它提示你,你的输入是被管理员收到了

OK,那让我们来个经典payload,然后点击提示可以看到它给了我们一个后台地址,显然是让我用管理员的视角去看看我们的payload是否攻击成功

Payload:<script>alert('ljf666')</script>

发现一登录进去就成功弹窗

属实是拿捏了!

XSS之过滤

先看下界面

先不管他三七二十一四七二十八的,先上个经典payload

emm,看起来是做了过滤,来,让我们瞅瞅过滤了啥

一般简单的绕过有两种方式:

  • 双写绕过
  • 大小写绕过

这里我们可以看到他做的限制,小写的script都会被替换为空,那么双写也会被过滤,那我们来尝试大小写

Pyload:<sCript>alert('ljf666')</ScriPt>

实际上当他只过滤script语句的时候我们还可以构造其它的payload来达到目的

Payload:<img src=# onclick=alert('ljf666')>

点击一下,因为payload构造的是点击后alert

再次拿捏

XSS之htmlspecialchars

看一下界面

题目是htmlspecialchars,这是个啥捏,少年不要慌,让我们来看一下百度怎么说~

咳咳,百度告诉我,这是一个函数,作用是将一些特殊的字符转换为HTML实体

预定义的字符是:

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

让我们来看看转换了哪些特殊字符

先把这几个特殊字符都输入进去

可以看到除了 ’ 以外其它的字符都被过滤了

同时我们也注意到了,输入的内容会放到a标签的href属性中

让我们来构造个payload:#' onclick='alert(666)'

(href = # 的意思空链接)

拿捏!

XSS之href输出

看一下界面

嘶,叫我输入一个常用的网站,咳咳,还是让你们来吧www._____.com

随便填入一个www.baidu.com

看一下回显

可以看到url中的message参数接受了我们的输入,并且作者还夸我是一个浩然正气的人

那么当我们的输入会被拼接到url中的时候,我们该如何是好,这个时候先让我们来了解一下什么是javascript伪协议

javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行

当浏览器装载了这样的URL时,它将执行这个URL中包含的javascript代码,并把最后一条javascript语句的字符串值作为新文档的内容显示出来。这个字符串值可以含有HTML标记,并被格式化,其显示与其他装载进浏览器的文档完全相同。

javascript URL还可以含有只执行动作,但不返回值的javascript语句

简单来说就是,javascript:这个伪协议用于url中,将 : 后的语句当成js代码并且执行

那么我们构造一个payload:javascript:alert('ljf666');

再次拿捏住!

XSS之js输出

首先看一下界面

先随便输入一些真理

这个时候页面回显不要放弃爱

然后我们再用F12看看前端源码

发现我们的输入会被变量ms接受,再将变量ms放在if里面判断,输入一个tmac看看我们的猜想是否正确

输入后页面回显成为了这样,证明我们的判断是正确的

我们来构造payload,首先我们想要我们的输入由自己来控制,那么我们先闭合他的标签

Payload: me'</script><script>alert('ljf666')</script>

成功拿捏!

这个时候我们还有另外一种姿势,上图

我输入了666

可以看到我们的语句是在script之中的,天然我们就有了script,那我们可不可以闭合赋值语句,再构造payload呢

Payload : me';alert('ljf666');//

后面的//是注释,可以看到上图,他是

<script>

xxx

</script>

所以//会注释掉后面的if判断

拿捏!

# web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录