首页 > 其他分享 >学习笔记-.net安全越权

学习笔记-.net安全越权

时间:2022-11-07 10:56:03浏览次数:92  
标签:cookies 验证 admin -. flag userinfo net 越权 页面

0x00 ASP.NET安全认证

1.在web.config中有四种验证模式:

方式 描述
window IIS验证,在内联网环境中非常有用
Passport 微软集中式身份验证,一次登录便可访问所有成员站点,需要收费
Form 窗体验证,验证帐号/密码,Web编程最佳最流行的验证方式
None 表示ASP.NET自己根本不执行身份验证,完全依赖IIS身份验证

其中FORM窗体验证的流程图:

开启form窗体验证的同时还需要配置web.config,不然就会出现问题,一般来说还需要配置最基本的页面访问权限,比如禁止匿名用户访问。

<system.web>
    <authorization>
    <deny users="?"/>
    </authorization>
</system.web>

当然还可以设置一些管理页面允许某某用户访问等等,在这套程序中开启了form然后在程序里面验证的cookies,而且并没有设置所有页面的authorization

2.除去web.config的配置通常还有两种写法来验证是否登陆。

第一种:在每个页面判断Session["UserName"]是否等于null

第二种:类似php的include的继承,这也是本套程序使用的方法。

首先他定义了一个purchase.Master 母版页 在里面写上了权限验证的代码。

然后次母版页头文件会引入MasterPageFile="~/purchase/purchase.Master"调用之前都会先调用母版页的Page_Load函数来验证是否登陆。当然你也可能遇到没有使用母版页的程序,那么他可能是先定义一个onepage类继承page,然后其他页面继承onepage类,与此相同。

0x01 寻找越权

例1:

比如没有任何验证的,也没有继承验证类的,无需登陆访问

例2:

这套程序验证权限的地方比较少,只是简单的判断了是否登陆,登陆后基本可以访问大多数管理页面这里。

例3:

MyProfile.aspx文件中 直接获取表单数据进行update,并没有验证权限,导致低权限账号也可以update admin但是这里是参数化查询,所以不存在注入。修改admin的账号密码为1234567

例4:

前面说到这套程序里面验证的cookies,而且并没有设置所有页面的authorization权限,所以我们能不能伪造cookie呢。

23-26行判断this.uid的值来进行跳转,在16行定义了他的值,跟进UserHelper.GetUserId

public static int GetUserId
{
    get
    {
        if (Helper.IsUseAd && HttpContext.Current.Request.Cookies["userinfo"] == null)
        {
            UsersHelper.LoginAd(UserHelper.GetSamaccountName());
        }
        if (HttpContext.Current.Request.Cookies["userinfo"] != null)
        {
            return int.Parse(HttpContext.Current.Request.Cookies["userinfo"]["userid"]);
        }
        return -1;
    }
}

this.uid等于cookies中获取的userinfo的值,这一步可以伪造,接着我们看到30-33这里他设置了管理员的布尔值,跟进RoleHelper.IsAdmin

public static bool IsAdmin
{
    get
    {
        string name = "IsAdmin";
        string admin = RoleHelper.Admin;
        bool? flag = HttpContext.Current.Session[name] as bool?;
        if (flag == null)
        {
            flag = new bool?(UserHelper.IsInAnyRoles(admin));
            HttpContext.Current.Session[name] = flag;
        }
        return flag.Value;
    }
}

前面从session中获取,如果flagnull则从UserHelper.IsInAnyRoles(admin)获取。

跟进IsInAnyRoles

可以看到只要我们传入的cookiesroles的等于传入的数组值就返回true其中 public static string Admin = "administrators";,所以构造cookies:userinfo=userid=1&roles=administrators;

点击关注,共同学习!
安全狗的自我修养

github haidragon

https://github.com/haidragon

标签:cookies,验证,admin,-.,flag,userinfo,net,越权,页面
From: https://www.cnblogs.com/haidragon/p/16865225.html

相关文章

  • networkQuality
    基本使用networkQuality 是一个命令行工具,需要使用「终端」App(或者你首选的其他终端模拟器)运行。方法是:首先,点按「程序坞」(Dock)中的「启动台」(LaunchPad)图标,在搜索栏中......
  • Ubuntu系统中CUDA套件nvvp启动后报错Unable to make protected void java.net.URLClas
    最近在看cuda方面的内容,需要对cuda代码做一些性能分析,于是需要使用nvvp,但是启动nvvp后报错:Causedby:java.lang.reflect.InaccessibleObjectException:Unabletomakepr......
  • ASP.NET Core教程-Configuration(配置)- Cache(缓存)
    更新记录转载请注明出处:2022年11月7日发布。2022年11月5日从笔记迁移到博客。缓存缓存的概念缓存(Caching)是系统优化中简单又有效的工具,投入小收效大。数据库中......
  • 基于 .NET 7 的 QUIC 实现 Echo 服务
    前言随着今年6月份的HTTP/3协议的正式发布,它背后的网络传输协议QUIC,凭借其高效的传输效率和多路并发的能力,也大概率会取代我们熟悉的使用了几十年的TCP,成为互联网的......
  • ASP.NET Core 集成 Elastic APM 实现链路追踪
    ElasticAPM部署访问ElasticAPM由四个基本组件构成:APMAgents:各个语言的客户端程序,一系列开源库,用于连接APMServerAPMServerElasticsearchKibanaAPMServer......
  • .net core在centos上使用libgdiplus库图像处理
    #Seehttps://aka.ms/containerfastmodetounderstandhowVisualStudiousesthisDockerfiletobuildyourimagesforfasterdebugging.FROMmcr.microsoft.com/......
  • Mininet 第一周
    Mininet是一个可以在有限资源的普通电脑上快速建立大规模SDN原型系统的网络仿真工具。该系统由虚拟的终端节点(End-Host)、OpenFlow交换机、控制器(也支持远程控制器)组成,这使......
  • 《ASP.NET Core技术内幕与项目实战》精简集-目录
    本系列是杨中科2022年最新作品《ASP.NETCore技术内幕与项目实战》及B站配套视频(强插点赞)的精简集,是一个读书笔记。总结和提炼了主要知识点,遵守代码优先原则,以利于快速复习......
  • 转载-Troubleshooting .NET Blazor WASM Debugging
    Troubleshooting.NETBlazorWASMDebugging Soyou’vedecidedtoboltonanexistingBlazorWebAssembly(WASM)UItoacurrentASP.NETCoresolution.First......
  • .NET 7 中 LINQ 的疯狂性能提升
    .NET7中LINQ的疯狂性能提升 LINQ是 Language INtegrated Query单词的首字母缩写,翻译过来是语言集成查询。它为查询跨各种数据源和格式的数据提供了一致的模......