.net代码审计-有趣的上传

本文章仅用于渗透交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任 

好久没更新了,人也是变懒了,去年其实实战中有很多经典案例可以写的,但是因为比较懒,就都错过了,现在也2022年3月份了,确实是需要更新一下了,此文章也是去年我在补天刷文件上传比较通用的方法吧,找源码,审未授权上传,然后刷洞,系统不能说大,也不算太小,基本都是在fofa资产400以上的吧,不然就算审出来洞也没啥实际意义。文章我就不怎么太注重排版了,随便看看吧。

0x01 了解上传功能点的逻辑处理

一般在拿到一套源码后,我第一眼看的就是上传功能点,我这里直接全局搜索upload,找到了这个没有Cookie验证的上传点 

上传需要多个参数,通过代码已经确认过这个上传功能是没有权限验证的,可以未授权上传,上传的其他参数都是函数内写好的方法名,可以直接通过代码去看到传参值,但是有个ticks参数并没定指定值,在实际上传的时候而是一串32位的随机字符

 

 

从代码里看到,参数不正确会报错

那我们就需要知道这个32位的值到底是怎么形成的,是利用DateTimeUtil方法去加密的当前服务器时间生成的一个32位的字符集

具体的加密过程实在是不想看了,太麻烦

 

接着往下看,看到了这个32位的值大体的构成的方法,以及这个值的判断逻辑,对 ticks参数传入的参数时间加一个小时跟当前服务器时间进行比对,如果dateTime1<dateTime2则提示登陆超时,意思就是这里没有对Cookie进行验证,我们只要构造出比当前时间大于一小时的参数进行传入,就可以进行上传操作

 

 

然后我们可以利用此方法构造一个5年以后的值,这样就会一直不失效。

我这里是构造了一个2025年的加密值

 

 

得到这个值后我们就可以正常上传文件了,继续往下看代码对上传的文件的安全检验,后缀类型限制采用黑名单形式,过滤不严格,这里可以上传ashx,asmx文件到服务器绕过限制

 

构造好上传地址,上传ashx后缀的文件,提示上传成功。

 

访问服务器,确实也看到了上传的文件

 

0x02 上传限制绕过

当我上传上去后,本以为本次已经收获一枚前台上传漏洞的时候,结果访问这个文件直接302跳转登录页面了,发现原来这个上传的目录底下的所有动态脚本文件都必须经过Cookie验证才可以访问,意思就是不登录这个webshell根本连接不上。

接下来我想到的办法跳出此目录,就不需要登录就可以连接webshell了,但是看了一下,限制死了

这条路走死了

但是仔细看了一下代码发现此处还有一个自解压的功能,就是我们上传的压缩包可以帮我们解压出来,在上传文件的时候,当sUnzip参数为Y,就会启动解压功能,如果上传的文件为压缩包,就会正常解压,如果为不可解压文件就会报错

 

可以看到这里压缩包UnzipFilePath的路径并没有限制,只限制了普通上传的TargetRootPath的路径,这里我们就可以上传一个压缩包,直接利用../../上传压缩包到根目录并解压

 

我们实环境测试了一下

直接上传内容为asp后缀的压缩包(这里aspx,ashx都可以),提示上传成功

 

发现成功解压到网站根目录,可以直接连接,不需要登录

 

 0x03 总结

学习是一个不断努力的过程,我们只有循序渐进,才能顺利攀登,不要想着一口吃一个胖子,

正因为真正的学习是循序渐进,不停发现问题,不停解决问题,重视问题之间的联系

因此,学习没有一促而就,有的是常年累月的摸索,融入到身体的进步,异于常人的努力。

 

 

 

 

 

posted @ 2022-06-22 02:03  Azjj  阅读(146)  评论(0)    收藏  举报