Web攻防基础-教案17_第1页
Web攻防基础-教案17_第2页
Web攻防基础-教案17_第3页
Web攻防基础-教案17_第4页
Web攻防基础-教案17_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《网络安全技术实践教程》教案授课单位:授课时间:授课班级:授课教师:年月日教案17(第17号/17号)课程名称网络安全授课日期、节次班级课堂类型理论+实践地点章节(任务)名称任务7.5请求伪造漏洞任务7.6XXE漏洞教学目标知识目标1.掌握CSRF攻击原理、SSRF攻击原理。2.掌握XXEWeb实体注入原理。能力目标1.能够构造恶意链接,利用CSRF漏洞进行非法操作。2.能够构造恶意XML文档,利用DTD引入外部实体,实现本地文件读取等操作。素质目标1.培养学生精益求精的工匠精神。2.培养学生树立牢固的法治观念,提升网络安全意识。学情分析授课对象:计算机网络技术专业学生,包括中职与普高混合班。学生特点:计算机网络技术专业学生,基础知识存在差异,需针对性讲解与实践操作结合。学习习惯:偏爱实践性强的课程,理论学习兴趣较低。乐于通过案例和互动式教学理解知识点。重难点分析教学重点CSRF漏洞的利用与防范。SSRF漏洞的攻击示例。教学难点1.SSRF攻击防范。2.XXE漏洞示例。信息化应用方法通过课件、视频、案例分析、互动提问等多种信息化方式,借助学习通平台发布学习资源和任务,学生自主学习并完成任务。课程思政元素1.网络安全事关国家安全,培养学生的家国情怀与责任感。2.树立服务意识,塑造职业精神,使学生形成运用所学专业知识为社会贡献的责任感。3.锻炼学生实事求是的工作态度,培养学生严谨细致的工作作风、精益求精的工匠精神。教学实施过程课前:平台发布Web攻防基础任务3任务4学习任务,学生预习。课中:导入新课小林发现校园某个Web网站存在请求伪造漏洞风险,可以利用受害者尚未失效的身份认证信息,在受害人不知情的情况下以受害者的身份向服务器发送请求,从而完成非法操作。小林经过检查,虽然请求伪造造成的影响相对较小,属于低风险漏洞,但渗透测试时也应该对其进行仔细检测,并提出完善的防范建议。任务五知识点讲解1.CSRF漏洞的概念跨站请求伪造(Cross-SiteRequestForgery,CSRF)是指攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账等等,造成的问题包括个人隐私泄露以及财产安全。2.CSRF的原理图7-34简单阐述了CSRF攻击的思想。图7-34CSRF攻击过程CSRF攻击原理及过程如下。(1)用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A。(2)在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A。(3)用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B。(4)网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A。(5)浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。3.SSRF漏洞的概念及形成原因服务器端请求伪造(Server-SideRequestForgery,SSRF)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。例如,从指定URL地址获取网页文本内容,加载指定地址的图片、文档等。4.SSRF攻击方式SSRF(Server-SideRequestForgery)攻击方式主要包括:(1)可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。(2)攻击运行在内网或本地的应用程序(如溢出)。(3)对内网Web应用进行指纹识别,通过访问默认文件实现。(4)攻击内外网的Web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等)。(5)利用file协议读取本地文件等。5.SSRF漏洞点挖掘寻找SSRF漏洞的方法主要包括:(1)能够对外发起网络请求的地方,就可能存在SSRF漏洞;(2)从远程服务器请求资源(UploadfromURL,Import&ExportRSSfeed);(3)数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB);(4)Webmail收取其他邮箱邮件(POP3/IMAP/SMTP);(5)文件处理,编码处理,属性信息处理(ffpmg,ImageMaic,DOCX,PDF,XML处理)。6.SSRF攻击防范SSRF攻击者可以利用它诱使服务器端应用程序去访问或查询内部网络资源,从而获取敏感数据、执行未授权操作或进行其他恶意活动。可以采取以下几种策略进行防范。(1)输入验证与过滤。对所有用户可控的URL输入进行严格的验证和过滤,禁止构造指向内部网络地址的请求。可以使用黑名单过滤掉常见的内部IP地址段、localhost以及私有IP地址(如/8,/12,/16)。(2)白名单策略。实施URL白名单制度,只允许应用程序向预先定义好的外部域名或IP地址发送请求。这种方法比黑名单更为安全,因为它从根本上限制了可访问的目标范围。(3)禁用或限制内部网络访问。在设计应用时,应避免让应用直接向内部网络发起请求。如果必须访问内部资源,应通过代理服务或API网关进行,且需严格控制访问权限。(4)使用外部代理服务。对于需要访问外部资源的场景,可以使用专门的代理服务或库来发起请求,这样可以隔离内部网络,防止直接暴露给外部输入。(5)资源访问限制与隔离。根据应用程序的实际需求,为不同的服务或功能分配最低必要的网络访问权限。使用网络隔离和防火墙规则来限制应用程序对内部资源的访问。(6)日志监控与异常检测。建立全面的日志记录机制,特别是对于对外部服务的请求,应详细记录请求URL、源IP、时间戳等信息。结合异常检测系统,及时发现并响应不正常的请求模式。任务五实施步骤1.CSRF漏洞的利用与防范(1)登录DVWA系统,进入CSRF页面在DVWA系统中选择DVWASecurity的“low”级别,然后选择“CSRF”选线,出现如图7-35所示的工作界面。图7-35DVWA系统CSRF工作界面在该界面下,可以修改admin用户的密码。(2)CSRF页面功能分析该页面用于修改登录用户的密码。在Newpassword和Confirmnewpassword输入框中,分别输入123456,单击“Change”按钮,会提示“PasswordChanged”,并且在URL中显70/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#(根据实际搭建环境输入URL地址),如图7-36所示,密码变成了“123456”。很明显,这就是修改密码的链接。图7-36DVWA系统CSRF界面修改密码(3)利用CSRF漏洞进行攻击此时,在另外一个标签页的URL中输入“70/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#”(根据实际搭建环境输入URL地址),如图7-37所示,可以看到,直接跳转到了密码修改成功的页面,密码相应变成password。在此步骤中,我们就是利用了系统存在的CSRF漏洞,利用尚未失效的身份认证信息,以受害者的身份向服务器发送请求,从而完成修改密码的非法操作。图7-37利用CSRF漏洞攻击结果(4)分析源代码单击界面右下角的“ViewSource”按钮,就会看到如下源代码。?php?phpif(

isset(

$_GET[

'Change'

]

)

)

{//

Get

input$pass_new

=

$_GET[

'password_new'

];$pass_conf

=

$_GET[

'password_conf'

];//

Do

the

passwords

match?if(

$pass_new

==

$pass_conf

)

{//

They

do!$pass_new

=

((isset($GLOBALS["___mysqli_ston"])

&&

is_object($GLOBALS["___mysqli_ston"]))

?

mysqli_real_escape_string($GLOBALS["___mysqli_ston"],

$pass_new

)

:

((trigger_error("[MySQLConverterToo]

Fix

the

mysql_escape_string()

call!

This

code

does

not

work.",

E_USER_ERROR))

?

""

:

""));$pass_new

=

md5(

$pass_new

);//

Update

the

database$current_user

=

dvwaCurrentUser();$insert

=

"UPDATE

`users`

SET

password

=

'$pass_new'

WHERE

user

=

'"

.

$current_user

.

"';";$result

=

mysqli_query($GLOBALS["___mysqli_ston"],

$insert

)

or

die(

'<pre>'

.

((is_object($GLOBALS["___mysqli_ston"]))

?

mysqli_error($GLOBALS["___mysqli_ston"])

:

(($___mysqli_res

=

mysqli_connect_error())

?

$___mysqli_res

:

false))

.

'</pre>'

);//

Feedback

for

the

userecho

"<pre>Password

Changed.</pre>";}else

{//

Issue

with

passwords

matchingecho

"<pre>Passwords

did

not

match.</pre>";}((is_null($___mysqli_res

=

mysqli_close($GLOBALS["___mysqli_ston"])))

?

false

:

$___mysqli_res);}?>从源代码可以看出,这里只是对用户输入的两个密码进行判断,看是否相等。不相等就提示密码不匹配;相等的话,查看有没有设置数据库连接的全局变量和其是否为一个对象。如果是,则用mysqli_real_escape_string()函数去转义一些字符,如果不是,则输出错误。是同一个对象的话,再用md5进行加密,再更新数据库。几乎没有做任何防范,因此就可轻易地进行CSRF攻击。(5)绕过CSRF漏洞的防范措施①在DVWASecurity当中选择“medium”选项,并提交,然后选择“CSRF”选项。通过查看源代码可以看出,其必low级别的源代码增加了对用户请求头中的Referer参数进行验证,代码如下。if(

stripos(

$_SERVER[

'HTTP_REFERER'

]

,$_SERVER[

'SERVER_NAME'

])

!==

false

)即用户的请求头中的Referer参数必须包含服务器的名字SERVER_NAME。if(

stripos(

$_SERVER[

'HTTP_REFERER'

]

,$_SERVER[

'SERVER_NAME'

])

!==

false

)此时,在另外一个标签页的URL中输入:70/vulnerabilities/csrf/?password_new=password&password_conf=&Change=Change#70/vulnerabilities/csrf/?password_new=password&password_conf=&Change=Change#系统会报错,如图7-38所示,即没有定义HttpReferer字段。图7-38系统报错,没有定义HttpReferer字段采用此种方法能防范直接点击链接进行CSRF漏洞利用的情形,但可通过BurpSuite修改HTTP头绕过。②利用BurpSuite修改HTTP头绕过Referer字段限制。在正常页面中的Newpassword和Confirmnewpassword输入框中,分别输入password,在URL中会出现如下内容。70/vulnerabilities/csrf/?password_new=password&password_conf=&Change=Change#70/vulnerabilities/csrf/?password_new=password&password_conf=&Change=Change#此时,通过BurpSuite抓包分析,就会在HTTP头中看到Referer关键字引导的内容,如图7-39所示。图7-39通过BurpSuite修改请求数据报文③构造攻击页面绕过,在服务器的DVWA目录下建立70.html文件(IP地址为攻击者服务器地址),内容如下。<html><html><head></head><body><imgsrc="70/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#"border="0"style="display:none;"/><h1>filenotfound</h1></body></html>在浏览器中访问70/70.html,同样能成功修改密码。(注:此html文件放在攻击者服务器中,名字就是具有CSRF漏洞的IP地址.html,html文件中img属性的src的IP地址也要指向具有CSRF漏洞的IP地址。)(6)CSRF漏洞的防范措施与注意事项在DVWASecurity当中选择“high”选项,并提交。然后选择“CSRF”选项,因为High级别的代码中加入了Token机制,用户每次访问该密码页面时,服务器会返回一个随机的Token。向服务器发起请求时,需要提交Token参数,而服务器在收到请求时,会优先检查Token,只有Token正确,才会处理客户端的请求。Token机制是防范CSRF的有效机制,而要绕过这一防范机制,需要获取Token,由于同源策略的有限,需要注入文件到存在CSRF文件的服务器上才能获取Token,即仅利用CSRF漏洞是难以实现的,因此利用Token机制安全有效。2.SSRF漏洞的攻击示例(1)登录Pikachu漏洞平台,进入SSRF页面在URL地址中输入/pkmaster/vul/ssrf/ssrf_curl.php,出现如图7-40所示界面。图7-40SSRF链接图(一)单击“累了吧,来读一首诗吧”文字链接,请求链接变为/pkmaster/vul/ssrf/ssrf_curl.php?url=/pkmaster/vul/ssrf/ssrf_info/info1.php,如图7-41所示。可以发现该请求发送了一个url参数,参数的值为url=/pkmaster/vul/ssrf/ssrf_info/info1.php。图7-41SSRF链接图(二)如果服务器后台代码对参数URL过滤不严格将导致黑客可通过该参数进行攻击。下面给出常见的SSRF漏洞的攻击方式。(2)端口探测用户可以构造内网中服务器的端口情况,本案例使用本机的MYSQL数据库探测进行演示,构造URL为/pkmaster/vul/ssrf/ssrf_curl.php?url=:3306探测结果如图7-42所示,通过探测可以发现存在MYSQL数据库,且版本号为5.7.26。如果访问的端口长时间没有响应,则说明该系统的指定端口不存在。图7-42SSRF探测MYSQL(3)访问其他网站通过SSRF漏洞可以访问很多其他网站,例如我们传入一个百度地址来进行测试,在URL中输入地址/pkmaster/vul/ssrf/ssrf_curl.php?url=会直接把百度首页的数据显示出来,这个流程不是我们浏览器直接去请求百度,而是我们的浏览器把这个参数传到了后端,后端的服务器通过curl_exec,用这个方法去请求百度,然后把百度返回的数据又返回到了前端,显示结果如图7-43所示。图7-43SSRF访问百度页面(4)读取文件通过SSRF漏洞可以读取文件,但是该文件通常使用file伪协议完成,构造的攻击链接为/pkmaster/vul/ssrf/ssrf_curl.php?url=file://D:\1.txt(在D盘创建1.txt文件),访问结果如图7-44所示,成功读取了D盘下的1.txt文件内容。图7-44SSRF读取文件(5)执行PHP文件通过SSRF漏洞可以执行PHP文件,执行的PHP文件可以与命令执行漏洞或一句话木马连用,从而执行Webshell等攻击代码并控制服务器。这里给出构造的攻击链接为/pkmaster/vul/ssrf/ssrf_curl.php?url=/1.php?cmd=whoami,访问结果如图7-45所示,成功执行了网站根路径下的1.php文件,并通过传递参数cmd执行了whoami命令,当前用户为administrator。图7-45SSRF执行PHP文件其中1.php文件代码如下,该代码存在命令执行漏洞。<?php<?php$arg=$_GET['cmd'];if($arg){system($arg);}?>(6)对上述情况进行白盒审计分析上述代码使用curl_*()函数进行网络数据设置并发送请求,传递HTTP的请求参数URL加载网络资源。<?php$url=$_GET['url'];<?php$url=$_GET['url'];$ch=curl_init($url);//根据参数url初始化一个url会话,返回一个CURL句柄curl_setopt($ch,CURLOPT_HEADER,0);//设置发送请求的HTTP头数组curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//将curl_exec()获取的信息以文件流的形式返回,而不直接输出$result=curl_exec($ch);//执行请求curl_close($ch);//关闭请求echo($result);//打印请求结果?>1.XXE概述XXE-"xmlexternalentityinjection"即"xml外部实体注入漏洞"。概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。xml是一种可拓展的标记语言,可以用来存储数据,例如:我们经常看到一些.xml的文件;它还可以用来传输数据,我们可以直接将数据以xml的格式放在请求当中,发给服务器。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素三部分,具体介绍如下。第一部分:XML声明部分<?xmlversion="1.0"?>第二部分:文档类型定义DTD<?xmlversion="1.0"?><!DOCTYPEnote[<!--定义此文档是note类型的文档--><!DOCTYPEnote[<!--定义此文档是note类型的文档--><!ENTITYentity-nameSYSTEM"URI/URL"><!--外部实体声明-->]><note><to>Dave</to><note><to>Dave</to><from>Tom</from><head>Reminder</head><body>Youareagoodman</body></note>DTD(DocumentTypeDefinition,文档类型定义)用来为XML文档定义语法约束,可以是内部声明或外部引用。1.DTD内部文档声明当DTD存在于XML源文件中,由以下格式进行包裹<!DOCTYPE根元素[元素声明]>,然后XML文件对于DTD的内容进行引用。<?xmlversion="1.0"?><!DOCTYPEnote[<?xmlversion="1.0"?><!DOCTYPEnote[<!ELEMENTnote(to,from,heading,body)><!ELEMENTto(#PCDATA)><!ELEMENTfrom(#PCDATA)><!ELEMENTheading(#PCDATA)><!ELEMENTbody(#PCDATA)>]><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body></note>从XML文件外部引入DTD:<!DOCTYPE根元素SYSTEM"外部DTD的URI"><!DOCTYPE根元素SYSTEM"外部DTD的URI"><?xmlversion="1.0"?><!DOCTYPEnoteSYSTEM"note.dtd"><?xmlversion="1.0"?><!DOCTYPEnoteSYSTEM"note.dtd"><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body></note><!ELEMENTnote(to,from,heading,body)><!ELEMENTnote(to,from,heading,body)><!ELEMENTto(#PCDATA)><!ELEMENTfrom(#PCDATA)><!ELEMENTheading(#PCDATA)><!ELEMENTbody(#PCDATA)>3.XXE漏洞的攻击原理XXE(XMLExternalEntity)漏洞的根本原因是对外部实体引用的不正确处理,导致攻击者可以利用该漏洞读取文件系统中敏感的数据、执行远程请求等操作。XXE漏洞的攻击原理如下:(1)攻击者构造恶意的XML数据,其中包含对外部实体的引用。(2)XML解析器无法正确处理这些外部实体引用,导致攻击者可以读取任意文件、进行SSRF攻击等。(3)攻击者通过修改XML数据,获取敏感信息或进行远程请求。4.XXE漏洞防范XXE攻击是一种利用XML解析器的漏洞来读取本地文件或执行远程的攻击方式,为了防范XXE攻击,可以采取以下措施:(1)禁用外部实体加载。在使用XML解析器时,通过编程设置禁止加载外部实体。(2)使用安全的解析器模式。选择只解析纯数据的解析器,避免使用支持DTD和外部实体的解析器,除非绝对必要。(3)限制XML输入。对用户提供的XML输入进行严格的验证和清理,可以使用正则表达式过滤潜在的危险标签或实体声明。(4)最小权限原则。运行处理XML解析的应用程序或服务时,使用最低必要的系统权限,减少攻击者一旦得逞能造成的损害。任务六任务实施步骤1.XXE漏洞示例(1)登录平台,进入XXE页面在URL地址中输入/pkmaster/vul/xxe/xxe_1.php,如图7-46所示界面。图7-46XXE链接图打开pikachu的XXE,并查看后端代码,我们可以看到它是通过post请求来获取到前端的xml数据,然后直接给simplexml_load_string()函数进行解析,然后将解析的数据再返回到前端。$html='';//考虑到目前很多版本里面libxml的版本都>=2.9.0了,所以这里添加了LIBXML_NOENT参数开启了外部实体解析if(isset($_POST['submit'])and$_POST['xml']!=null){$html='';//考虑到目前很多版本里面libxml的版本都>=2.9.0了,所以这里添加了LIBXML_NOENT参数开启了外部实体解析if(isset($_POST['submit'])and$_POST['xml']!=null){$xml=$_POST['xml'];//$xml=$test;$data=@simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOENT);if($data){$html.="<pre>{$data}</pre>";}else{$html.="<p>XML声明、DTD文档类型定义、文档元素这些都搞懂了吗?</p>";}}在图7-46界面输入框中输入测试,并单击“提交”按钮,测试代码如下所示,测试结果如图7-47所示,从测试结果可以看出直接将DTD中的值返回了。<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEnote[<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEnote[<!ENTITYhacker

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论