点击上方蓝字关注!
注:本篇文章为个人学习笔记仅供学习交流。
![ecf211dcc1d17b53ea7545d7e895cd2f.gif](https://i-blog.csdnimg.cn/blog_migrate/9d864c447a4785ce839cc108b1c43c48.gif)
概述
跨站脚本攻击,通常称为XSS,是一种通过代码注入的网站应用程序安全漏洞。攻击者可以通过向网页中注入恶意代码,导致用户浏览器在加载网页,渲染HTML时就会执行恶意代码。(本篇示例在pikachu漏洞练习平台演示,搭建教程见下篇。)
常见XSS漏洞
1.反射型XSS
攻击者输入xss代码,提交给服务器,服务器解析后,在响应中返回输入的xss代码,最终由浏览器执行,具体见下面示例。
反射型xss(get)
先输入1,查看一下URL的变化,由于输入框限制输入长度,所以在URL框输入xss代码。
![e90a11d034d9b1b1f3027548f6512db6.png](https://i-blog.csdnimg.cn/blog_migrate/459eaeb0b922924c71fc0554bb58b048.png)
将1改为如下代码,回车后就出现了弹窗。
<script>alert('黑客帮')script>
![8bae5323dafce7442386566e0fd886ae.png](https://i-blog.csdnimg.cn/blog_migrate/e1ad70bd4a3441d1eb0de0ae56998442.png)
反射型xss(post)
登入框插入不了xss,所以先登录账号密码admin/1234546然后直接在输入框输入同上的xss就行了。
![719565597a107ec22d775f0ec2a3a3e8.png](https://i-blog.csdnimg.cn/blog_migrate/cf614f5c5aacc12403d25f873a217d73.png)
2.存储型XSS
存储型xss提交的xss代码会存在服务端,,下次无论是自己还是别人请求页面时会自动执行xss代码,存储型xss的典型应用有留言板,在线聊天室,邮件服务等。
还是插入相同的代码,点击submit即可将代码插入服务端,下次刷新也会出现弹窗。
![119706d3a6d330339c955c482a4b3130.png](https://i-blog.csdnimg.cn/blog_migrate/2786cc644cde53508439132ca6cd2c66.png)
![6b024b89d45b72f889fea48fa4e56160.png](https://i-blog.csdnimg.cn/blog_migrate/f17371e28a7470437c13a572c7325396.png)
3.DOM XSSDOM xss的代码不需要服务端解析响应的直接参与,触发xss的是浏览器端的DOM解析器。同样先测试一下代码,并打开源代码查看。很明显是无法执行xss的。
![403e984ba5752dcf934d5109800d0b53.png](https://i-blog.csdnimg.cn/blog_migrate/a2b4cc8aa218da4e11586bc2906a5dcd.png)
换一种方式,闭合引号,用onclick,见下方代码。然后点击click me!,在源代码可以看到xss代码,然后点击what do you see?即可看到弹窗。
' onclick="alert('黑客帮')">
![3de8fc5504dd1283496935381475cd99.png](https://i-blog.csdnimg.cn/blog_migrate/4f21be05217b89b1b4c12970b978d114.png)
![0ed8cffae927268142827c9e1da83fa6.png](https://i-blog.csdnimg.cn/blog_migrate/7f03e68690112ec374b4b18deafad567.png)
其他类型XSS通关
xss之盲打
所谓盲打,顾名思义就是有输入框就输入xss的代码。
![733c753281fb1327f078b085a3c7479c.png](https://i-blog.csdnimg.cn/blog_migrate/0fbc871b6c4963afbb3c500af5ee15ae.png)
登录后台,即可看到弹窗。http://127.0.0.1/pikachu-master/vul/xss/xssblind/admin.php
![1cd9adca690e421a0241631a88654f9a.png](https://i-blog.csdnimg.cn/blog_migrate/d96d5e8615c92b4184eb2e9a9edbaa87.png)
xss之过滤
大小写过滤
<ScriPT>alert('黑客帮')ScriPT>
![b9861466b7f710c12c70bc89f0845b06.png](https://i-blog.csdnimg.cn/blog_migrate/3f8d6915a66ac69d87370ac273551bfa.png)
xss之htmlspecialchars
htmlspecialchars()是PHP里面把预定义的字符转换为HTML实体的函数
预定义的字符是
& 成为 &
" 成为 "
' 成为 '
< 成为 <
> 成为 >
可用引号类型
ENT_COMPAT:默认,仅编码双引号
ENT_QUOTES:编码双引号和单引号
ENT_NOQUOTES:不编码任何引号
所以,我们先测试一下,输入' " <>666后,查看源代码可知,单引号没被编码,说明后端用的默认的htmlsspecialchars函数做处理。
![987afcf7effc2f3026616683577e726f.png](https://i-blog.csdnimg.cn/blog_migrate/28a9ce17e73a48c7894f6b13a06acd16.png)
所以,我们用如下代码即可。(点击蓝色字体即可弹出)
' onclick='alert(/hello/)'
![81e4eb2c317a886243b50a0be3d375fa.png](https://i-blog.csdnimg.cn/blog_migrate/42e9b744996d311bcad635a2ff6ff2b9.png)
xss之href输出
同样,我们可以输入一写字符进行测试,输入aa'"<>然后查看页面源代码,按Ctrl+F,搜索aa,可以发现这次的输出是在href中,但是这次代码将双引号进行了过滤,输出在a标签里的href属性,可以使用js协议来执行js。
![ff08670769ad7f1f9e5e90cb9cde7c07.png](https://i-blog.csdnimg.cn/blog_migrate/52b9dd81e5ee62c7efbd5ea318ddf01d.png)
我们输入如下代码,然后点击蓝色字体。
javascript:alert(/黑客帮/)
![92f80a7e4e56251f6552ab32305e612b.png](https://i-blog.csdnimg.cn/blog_migrate/d675a24b69b8cf0281860023c5577d1a.png)
xss之js输出
先输入hello测试一下,查看发现,他将我们输入的字符存到了js代码里面然后进行判断,我们可以根据代码写一个闭合。如下:
'script><script>alert(/黑客帮/)script>
![7d4281a801b5c96c15b4964c4c63e546.png](https://i-blog.csdnimg.cn/blog_migrate/ab9d8920945bae42622bbeb170f06026.png)
![494c178f97086ed045b3d0c0c9794b9f.png](https://i-blog.csdnimg.cn/blog_migrate/fd63ecc87d210d1fa6b5d8758619ddda.png)
![6990ee168aff32668bd99902bd9334ba.gif](https://i-blog.csdnimg.cn/blog_migrate/2eeb78634ccc0f3e6df14e667fbc8275.gif)
- End -
![eb84bbdf66d44badca7e5c9c5fef1dbc.png](https://i-blog.csdnimg.cn/blog_migrate/dcfe1dde9abd53aebc832f213b83e4d4.png)
往期推荐
CTF自学笔记(二)SQL注入攻击[一]
CTF自学笔记(二)SQL注入攻击[二]
CTF自学笔记(二)SQL注入攻击[三]
觉得不错,请点个在看