freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

.net代码审计之我真的只想要管理员权限
2020-12-17 14:14:34

前言

同事昨天给了我一个站,顺便还找了到了源码,让我看看。这个网站有管理员登录、教师登录和学生登陆,我从最薄弱的学生登陆下手。

我各种123456、123456789、123123、666666各种弱口令一顿怼,但是都不对,所以我把目光放到了源代码里,看看能不能找到初始化sql文件。

1608182106_5fdae95a45f979a460adb.png!small?1608182105564

一看这个叫学生导入模板的文件,我吐血了,默认密码是12345,我tm。。。。

1608182169_5fdae999ac4f5e9a770a7.png!small?16081821688921608182273_5fdaea01edcc5e200d16f.png!small?1608182273266

进去之后发现了一个叫个人网盘的东西,那这感觉冥冥之中就是个超级无敌的上传点呀。二话不说,上传木马。1608182319_5fdaea2f669df83e3b8ae.png!small?1608182318595

哦豁,还挺硬。。。。

正文

源码寻找篇:

访问该系统的开发者网站,最近还在更新,但是手里的这个应该用的不是最新版本。而同事给我的源码属于很久之前了,在对照目录访问的时候发现很多目录对不上号,于是猜测同事的源码和这个系统目前的版本也不符合。

浏览目录寻找到能说明版本的文件。1608182695_5fdaeba71a237c1810f84.png!small?16081826946021608182739_5fdaebd32b793184c5089.png!small?1608182738685

找到了对应版本那么就要下载对应的源码审计就ok了。

.net代码审计篇

鄙人在审计代码的时候有个习惯,那就是先从未授权登录开始审计,正所谓百善未授权登录为先。鄙人这招屡试不爽,在沙场上也是战功赫赫。1608182901_5fdaec75570f6e17a0417.png!small?1608182900623

很快啊,我上去就是打开一个管理员登录页面,明显是有备而来。这里可以看到管理员认证页面

inherits="Manager_index“,那我们直接就去dll文件中寻找Manager_index,看看到底能不能发现啥东西。

1608183027_5fdaecf3ca369e57658ce.png!small?1608183027024

这里我用的是.NET Reflector 8.5,点击放大镜搜索Manager_index,定位到对象展开就可以愉快的开始审计了1608183336_5fdaee288a25a2f69c957.png!small?1608183335913

接下来查看页面加载的函数page_load1608183484_5fdaeebcb9f7389a9f0a8.png!small?1608183484030

可以看到page_load函数调用了CookieHelp.JudgelsAdmin()函数,从名称之中我们就可以判断这个函数的作用是判断用户身份是不是admin,如果是的话接来下会将title设置为系统设置页面,那我们就要进入CookieHelp.JudgelsAdmin()函数去看一看能不能从这里搞点事情。(因为一场意外,我搞到了这个系统的未编译版本,所以后边就没继续用.NET Reflector,直接用vscode打开了。。。)1608183691_5fdaef8b6c4286cd6dce7.png!small?1608183690654

从代码中可以看到,JudgeIsAdmin函数先判断mngCookieNname这个cookie的值是否为空,如果为空则跳出,不为空再判断Hs和Hid


也就是说judgeIsAdmin()函数是通过cookie来验证用户身份的。此时我已经逐渐的感觉到了未授权登录的气息,也就是说我只要搞到管理员的cookie就可以伪造管理员身份去登录了,那我们的关注点就要移动到mngCookieName上,去看看这个cookie是怎么设置的。1608183992_5fdaf0b81031ab7d54f3b.png!small?1608183991282

在SetManagerCookies函数中,可以清楚的看到Hid和Hs是怎么设置的,但是我们这里还要注意,TCookies这个对象是一个含子键的cookie,格式其实是

{

mngCookieNname:{

Hid:value

Hs:value

.......

}

}

也就是说我们只知道Hid和Hs是不行的,我们还要知道mngCookieNname这个cookie键的具体值是什么(Hs就是Hid的md5,关于Hid怎么获取稍后再讲)

这里我移步mngCookieNname对象,来看看mngCookieNname是怎么设置的1608184452_5fdaf284cc6e375623c62.png!small?1608184451981

这里我们可以看到无论是stuCookieNname还是mngCookieNname,只不过是开头第一个字母不同,后面的tempcfx怎么来的我们根本不用去操心,那么我们之前已经得到了学生的账号密码,也就等于有了stuCookieNname的值,有了stuCookieNname,那我们只要将这个cookie开头的首字母S改成M,就等于获得了mngCookieNname的值。1608184696_5fdaf378b0831cbef8ce9.png!small?1608184695993

打开火狐,F12到存储查看cookie值,拿到了学生用户的cookie,所以到现在等于mngCookieNname的值我们已经有了,那接下来就是获取Hid了,Hid有了Hs自然就有了。这里我猜测Hid应该是管理员在数据库中的id,一般管理员都是1,那么直接将Hid设置为1,Hs设置为1的md5,然后粘贴到cookie这里。1608184988_5fdaf49c9d810fa5a12f6.png!small?1608184988054

直接bingo

1608185053_5fdaf4dd2dac8ed39d646.png!small?1608185052404

其实我真的只想要你的管理员权限

改进建议:不要使用cookie校验用户身份

# 渗透测试 # 代码审计 # .Net
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录