🍬 博主介绍
👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
渗透方向的岗位,涉及到的知识点是很广泛的。
这里我总结了整个一系列的面试题,可能没有覆盖到全部的知识面,但是应该是比较全面的,本文主讲解web漏洞XSS注入方向的面试题。
如果整个系列的问题搞懂了大部分,那找个网安方向的工作基本上没什么问题了。
当然了,可能也不是说这些问题都会被问到,但这些题目都是和网安岗位相契合的。
[ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(一)SQL注入相关面试题
XSS攻击通常是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、 LiveScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
简单来说:就是程序对输入输出没有做合适的处理,导致攻击者构造的字符输出到前端时被浏览器执行当作有效代码解析执行从而产生危害
反射型XSS也被称为非持久性XSS,当用户访问一个带有XSS代码的HTML请求时,服务器端接收数据后处理,然后把带有XSS的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,就造成XSS漏洞,这个过程就像一次反射,所以叫反射型XSS。
用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。需要诱使用户“点击”一个恶意链接,才能攻击成功
存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本漏洞,当攻击者提交一段 XSS代码后,被服务端接收并存储,当攻击者或用户再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击,这是存储型XSS。
存储型 XSS 会把用户输入的数据“存储”在服务器端。这种 XSS 具有很强的稳定性。用户点击存在存储型XSS且被嵌入xss代码的页面时,恶意xss代码就会执行。
DOM 型的 XSS 注入与反射型原理类似,只不过 DOM 型的 XSS 注入不需要经过后端代码处理,而是在前端 JavaScript 调用 DOM 元素时可能产生的漏洞,可能触发 DOM 型 XSS 的 JavaScript 代码。
通过修改页面的 DOM 节点形成的 XSS,称之为 DOM Based XSS。
总体来说XSS 危害最大。因为他存储在服务器端,所以不需要我们和被攻击者有任何接触,只要被攻击者访问了该页面就会遭受攻击。而反射型和 DOM 型的 XSS 则需要我们去诱使用户点击我们构造的恶意的URL,需要我们和用户有直接或者间接的接触,比如利用社会工程学或者利用在其他网页挂马的方式。
1、流量劫持
2、获取用户cookie信息,盗取账号
3、篡改、删除页面信息(钓鱼)
4、配合CSRF攻击,实施进一步攻击
①发送带有XSS恶意脚本的链接
②用户点击了恶意链接,访问了目标服务器
③网站将XSS同正常页面返回到用户浏览器
④用户浏览器解析了网页中的XSS恶意代码,向恶意服务器发起请求
⑤黑客从自己搭建的恶意服务器中获取用户提交的信息

①黑客在目标服务器上构造XSS恶意脚本,保存在数据库中
②用户在网站登录状态下,访间了目标服务器,查看了存在恶意脚本的页面
③网站将XSS同正常页面返回到用户浏览器
④用户浏览器解析了网页中的XSS恶意代码,向恶意服务器发起请求
⑤黑客从自己搭建的恶意服务器中获取用户提交的信息

1、反射型XSS是通过诱导用户点击我们构造好的恶意payload才会触发的 XSS。每次请求带 payload 的链接时页面应该是会带有特定的畸形数据的;
DOM型是通过修改页面的DOM 节点形成的 XSS,通过 js 代码进行 dom 操作产生的 XSS,所以在请求的响应中我们甚至不一定会得到相应的畸形数据。
2、反射型XSS需要联网,而DOM型不需要。
3、反射型XSS在搜索框啊,或者是页面跳转啊这些地方;DOM是在DOM位置上,不取决于输入环境上
反射型XSS的被攻击对象一般是攻击者去寻找的
存储型XSS是广撒网的方式或者指定的方式,危害性更大,范围更广
DOM型XSS的被攻击对象其实和反射型XSS被攻击对象差不多,就是给攻击对象放送URL。
反射型XSS的脚本被解析的地方是浏览器
存储型XSS的脚本被解析的地方是服务器
DOM型XSS也是浏览器,但是反射型XSS需要联网,而DOM型不需要
反射型XSS是一次性
存储型XSS是存储在服务器上,只要服务器不挂机或者是被干掉,就一直会有
允许输入点的不同(这是DOM型与其他两种的区别)
反射型XSS在搜索框啊,或者是页面跳转啊这些地方
存储型XSS一般是留言,或者用户存储的地方
DOM是在DOM位置上,不取决于输入环境上
1、找到输入点(查询接口、留言板等)
2、输入一组 特殊字符+唯一标识符 查看返回的源码 是否做出了相应的处理
3、通过搜索定位到唯一字符 (构造闭合)
4、构造脚本代码 (绕过) 查看是否执行成功 如果成功 存在xss漏洞
找到类似 document.write、innerHTML 赋值、outterHTML 赋值、window.location操作、写 javascript:后内容、eval、setTimeout 、setInterval 等直接执行之类的函数点。找到其变量,回溯变量来源观察是否可控,是否经过安全函数。
XSS 攻击有两大要素: 1. 攻击者提交恶意代码。 2. 浏览器执行恶意代码。所以需要严格控制好输入和输出。
不要在允许位置插入不可信数据
在向HTML URL属性插入不可信数据前,进行URL解码。
在向HTML元素内容、属性、属性值插入不可信数据前对HTML解码。
在向HTML JavaScript Data Values插入不可信数据前,进行JavaScript解码。
前端渲染把代码和数据分隔开。
拼接HTML时对其进行转义,需要采用合适的转义库,对 HTML 模板各处插入点进行充分的转义。对于 HTML 转义通常只有一个规则,就是把 & < > " ’ / 这几个字符转义掉,确 实能起到一定的 XSS 防护作用,但并不完善。
除此之外,还有做 HTTPOnly 对 Cookie 劫持做限制。
1、用户访问存在XSS页面,触发脚本
2、xss页面返回“带恶意JS(document.location)" 的页面
3、用户PC执行恶意JS脚本, 发送窃取数据(cookies)
4、攻击者伪造用户登录,造成破坏

通过这个document.location实例做一个重定向(一旦他访问这个页面 javascript 就会执行 就会去访问 这个url 访问的时候就把cookie也带过去了)
XSS蠕虫是指一种具有自我传播能力的XSS攻击,杀伤力很大。引发XSS蠕虫的条件比较高,需要在用户之间发生交互行为的页面,这样才能形成有效的传播。一般要同时结合反射型XSS和存储型XSS。
XSS蠕虫基于社会工程学诱使用户点击访问其发出的恶意邀请链接。社交网络用户接收到好友发出的相关链接时,往往是不加分辨地直接点击访问。活跃节点会比非活跃节点收到更多的蠕虫邀请链接,一旦受到感染,也会发送更多的蠕虫邀请链接。
XSS蠕虫传播过程可总结为以下步骤:
(1)攻击者在Web页面植入恶意HTML代码。
(2)发送伪装的邀请链接。
(3)用户点击链接被感染。
(4)向新感染用户的好友发送伪装的邀请链接。
传统蠕虫的攻击与传播发生在用户节点之间,大规模的爆发极易引发网络阻塞。XSS蠕虫的攻击与传播从网络逻辑拓扑来看虽然是在用户节点之间,但从底层物理拓扑来看却是在用户节点与网站节点之间,资源消耗基本由功能强大的网站节点承担,蠕虫爆发不会引发网络阻塞和崩溃。
传统蠕虫多采用漏洞攻击的方法,利用程序缓冲区溢出进行传播。XSS蠕虫则采用利用社会工程学诱惑用户及跨站点脚本缺陷等多种方式。
传统蠕虫在指定的IPv4地址空间里寻找有漏洞的易感染节点。XSS蠕虫则专注于社交网络。
1、大小写混合绕过
2、拼凑(双写)
pt>alert(111) pt>
3、使用一些注释进行干扰
pt>alert(111) pt>
4、空格绕过
5、Tab绕过
6、回车绕过
![]()
7、除此之外,还有伪协议绕过,事件绕过等等。
编码后在输入,后端可能过滤了某些字符串,但是没有过滤他的一些编码格式。编码方式可以是JS编码,HTML实体编码,base64编码,URL编码等等。
XSS钓鱼是存在的,在实际的攻击场景当中,xss钓鱼的场景也是非常多的,可以内嵌一些钓鱼页面或者钓鱼链接。这里我简单讲一讲存在存储型XSS的页面如何利用basic认证实现钓鱼:
1、已知存在一个存在存储型xss漏洞的页面 A 和攻击者后台 B。
2、攻击这个可以利用该漏洞在 A 页面中内嵌一个请求(javascript或者其他);
3、这个请求是向远端的服务器(攻击者后台)发起请求;
4、攻击者后台返回一个要求他进行bacis认证的头部,在用户界面上就会弹出一个要进行身份认证的提示框;
5、用户一旦他输入了账号密码,这个账号密码就会发送到攻击者后台 B。
CSRF和XSS都是客户端攻击,它们滥用同源策略,利用web应用程序和不知情的用户之间的信任关系。但是,XSS 和 CSRF 攻击之间存在一些根本差异,包括:
1、在XSS攻击中,恶意代码存储在站点中;而在CSRF攻击中,恶意代码存储在受害用户访问的第三方站点中。
2、XSS攻击遵循双向攻击模式,允许攻击者执行恶意脚本、访问响应,并将后续敏感数据发送到攻击者选择的目的地;CSRF是一种单向攻击机制,这意味着攻击者只能发起HTTP请求,但不能检索已发起请求的响应。
3、在XSS攻击中,只要用户登录,就可以存储和交付有效载荷;而CSRF攻击则需要,CSRF攻击要求经过身份验证的用户处于活动会话中。
4、XSS攻击提供执行恶意脚本来执行攻击者所选择的任何活动,从而扩大了攻击的范围;相反,CSRF攻击的范围有限,仅限于用户可以执行的操作,例如点击恶意链接或访问黑客的网站。
XSS 是一种客户端攻击,攻击者将恶意脚本部署到 Web 服务器中,由毫无戒心的用户浏览器执行;而Javascript 注入是一种服务器端攻击,黑客将恶意脚本发送到服务器,由解释器执行,就好像它是源代码的一部分一样。
xss盲打就是说我们输入的字符并不会在前端输出,只有他的管理员才能看到我们输入的内容,前端用户是看不到的。如果说管理员登陆后台之后 后台界面会把我们输入的内容进行输出的话,就意味着后台的管理人员会被x到。如果真的会被x到,那么这种场景的xss就叫xss的盲打
一个域名地址由 协议、域名、端口、请求资源地址 等部分组成。同源需要两个 URL 的协议、域名和端口都相同。