什么是XSS?
定义:XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的网络安全漏洞,攻击者通过在受信任的网站注入恶意脚本代码,从而在用户的浏览器中执行该脚本。这种攻击可能会导致用户的个人信息被窃取、账户被劫持、恶意操作等安全问题。
分类:
- 反射型XSS:攻击者通过诱使用户点击包含恶意代码的链接或访问恶意网址,使得注入的代码被服务端返回并执行,从而攻击用户。即 黑客→用户→正常服务器→用户→恶意服务器
- 存储型XSS:攻击者将恶意代码持久化存储在服务器端,当用户浏览受感染的页面时,恶意代码被提取并注入到页面内容中,进而攻击用户。即 黑客→正常服务器→用户→恶意服务器
- DOM型XSS:攻击者通过修改页面的DOM结构,使得恶意代码被浏览器执行,从而实现攻击。DOM类型是一种特殊的反射型XSS,其数据不经过后端,通过前端的js脚本处理实现攻击。
总的来说,XSS和SQL注入本质上干的事差不多,XSS主要注重于在网站上留下恶意的待执行脚本,诱导用户进行访问,从而导致个人信息被盗取。
XSS-LABS挑战是类似于SQL-LABS的针对XSS攻击的练习,靶场用phpstudy(小皮面板)搭建即可。
LEVEL 1:
第一题由网址我们可以判断出该网站使用GET传参,直接修改name=后的值,写一个脚本<script>alert(1)</script>
<script>alert(1)</script>
LEVEL 2:
试试常规注入<script>alert(1)</script>
可以用">注释掉前面的<"
LEVEL 3:
照常先随便输入,然后看源代码:
用单引号注释试试
没有结果,再看看源代码,发现尖括号被注释掉了
那就使用HTML的鼠标事件onclick
'onclick='alert(1)'
完成后只需用点击即可
LEVEL 4:
测试<script>alert(1)</script>查看源代码
不难发现和第三题一样,只不过使用双引号注释
"onclick="alert(1)"
即可通关,当然,HTML事件也有键盘事件如"onkeypress"这样可以按下任意键盘按键触发脚本。
LEVEL 5:
尝试<script>alert(1)</script>, 打开源代码后发现“scrip”关键字被下划线隔开,尝试用onclick
关键字“on”被隔开,但不是没有办法,HTML中可以用<a></a>来写入数据
"><a href="javascript:alert(1)">here</a>
这样一来我们只用点击”here“所表示的脚本即可。
LEVEL 6:
先做几种尝试:
结果是script,on,href这几个关键字都被过滤了,打开后台源码
可以说是能想到的和想不到的都被过滤了。还能试试大小写。
<SCript>alert(1)</SCript>
像这样把关键字部分字母大写即可骗过过滤器。
LEVEL 7:
尝试原始代码
发现输入的script关键字被过滤掉了,查看后台源代码
可以看出来不仅是script,其他关键字也被过滤了(包括大写),但该过滤器只过滤一次,所以我们可以使用双写来解决。
"><scrscriptipt>alert(1)</scscriptript>