XSS(跨站脚本攻击)漏洞解析(带靶场演示)

一、基本概念及原理

        什么是XSS漏洞

                XSS(跨站脚本攻击,全称Cross-Site Scripting)是一种常见网络安全漏洞,允许攻击者在用户浏览器中执行恶意脚本。攻击者通过在受信任网站中注入恶意代码,诱骗用户点击或加载恶意内容,从而窃取数据、篡改页面或劫持用户。

        XSS漏洞原理

                攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响
的 HTML 代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。通过在用户端注入恶意的可执行脚本,若服务器对用户的输入不进行处理或处理不严,则浏览器就会直接执行用户注入的脚本。

        XSS常见的类型

                存储型XSS

                        原理:

                                1、攻击者将恶意脚本代码存储在服务器上(如数据库)。
                                2、受害者访问受感染的页面时,服务器将恶意脚本发送给浏览器。
                                3、浏览器执行脚本,导致攻击成功。

                反射型XSS

                        原理:

                                1、攻击者将恶意脚本通过URL参数或表单提交传递给服务器。
                                2、服务器在响应中直接反射这些数据,未经充分过滤。
                                3、受害者点击特制链接或提交表单后,浏览器执行恶意脚本。

                DOM型XSS

                        原理:

                                1、恶意脚本不通过服务器,而是直接操作客户端的DOM(文档对象模型)。
                                2、攻击者通过操纵页面上的JavaScript,注入和执行恶意代码。
                                3、浏览器执行恶意脚本时,修改页面内容或执行其他恶意行为。

        XSS漏洞危害        

                1、窃取敏感信息:

                        攻击者可以获取用户的会话Cookie、登录凭证和其他敏感信息。


                2、会话劫持:

                        攻击者可以冒充受害者,进行未授权的操作,访问受害者的账户。


                3、欺骗和钓鱼攻击:

                        注入的恶意脚本可以伪造网站内容,引导用户提供敏感信息或下载恶意软件。


                4、重定向和跨站请求伪造(CSRF):

                        恶意脚本可以将用户重定向到恶意网站,或利用用户的身份在其他网站上执行恶意操作。


                5、网站篡改:

                        攻击者可以修改网站内容,显示虚假信息或宣传内容。


                6、传播恶意软件:

                        注入的脚本可以引导用户下载和安装恶意软件,进一步感染系统。

二、常见的攻击流程

1、反射型XSS攻击流程                                               

2、存储型XSS攻击流程​​​​​​​

3、DOM型XSS攻击流程​​​​​​​

        构造恶意代码-->诱骗用户点击链接-->客户端处理输入-->修改DOM-->执行恶意脚本

三、防御措施

        1、验证和转义输入:对用户输入进行严格的验证和HTML转义。

        2、内容安全策略(CSP):限制页面中可以执行的脚本来源,防止执行未授权的脚本。

        3、避免直接操作DOM:使用安全的DOM操作方法,如textContent或innerText。

四、靶场演示

        Pikachu演示

                1、反射型xss(get)

                       条件限制:查看前端页码,发现文本框有长度限制                                                                                                             
                        构造payload 
<script>alert("hacking")</script>
                        在网页输入框输入URL(注意:这里也可以修改html代码中maxlength的值也能实现)

http://localhost/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert(%22hacking%22)%3C/script%3E&submit=submit

                2、反射型xss(post)

                        登录框 账户admin 密码 123456 登陆进去会发现与上一关一样的页面
                        输入我们的上一关payload 也能实现上一关的效果
                        这一关我们试着获取一下admin的cookie值
                        构造我们需要的payload
<script>alert(document.cookie)</script>
                        成功获取admin的cookie值                                                                                                       

                3、存储型xss

                        在留言板中输入上一关我们构造的payload 发现页面多了个删除选项                             

                接着用另一个浏览器打开皮卡出选中这一关会发现直接弹出了xss框  

                4、DOM型xss

                        进入这一关,在文本框随便输入一些内容,查看HTML代码的变化                     ​​​​​​​

                        这里我们可以利用href的特性构造一个特殊的payload

#' onclick="alert(document.cookie)">

                        接着点击what do you see?实现了弹出cookie值

                5、DOM型xss-x

                        这一关和上一关的区别是我们输入的内容会在URL里面呈现,查看HTML代码发现,和上一关差不多
                        构造payload
#' onclick="alert(document.cookie)">

                        同样也能弹出PHPSESSID值

                6、xss之盲打

                        分析页面,发现二个输入框 输入payload
                        构造payload
<script>alert(document.cookie)</script>

                      登陆后台查看 账户admin 密码 123456

                      http://localhost/pikachu/vul/xss/xssblind/admin_login.php

                      会发现成功弹出了xss框,并且弹了二次, 说明二个输入框都存在xss注入

                7、xss之过滤

                        在文本框中输入我们上一关的payload  发现页面没有回显,怀疑可能存在过滤
                        尝试一些简单的方法看能否绕过 比如大小写;
                        构造payload
<SCRIPT>alert(111)</SCRIPT>
                        成功弹框

                8、xss之htmlspecialchars

                        在文本框中输入上一关的payload发现页面没有任何变化,查看一些HTML代码
                        发现<a>标签和href属性都被编码了
                        构造如下payload
javascript:alert(111)
                         成功弹窗                                                                                                                                              

                9、xss之href输出

                        输入上一关的payload
javascript:alert(111)
                        成功弹窗

                10、xss之js输出

                        输入一个简单的payload试试水,发现页面没有变化,查看HTML代码                                       
                        接下来我们需要生成一个js语句
x'</script><script>alert('xss')</script>
                        成功弹窗
  • 66
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者利用这个漏洞向网站中注入恶意代码,并在用户浏览器上执行。这种攻击通常发生在存在输入输出的网页应用程序中。 XSS攻击主要分为三种类型: 1. 存储型XSS:攻击者将恶意代码存储在目标网站的数据库中,当其他用户访问该网站时,恶意代码被返回并在用户浏览器中执行。 2. 反射型XSS:攻击者构造一个包含恶意代码的URL,并将其发送给目标用户。用户点击链接后,恶意代码从URL中获取并在用户浏览器上执行。 3. DOM-based XSS:攻击者通过修改网页的DOM结构来执行恶意代码,不需要向服务器发送请求。这种类型的XSS攻击主要基于客户端脚本和DOM文档对象模型。 为了防止XSS攻击,开发人员可以采取以下几种措施: 1. 输入验证和过滤:对用户输入的数据进行验证和过滤,确保不允许包含恶意代码。 2. 输出编码:在将数据输出到网页上时,使用适当的编码方式(如HTML实体编码或JavaScript转义)来防止恶意代码的执行。 3. 使用安全的API:避免使用不安全的API,特别是将用户输入作为参数的API。例如,使用textContent替代innerHTML可以防止XSS攻击。 4. 设置HTTP头部:通过设置X-XSS-Protection和Content-Security-Policy头部,可以进一步加强网站的安全性。 请注意,这只是一些常见的防御措施,具体的应对措施还需要根据实际情况和开发框架来确定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值