|
|
|
联系客服020-83701501

WebServer端口重定向后门的研究

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
WebServer端口重定向后门的研讨

0x00

前段工夫有友人问到了我一个关于“无端口可用”的标题。说在下列图所示的内网状况中,firewall只容许Web Server的80端口创设网络毗连,并且Web Server上的80端口曾经被IIS、Apache等软件占用了的情况下,怎样创设一个RAT后门。

图片1.jpg

0x01

早 些时候的著名后门byshell就考虑到了这个标题,是以利用了一种迥殊挫的方式去打算。客户端将数据发送到80端口,做事端将IIS的进程打开,循环遍 历IIS进程的扫数内存去探求数据标志。邃晓这种方法从坚守和坚强性上来讲,但凡不行取的。这里姑且不把这种方法当成方法。

夙昔有人提出过一种端口复用的方法去创设的后门,这个方法利用了setsockopt()这个API,这个API在MSDN里说是用来设置套接字的选项的。原型下列。

Default
1234567 int setsockopt(SOCKET s,int level,int optname,const char FAR* optval,int optlen);

 

咱们这里只保护它的第三个参数,这个参数用来设置套接字形状。这个参数有一个取值为SO_REUSEADDR,MSDN对这个参数的表达下列。

The state of the SO_REUSEADDR socket option determines whether the local transport address to which a socket will be bound is always shared with other sockets. This socket option applies only to listening sockets, datagram sockets, and connection-oriented sockets.

也便是说,当第三个参数的取值设 置为SO_REUSEADDR时,套接字的端口是也许共享复用的。详细共享细节为那时居上,后创设该参数链接的套接字先拿到数据。此方法目前对 Apache和IIS5.0及下列版本有效。那为何IIS6.0及以上就不行了呢?当前会做表达。

0x02

通 过逆向和查阅开源代码也许获悉,Apache和IIS5.0及下列版本利用了操纵层的IOCP模子终止通讯,虽然框架比较复杂,然而依然在操纵层成立了套 接字。到这里你能否有新的设法呢?没错,我想到了也许利用长途线程注入一个DLL终止Api Hook例如WSARecv()、WSASend()如许的API获取套接字和异步IO的缓冲区指针,再利用getpeername()函数较劲客户端信 息,紧接着用套接字终止IO。

大要也也许利用更易和悦的方法,间接利用SPI调度一个LSP,也也许抓到数据,然而就比较难再做通讯了。咱们将这种在操纵层创设套接字通讯转接通讯过程的方法总结为下图,红线默示也许操作的中央。

图片2.png

这里也许就有同学会问到,为何不能间接上Rootkit呢?假如从ring0层去考虑这个标题理论上是迥殊容易的。咱们也许利用TDI大要NDIS的过滤 驱动间接过滤全数IO网卡的流量,无非写个这么分量级的后门,确切有“杀鸡焉用宰牛刀”的意味。再者,也也许利用SSDT HOOK和对TCP驱动下IRP HOOK去打算标题。然而为何不去做呢?因为利用驱动目前曾经不是Windows木马编程潮流所在。

0x03

还记得以条件到的IIS6.0和以上版本的标题吗?这里一个新标题出现了,从IIS6.0开端,微软也许考虑到了安全性和坚强性以及数据处理的坚守的标题,将网络通讯的过程封装在了ring0层,利用了http.sys这个驱动来间接终止网络通讯。下列图所示。

如许一来,操纵层就没有了套接字,咱们就不能利用上述方法去打算这个标题了。那怎样办呢?莫非操纵层是以就再没有也许操作的中央了吗?这么想并不相符Geek的气焰派头。是以,颠末对W3wp.exe的最先的逆向,又缔造了一些也许操作的中央。

图片3.png

这个过程中,ring0无奈处理的HTTP恳请,都下发由w3wp.exe进程处理。针对HTTP恳请考虑,我想到了下列几点也许转接网络通讯过程的中央。

1.GET大要POST对硬盘中的文件做访问,有也许必要经由操纵层CreateFile()、ReadFile()、WriteFile()去完成。(API HOOK?)

2.关于HTTP这种大所无形式由ANSI字符串剖析的协定,莫非用不到标准字符串处理函数吗?(照旧API HOOK?)

3.对ASP、PHP、JSP脚本的表达,也许必要将数据提交给表达引擎去完成。(inline hook?)

0x04

基 于以上几点,我也逐个做了考据。这里逆向要留神了,OllyDbg对低权限进程的Attach调试坚强性并欠好,经常崩掉。所以我换了迥殊尴尬的 Windbg。微软自家的调试器调自家的步骤迥殊坚强。起首bp了CreateFileW(),失掉了一个比较惊喜的造诣。如图所示。

图片4.png

Windbg拦下了CreateFileW(),并且在第一个参数里,咱们看到了咱们提交的“fuckyou1234”,这里咱们就完全也许用if(wcsncmp(s1,L”fuckyou1234”,11))如许失掉后门号令了。

而我经由对多个字符串处理函数的bp,同样也缔造了也许操作的中央。例如wcsstr()函数的断点,腐烂的抓到了cookies和一些此外与HTTP协定相干的静态。cookies也许比URL提交跟多形式,并且也许绕过一些log和过滤。下列图所示。

图片5.jpg

这是对前两个标题逆向的最先造诣,至于第三个标题,常设先留着好了。当初碰到了一个新的标题,当拿到必要实验的号令,咱们至多不能让他去w3wp.exe这个低权限的进程去施行。那末怎样让他在高权限的进程去施行呢?另有,咱们实验完的后果,该怎样前往给客户端呢?

0x05

这 里我考虑到了留一个宿主进程,创设事变器械和邮槽大要管道接受由w3wp.exe发来的号令。至于把数据反馈到客户端,咱们也许重定向 CreateFileW()的第一个参数,将他指向管道也好,指向某个硬盘里的输入文件也好,当紧接着去ReadFile()的时候,就也许溃烂将咱们的 实验后果反馈到客户端去了。

这里涉及到高下权限进程通讯的一个标题,高权限进程成立的内查器械必须设置安全属性为低权限可继承句柄,并且设置安全形貌符和DACL。事变、邮槽、管道的等内查器械身手被低权限进程打开。详细代码下列。最后,我用上述所诉形式,写了下列的一个后门。

Default
12345678910111213 HANDLE secCreateEventPort(WCHAR* szNameEvent){SECURITY_DESCRIPTOR SecDescriptor = {0};SECURITY_ATTRIBUTES SecurityAttributes = {0};if (InitializeSecurityDescriptor(&SecDescriptor,SECURITY_DESCRIPTOR_REVISION) == FALSE)return INVALID_HANDLE_VALUE;if(SetSecurityDescriptorDacl(&SecDescriptor,TRUE, NULL, FALSE) == 0)return INVALID_HANDLE_VALUE;SecurityAttributes.bInheritHandle = TRUE;SecurityAttributes.lpSecurityDescriptor = &SecDescriptor;SecurityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);return CreateEvent(&SecurityAttributes,TRUE,FALSE,szNameEvent);}

造诣图:

图片6.jpg

相干文章举荐《跨平台双通道端口转发》

link:http://www.7c00.org/index.php/2013/06/22/47.html

本文由网络安全攻防研讨室(www.91ri.org)静态安全小组收集整顿,转载请阐明来因。

数安新闻+更多

证书相关+更多