XSS漏洞学习(非常详细),零基础入门到精通,看这一篇就够了
HTML概述
HTML:超文本标记语言,是一种用于创建网页的标准标记语言,可以使用HTML创建WEB 站点,HTML运行在浏览器上,由浏览器来解析。
HTML元素:HTML 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码。
常见元素





XSS概述
定义:XSS(Cross Site Scripting)攻击全称跨站脚本攻击,是为不和层叠样式表 (Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。
成因:XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植 入到提供给其它用户使用的页面中,而程序对输入和输出的控制不够严格,导致“精心构造” 的脚本输入后,再输到前端时被浏览器当作有效代码解析执行从而产生危害。当受害者访问 这些页面时,浏览器会解析并执行这些恶意代码。
XSS漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过其他用户本地 浏览器执行的,所以XSS漏洞关键就是寻找参数未过滤的输出函数。
Javascript概述
JS简介:JS即Javascript,是一种由LiveScript发展而来的脚本语言,主要用于解 决一些服务器的问题,比如Perl遗留的速度问题。当时服务端需要对数据进行验 证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。于是 Netscape的浏览器Navigator加入了Javascript,提供了数据验证的基本功能。
特点:具有交互性,能够包含更多活跃的元素,短小精悍。
Js标签:
XSS常见危害
- 网络钓鱼,盗取各类用户的账号,如机器登录帐号、用户网银帐号、各类管理员帐号。
- 窃取用户Cookie,获取用户隐私,或者利用用户身份进一步执行操作。
- 劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志等。
- 强制弹出广告页面,刷流量等。
- 进行恶意操作,例如任意篡改页面信息,删除文章等,传播跨站脚本蠕虫,网页挂马等。
- 进行基于大量的客户端攻击,如DDOS攻击。
- 结合其它漏洞,如CSRF漏洞,进一步渗透网站。
- 获取客户端信息,例如用户的浏览历史、真实IP、开放端口等。
- 控制受害者机器向其他网站发起攻击。
- 传播跨站脚本蠕虫等。
XSS检测方法
- 在目标站点上找到输入点,比如查询接口,留言板等
- 输入一组“特殊字符+唯一标识字符”,提交查看返回的源码,是否有做对应的处理
- 通过搜索定位到特征字符,结合特征字符前后语法确定是否可以构造执行js
- 提交构造的脚本代码,查看是否可以成功执行,如果成功执行则说明存在xss漏洞
XSS漏洞常见位置:反馈与浏览、富文本编辑器、各类标签插入和自定义、用户资料、 关键词、说明、文件上传等处
分类
XSS分为三种,存储型XSS,反射型XSS,DOM型XSS
危害程度存储型>DOM型>反射型
反射型XSS
反射型又称非持久型XSS,通过给别人发送带有恶意脚本代码参数的URL, 欺骗用户点击链接,当用户单击时触发,特有的恶意代码参数被HTML解析、执行, 这类跨站的代码通常不存储于服务端。
常见XSS点:网站的搜索栏、用户登录入口、输入表单等地方,漏洞点简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输岀,导致输岀的数据中存在可被浏览器执行的代码数据。
特点:非持久化,经过后端,但不存入数据库。
XSS典型,通过get来接收前端输入的input参数,然后通过echo输出到html页面

用户输入,即可弹窗


攻击流程
攻击者寻找具有反射型XSS漏洞的网站。
攻击者构造恶意链接,并将该链接发给用户(GET请求)。
安全意识薄弱的用户点击该链接。
服务器返回HTML文档,此时该文档已经包含了攻击者插入的恶意代码。
用户客户端执行恶意内容,XSS攻击就发生了。
存储型XSS
存储型又称持久型XSS,比反射型XSS更具有威胁性。恶意代码会存储在服务器中,如在 个人信息或发表文章等地方,加入恶意代码,如果没有过滤或过滤不严,那么这些代码将储存到服务 器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫、大量盗 窃cookie等。
常见XSS点:论坛、博客、留言板、评论、日志等交互处,这些地方有个明显的特征,就是功能页面 几乎大多数用户都能轻易看到。
区别:存储型XSS和反射型XSS利用方式完全一样。判断存储型XSS只需要重新打开当前页面,若弹 窗还是出现,说明恶意语句被存储在服务器上,即可证明。
如果在仅有当前用户能查看,其他用户无法查看的页面,比如网站后台,私密空间等 处插入XSS,那么这类XSS无法攻击其他用户,危害性更低或者说几乎没有危害,称 为self-xss。



在可输入交互处输入,当有人访问此页面就会对XSS语句进行解析并执行


攻击流程
- 攻击者提交了一条包含XSS代码的留言到数据库。
- 当普通用户查询留言时,那些留言的内容会从服务器解析之后加载出来。
- 浏览器发现有XSS代码,就当做正常的HTML和JS解析执行。
- 除了触发方式不同,所有的内容与反射型完全一样。
DOM型XSS
DOM:文档对象模型(Document Object Model)的缩写。它是HTML文档的对象表示,同 时也是外部内容(例如 JavaScript)与HTML元素之间的接口,使用DOM能够使程序和脚 本能够动态访问和更新文档的内容、结构和样式。
DOM型XSS:基于DoM文档对象的一种漏洞,并且DOM型XSS是基于JS代码的,并不需要 与服务器进行交互。其通过修改页面DOM节点数据信息而形成的ⅩSS跨站脚本攻击。不同 于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的 Javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。
特点:
- 不经过后端服务器。
- 不会被WAF等防御设备检测拦截。
- DOM型XSS是通过url传入参数去控制触发的也属于反射型XSS。
攻击方式
用户请求一个经过专门设计的URL,它由攻击者提供,而且其中包含XSS 代码。服务器的响应不会以任何形式包含攻击者的脚本,当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致XSS漏洞发生。


攻击流程
- 攻击者寻找具有漏洞的网站。
- 攻击者给用户发了一个带有恶意字符串的链接。
- 用户点击了该链接。
- 服务器返回HTML文档,但是该文档此时不包含恶意字符串。
- 客户端执行了该HTML文档里的脚本,然后把恶意内容植入了页面。
- 客服端执行了植入的恶意内容,XSS攻击就发生了。
XSS技巧
文件上传XSS
有些网站当文件上传成功后,文件名会被保存到网站上显示,成为网页的一部分,这也会导致存储型XSS。比如上传成功后,显示文件:xxx上传成功,修改文件名为xss的 payload即可触发,但是有些时候,需要注意与网页自身的标签闭合后才能触发:
"><img src=x onerror=alert(document.domain)>.gif
文件名说明:知道windows与linux文件命名有所差别,windows下文件名不能包含 / \ : * ? " < > | 等字符,而linux下是可以出现除 / 字符之外的所有字符,而且在Linux系统中可以使 用长文件或目录名,直接利用这个特性,在上传点没有对文件名进行检测和处理的情况下就 可以实现XSS攻击。
其他HTML标签
直接嵌入html:
<script>alert('xss')</script>
元素标签事件:
<body οnlοad=alert('XSS')>
图片视频标签:
<audio/video/img src="javascript:alert('XSS');">
其他标签:
<iframe>、<div>、<link>等
HTML标签属性支持伪协议
应用场景:标签的属性支持javascript:[code]为协议
语句:
对应防御:过滤javascript关键字
HTML实体编码
<IMG SRC=javascript:alert("XSS")>
利用空字符绕过关键字检测
常用字符:[空格]、[回车]、[tab]、[键位符]、[%00]等
<iframe src=java script(1)> <scri\x00pt>alert(1);</scri%00pt>
<s%00c%00r%00i%00p%00t>alert(1)</s%00c%00r%00%00ip%00t>
备注:javascript语句通常以分号结尾,如果语句后面没有分号,但是有换行符时,javascript引擎会 自动判断该语句是否结束。如果到换行处判断并不是一个完整语句,那么javascript会继续处理后面的 内容,直到遇到一个分号或发现语句完整为止。
利用事件
事件函数:
- onclick 鼠标单击
- onchange 内容发生改变
- onerror 报错时
- onmousemove 鼠标路过
- onload 页面加载
- onmouseover 鼠标悬停
- onmouseout 鼠标移出
<img src="x" οnerrοr=alert(1)> // 图片等未找到时
" οnfοcus=alert(1) autofocus; // 焦点移动到当前标签时
" > <body οnlοad=alert(1)> // 加载完成时
<div onmousemove="alert('xss')"> // 当用户鼠标移动到div上时就会触发代码
<div onclick ="alert('xss')"> // 鼠标点击时
- 限制引号 :
- 简单绕过WAF: <isindex type=image sec=1 οnerrοr=alert(xss)>
Alert混淆绕过过滤器:
top“al”+“ert”
al\u0065rt(1)
[ ’ ]、[ " ]、[ ( ]、[ ) ] 如果这四个字符被过滤的情况,那么就需要使用其他字符去 替换或者编码方式去绕过。 编码绕过:尝试对关键字编码,不过直接显示编码是不会被浏览器执行的,但是可 以用另一个语句eval()实现,eval()会将编码过的语句解码后再执行。
HTML字符实体类型转换:HTML某些属性值支持html十进制、十六进制编码表示。
JavaScript:支持 Unicode 、十进制、十六进制、八进制、HTML
XSS防护
- 使用XSS Filter:可以认为是一份成熟过滤关键字代码,作用是过滤用户提交的有害信息, 从而达到防范xss和sql等攻击的效果。
- 定制过滤策略:业内防御跨站脚本攻击的方式一般有两种:input Filtering 和 Output Filtering。
- 输出编码:HTML编码在防止XSS攻击上起很大的作用,它主要是用对应的HTML实体替代字 面量字符,这样做可以确保浏览器安全处理可能存在的恶意字符,将其当作HTML文档的内容 而非结构加以处理。

防范基于DOM的XSS攻击要注意两点:
- 避免客户端文档重写、重定向或其他敏感操作,避免使用客户端数据,这些操作尽量在服 务端使用动态页面来实现。
- 分析和强化客户端 Javascript代码,尤其是一些受到用户影响的DOM对象。另外,要注意 能直接修改DOM和创建HTML文件的相关函数和方法。此外,在把变量输出到页面时要做 好相关的编码转义工作。
网络安全学习资源分享:
网络安全学习路线&学习资源

网络安全的知识多而杂,怎么科学合理安排?
下面给大家总结了一套适用于网安零基础的学习路线,应届生和转行人员都适用,学完保底6k!就算你底子差,如果能趁着网安良好的发展势头不断学习,日后跳槽大厂、拿到百万年薪也不是不可能!
初级网工
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k
到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?
7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.
零基础入门,建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习; 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime; ·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完; ·用Python编写漏洞的exp,然后写一个简单的网络爬虫; ·PHP基本语法学习并书写一个简单的博客系统; 熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选); ·了解Bootstrap的布局或者CSS。
8、超级网工
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,贴一个大概的路线。感兴趣的童鞋可以研究一下,不懂得地方可以【点这里】加我耗油,跟我学习交流一下。

网络安全工程师企业级学习路线
如图片过大被平台压缩导致看不清的话,可以【点这里】加我耗油发给你,大家也可以一起学习交流一下。

一些我自己买的、其他平台白嫖不到的视频教程:

需要的话可以扫描下方卡片加我耗油发给你(都是无偿分享的),大家也可以一起学习交流一下。

结语
网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

1万+

被折叠的 条评论
为什么被折叠?



