任务一:总结CSRF和XSS区别
1.原理不同
CSRF:CSRF是一种依赖web浏览器的代理人攻击(deutyattack)。攻击者通过伪造受害者的请求来冒充用户在站内的正常操作。这通常是通过诱导用户点击恶意链接或访问恶意网站来实现的,这些链接或网站会向受害者已登录的网站发送伪造请求。
XSS:XSS是一种代码注入攻击,攻击者将恶意脚本(通常是JavaScrit)注入到目标网站中。当其他用户浏览这些被注入恶意脚本的页面时,恶意脚本会在用户的浏览器上执行,从而达到攻击用户的目的。
2.目标不同
CSRF:CSRF的目标主要是利用受害者在受信任网站上的身份(如通过cookie等方式获得的授权),执行未经授权的操作,如转账、发送消息等。
XSS:XSS的目标则是用户的浏览器,通过执行恶意脚本攻击用户,可能窃取用户的敏感信息(如cookie、会话令牌等)、进行会话劫持、发起钓鱼攻击等。
3.实现方式不同
CSRF:CSRF攻击通常不需要用户登录目标网站,而是利用用户已经登录的cookie等身份验证信息。攻击者通过构造恶意链接或表单,诱导用户点击或提交,从而向目标网站发送伪造请求。
XSS:XSS攻击则需要攻击者将恶意脚本注入到目标网站中。这通常是通过在网站的输入字段(如搜索框、留言板等)中提交包含恶意脚本的内容来实现的。当这些内容被网站不加过滤地显示给其他用户时,恶意脚本就会在用户的浏览器上执行。
4.防御策略不同
CSRF:为了防御CSRF攻击,网站可以采取以下措施:
在请求中添加令牌(token)验证,确保请求的真实性。
使用HTTS协议来保护请求的传输安全。
对敏感操作进行二次验证。
XSS:为了防御XSS攻击,网站可以采取以下措施:
对用户的输入进行严格的过滤和转义,防止恶意脚本的注入。
使用HTT头指定内容类型,避免内容被错误地解析为HTML。
实施内容安全策略(CS),限制外部资源的加载和执行。
任务二:总结CSRF攻击步骤
1.用户登录受信任网站:用户C打开浏览器,访问受信任的网站A(如银行网站),并输入用户名和密码进行登录。网站A验证用户信息后,生成Cookie信息并返回给浏览器,用户C成功登录网站A,并可以在该网站上进行正常操作。
2.用户访问恶意网站:在用户C未退出网站A之前,在同一浏览器中,用户C打开一个新的标签页(Tab)访问恶意网站B。此时,用户的浏览器依然保存着网站A的Cookie信息。
3.恶意网站发送攻击请求:恶意网站B在用户不知情的情况下,通过嵌入的攻击性代码(如JavaScrit、HTML表单等)向网站A发送请求。这些请求可能伪装成用户C的正常操作请求,如转账、发送消息等。
4.浏览器携带Cookie信息发起请求:由于浏览器之前已经认证过网站A,并保存了相应的Cookie信息,因此浏览器会自动携带这些Cookie信息向网站A发起请求。
结果:网站A接收到请求后,根据Cookie信息认为这是用户C的合法请求,并按照请求内容执行相应的操作。
5.恶意代码被执行,用户遭受损失:由于网站A无法区分这些请求是否真正来自用户C,因此会按照请求内容执行相应的操作,导致恶意代码被执行。
任务三:总结CSRF手工构造OST型页面方法
1.确定目标URL和请求参数
目标URL:首先需要确定目标Web应用程序的URL,即用户想要伪造的POST请求将要发送到的地址。
请求参数:通过抓包工具(如BurpSuite)捕获目标网站的正常POST请求,并分析这些请求所需的参数。这些参数将用于构造攻击表单。
2.构造HTML表单
表单结构:使用HTML语言构造一个表单(<form>),设置其action属性为目标URL,method属性为POST。
输入字段:在表单内部,根据捕获的请求参数,添加相应的输入字段(<input>)。这些字段的name属性应与请求参数相匹配,value属性则设置为攻击者希望提交的值。
示例代码
html
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>CSRFPOSTAttackForm</title>
</head>
<body>
<h2>CSRFPOSTAttackForm</h2>
<formaction="http://example.com/target/url"method="POST"style="display:none;">
<inputtype="hidden"name="param1"value="attackervalue1">
<inputtype="hidden"name="param2"value="attackervalue2">
<!--添加更多隐藏输入字段以匹配POST请求的所有参数-->
<inputtype="submit"value="SubmitForm"style="display:none;">
</form>
<script>
document.forms[0].submit();//页面加载时自动提交表单
</script>
</body>
</html>
3.隐藏表单元素
为了使用户不易察觉,可以将表单和表单内的输入字段都设置为隐藏(通过CSS样式或直接在HTML中使用hidden属性)。
4.诱使用户提交表单
攻击者需要创建一个诱饵,如一个看似无害的链接或按钮,当用户点击这个诱饵时,通过JavaScript自动提交隐藏的表单。
例如,可以设置一个链接或按钮,并在点击事件中使用JavaScript代码document.forms[0].submit();来提交表单。
5.验证和测试
在实际部署前,应在安全的环境中测试构造的CSRF页面,确保它能够成功地向目标网站发送POST请求并达到预期的效果。
同时,应关注任何可能的安全措施(如Token验证、Referer检查等),并尝试绕过这些防御机制。
任务四:说明token类CSRF利用方法
一、Token类CSRF防御的基本原理
1.生成Token:服务器在用户登录或进行某些敏感操作前,生成一个唯一的、难以预测的Token,并将其发送给客户端(通常是通过Cookie或者表单的隐藏字段)。
2.发送Token:客户端在发起请求时,将这个Token包含在内,通常是通过HTTP请求的头部(如X-CSRF-TOKEN)或者表单字段(如<inputtype="hidden"name="csrf_token"value="...">)发送。
3.验证Token:服务器接收到请求后,会从请求中提取Token,并与服务器存储的或根据请求的其他部分(如用户的会话信息)生成的Token进行比较。如果Token匹配,则认为请求是合法的;如果不匹配,则拒绝请求。
二、Token类CSRF的利用方法:
1.窃取Token:如果Token被存储在客户端的某个地方(如Cookie),并且没有通过HTTPS加密传输,那么攻击者可能通过跨站脚本(XSS)攻击窃取Token。
预测Token:如果Token的生成算法不够复杂或不够随机,攻击者可能通过暴力破解或预测算法来猜测Token。
2.利用会话固定:攻击者可能先与服务器建立一个有效的会话并获得Token,然后诱导用户(通过钓鱼网站等)使用这个已存在的会话(即Token)来执行攻击。
防御措施
3.使用HTTPS:确保所有Token都是通过HTTPS加密传输的,以防止中间人攻击。
Token复杂性:确保Token是足够随机且难以预测的。使用安全的随机数生成器,并考虑将用户会话信息或其他不可预测的数据纳入Token的生成算法中。
设置适当的Cookie属性:对于存储在Cookie中的Token,确保设置了HttpOnly和Secure属性,以减少XSS攻击的风险。
4.定期更换Token:在用户会话期间定期更换Token,以降低会话固定攻击的风险。
实施双重验证:对于特别敏感的操作,除了Token验证外,还可以实施其他形式的验证(如手机验证码、指纹识别等)
任务五:SSRF常用伪协议
1.file协议
功能:从文件系统中获取文件内容。
格式:file://[文件路径]
示例:
file:///etc/passwd:读取/etc/passwd文件内容,该文件通常包含系统用户信息。
file:///etc/hosts:显示当前操作系统网卡的IP地址。
file:///proc/net/arp:显示ARP缓存表,有助于寻找内网其他主机。
2.http/https协议
功能:向目标服务器发送HTTP/HTTPS请求。
说明:由于HTTP请求的URL参数通常直接附加在URL中,因此可以利用这一特性来探测内网中那些通过GET请求即可访问的应用。虽然HTTP协议本身不是伪协议,但在SSRF的上下文中,它常被用于构造指向内网资源的请求。
3.dict协议
功能:字典服务协议,用于从远程服务器上查询词典或字典内容。
示例:dict://ip:6739/info
用途:可用于扫描端口、获取内网信息、爆破密码等。例如,通过扫描不同端口的响应来判断哪些端口是开放的。
4.ftp协议
功能:文件传输协议,用于在网络上传输文件。
用途:虽然ftp协议在SSRF中的利用效率相对较低(因为连接成功但请求内容识别不到可能不会回复),但它仍可用于网络端口扫描等目的。
5.gopher协议
功能:早期互联网上的一种文档检索协议,类似于HTTP但更简单和结构化。
用途:gopher协议在SSRF中的利用范围很广,包括GET提交、POST提交、与Redis等服务的交互等。它允许攻击者构造复杂的请求来攻击内网中的服务。
注意:gopher协议会吃掉请求中的第一个字符,因此通常需要在URL的开头添加一个无用的字符(如下划线)。此外,回车换行符(\r\n)在URL中需要被编码为%0d%0a,但直接编码可能会遇到问题,有时需要进行二次URL编码。
任务六:SSRFikachu靶场通关
1.SSRF(curl)
打开pikaqiu
点击“读诗”
尝试修改url访问百度
可以看到成功访问
2.SSRF(file_get_content)
点击“读诗”
修改url参数,再次访问第一关
访问成功:
还可以修改url参数访问本地D盘的文件,可以看到显示文本文件的内容:Thisisfilea000.txt,显示成功:
任务七:SSRF靶场通关时根据源代码说明漏洞成因(加分项)