内容简介:最近在测试某src的时候。发现了某个站点存在源码泄露,xxx.com/www.zip可直接下载源码。通过分析该站点源码以及加上一些黑盒测试,最后成功getshell该站点。而取后缀的时候是这个该段代码只是简单的判断了一下X-File-Type的值而已,对后缀并没有进行判断,因此确定该处存在任意文件上传。
前言
最近在测试某src的时候。发现了某个站点存在源码泄露,xxx.com/www.zip可直接下载源码。通过分析该站点源码以及加上一些黑盒测试,最后成功getshell该站点。
过程
当拿到源码的时候首先看了一下该源码的结构,如图所示:
一看就是.net源码。话不多说,开始反编译代码。我这里使用DNSPY进行反编译。反编译后查看其架构,是mvc。
然后找到控制器代码。如图所示:
剩下的就是逐步看代码。首先找到了一处上传:
用户注册登录进去后,构造上传包进行上传,但是服务器却抛出错误了,此处代码不可利用。继续找。
然后又发现一处代码,如下图所示:
该处代码判断文件类型的时候有一个很明显的缺点,它取文件类型的时候是取的是
base.Request.Headers["X-File-Type"]
而取后缀的时候是这个
ase.Request.Headers["X-File-Extension"]
该段代码只是简单的判断了一下X-File-Type的值而已,对后缀并没有进行判断,因此确定该处存在任意文件上传。
确定有机会getshell了后,开始构造上传报文,但是回显如下:
然后细心排查了一下,发现是因为自己没有访问该控制器的权限导致的,该控制器声明了权限:
而我们注册用户的权限是没有的。那么现在要么找到一个越权漏洞,要么就找个注入获取高权限用户的密码信息。
不出意外的在UserController里面找到了如下这样的代码:
很明显这个函数的sel参数是存在注入的。但是由于该代码使用的ServiceStack框架,我一直找不到该框架反编译后的Service的信息( 有大佬知道的请告诉我 )。但是没有具体的Service的逻辑关系也不大,只要知道这个地方有注入就OK了。然后开始试着注入:
OK,注入确实存在。试着注入出数据的时候发现有问题了:
发现使用select的时候被拦截了,找一下拦截点。
在ServiceStack.OrmLite.OrmLiteUtils中有这样的检测:
然后这个IllegalSqlFragmentTokens的内容如下:
好吧.有框架的防注入,应该是不行了。那么就只有找越权的点了,找了很久,发现了如下代码:
这个函数是用来更新用户的,该入口在普通用户也是看不到的,应该是提供给管理员操作的,毕竟管理员这种才可以新建用户和更新已有用户信息。但是该函数并没有做权限的控制,普通用户可以直接构造报文访问该函数。因此我试着更新id为1的用户的邮箱为我自己的邮箱,因为id为1的用户大概率是管理员用户,更改该用户的邮箱后,然后通过找回密码功能即可将重置链接发送至我邮箱进行密码重置。
如下图:
修改完毕后就可以直接通过找回密码功能重置密码,如下图所示。
然后重设密码登陆后果然是管理员权限,构造最开始的上传报文即可Getshell(上传asp文件会被删掉,所以更改了下后缀名大小写绕过)。
访问之后成功解析。如下图。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- ikun 潜入?疑似 B 站后台源码泄露
- B 站源码泄露?这是—什么—操作(黑人问号)?
- 这样做源码肯定不能被泄露,但你会疯...
- 并发编程(四)—— ThreadLocal源码分析及内存泄露预防
- Kubernetes源码探疑:Pod IP泄露排查及解决
- 由"B站源码泄露事件"揭秘Go语言的前世今生
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
500 Lines or Less
Amy Brown、Michael DiBernardo / 2016-6-28 / USD 35.00
This book provides you with the chance to study how 26 experienced programmers think when they are building something new. The programs you will read about in this book were all written from scratch t......一起来看看 《500 Lines or Less》 这本书的介绍吧!