19.4 Boost Asio 远程命令执行
命令执行机制的实现与原生套接字通信一致,仅仅只是在调用时采用了Boost通用接口,在服务端中我们通过封装实现一个run_command函数,该函数用于发送一个字符串命令,并循环等待接收客户端返回的字符串,当接收到结束标志goodbye lyshark时则说明数据传输完成则退出,客户端使用exec_command函数,该函数通过_popen函数执行一条命令,并循环fgets读取字符串发送给服务端,最终传输一个结束标志完成通信。
服务端代码如下所示,我们通过调用run_command函数执行dir C:\\Users\\命令,获取到对端主机目录下的文件列表。
#include <iostream>
#include <string>
#include <boost/asio.hpp>
using namespace boost::asio;
// 让客户端执行特定命令
bool run_command(ip::tcp::socket *socket, std::string command)
{
(*socket).write_some(buffer(command));
char buffer[1024] = { 0 };
while ((*socket).read_some(boost::asio::buffer(buffer, 1024)) > 0)
{
if (strncmp(buffer, "goodbye lyshark", 15) == 0)
break;
std::cout << buffer;
memset(buffer, 0, sizeof(buffer));
}
return true;
}
int main(int argc,char *argv[])
{
io_service io_service;
ip::tcp::endpoint ep(ip::tcp::v4(), 6666);
ip::tcp::acceptor acceptor(io_service, ep);
ip::tcp::socket socket(io_service);
acceptor.accept(socket);
std::cout << "client:" << socket.remote_endpoint().address() << std::endl;
run_command(&socket, "dir C:\\Users\\");
std::system("pause");
return 0;
}
客户端代码如下所示exec_command函数当收到命令时,自动执行远程命令,并将返回结果传输给服务端,如下所示;
#include <iostream>
#include <string>
#include <boost/asio.hpp>
using namespace boost::asio;
// 实现命令执行,并发送到服务端
bool exec_command(ip::tcp::socket *socket)
{
char command[1024] = { 0 };
char buffer[1024] = { 0 };
(*socket).read_some(boost::asio::buffer(command));
FILE *fp = _popen(command, "r");
while (fgets(buffer, sizeof(buffer), fp) != NULL)
{
(*socket).write_some(boost::asio::buffer(buffer, 1024));
memset(buffer, 0, sizeof(buffer));
}
(*socket).write_some(boost::asio::buffer("goodbye lyshark"));
_pclose(fp);
return true;
}
int main(int argc, char *argv[])
{
io_service io_service;
ip::tcp::endpoint ep(ip::address::from_string("127.0.0.1"), 6666);
ip::tcp::socket socket(io_service);
socket.connect(ep);
exec_command(&socket);
std::system("pause");
return 0;
}
读者可自行运行上述代码,至此则可输出如下图所示的效果;

19.4 Boost Asio 远程命令执行的更多相关文章
- tomcat7.x远程命令执行(CVE-2017-12615)漏洞漏洞复现
tomcat7.x远程命令执行(CVE-2017-12615)漏洞漏洞复现 一.漏洞前言 2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017 ...
- IIS6.0远程命令执行
0X00 漏洞信息: 漏洞编号:CVE-2017-7269 漏洞简述:开启WebDAV服务的IIS 6.0被爆存在缓存区溢出漏洞导致远程代码执行,目前针对 Windows Server2003 R2 ...
- Spring Framework 远程命令执行漏洞(CVE-2022-22965)
Spring Framework 远程命令执行漏洞 (CVE-2022-22965) 近日,Spring 官方 GitHub issue中提到了关于 Spring Core 的远程命令执行漏洞,该漏洞 ...
- "Java 反序列化"过程远程命令执行漏洞
一.漏洞描述 国外 FoxGlove 安全研究团队于2015年11月06日在其博客上公开了一篇关于常见 Java 应用如何利用反序列化操作进行远程命令执行的文章.原博文所提到的 Java 应用都使 ...
- FlexPaper 2.3.6 远程命令执行漏洞 附Exp
影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...
- struts2远程命令执行漏洞S2-045
Apache Struts2最新漏洞(CVE-2017-5638,S02-45) struts2远程命令执行漏洞S2-045 Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-04 ...
- SSD报告 - QRadar远程命令执行
SSD报告 - QRadar远程命令执行 漏洞摘要 QRadar中的多个漏洞允许远程未经身份验证的攻击者使产品执行任意命令.每个漏洞本身并不像链接那么强大 - 这允许用户从未经身份验证的访问更改为经过 ...
- python套接字编程实现ntp服务和远程命令执行
python套接字编程实现ntp服务和远程命令执行 目录 基于udp实现ntp服务 基于tcp实现远程命令执行 基于udp实现远程命令执行 tcp与udp的比较 前面关于套接字基础请查阅 https: ...
- 【漏洞公告】高危:Windows系统 SMB/RDP远程命令执行漏洞
2017年4月14日,国外黑客组织Shadow Brokers发出了NSA方程式组织的机密文档,包含了多个Windows 远程漏洞利用工具,该工具包可以可以覆盖全球70%的Windows服务器,为了确 ...
- URI Scheme注册伪协议实现远程命令执行
Windows配置注册表注册伪协议 1.新建伪协议项 WIN+R 输入regedit 打开注册表,在注册表HKEY_CLASSES_ROOT键中新建一个项,项的名字就是你伪协议的名字,例如我注册一个c ...
随机推荐
- Markdown 文档测试--demo
Editor.md hhh 换行TEST 1 2 3 a b q d HEAD TEST Smart Test ... -- 目录 (Table of Contents) [TOCM] 目录 Edit ...
- 【驱动】SPI驱动分析(七)-SPI驱动常用调试方法
用户态 用户应用层使用spidev驱动的步骤如下: 打开SPI设备文件:用户可以通过打开/dev/spidevX.Y文件来访问SPI设备,其中X是SPI控制器的编号,Y是SPI设备的编号. 配置SPI ...
- SpringBoot 动态多线程并发定时任务
一.简介 实现定时任务有多种方式: Timer:jdk 中自带的一个定时调度类,可以简单的实现按某一频度进行任务执行.提供的功能比较单一,无法实现复杂的调度任务. ScheduledExecutorS ...
- Angular系列教程之DOM操作
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- 电机控制和Linux驱动开发哪个方向更好呢?
电机控制和Linux驱动开发哪个方向更好呢? 先说结论:任何一个领域,就像世间的五行,阴阳结合,虚实结合,利弊结合.对于哪个更好,不能一概而论,最重要的是要搞清楚,你更适合哪个? 1.共鸣 当我看到这 ...
- 使用JavaStream将List转为Map
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 使用Java Stream将List转换为Map ...
- [转帖]ramfs、tmpfs、rootfs、ramdisk介绍
ramfs.tmpfs.rootfs.ramdisk介绍 bootleader--->kernel---->initrd(是xz.cpio.是ramfs的一种,主要是驱动和为了加载ro ...
- [转帖]读懂什么是RDMA
https://blog.csdn.net/tony_vip?type=blog 一.什么是RDMA1.RDMA主要体现 2.如何理解RDMA和TCP技术的区别?3.使用RDMA的好处包括: ...
- [转帖]nmon使用及监控数据分析
[使用] [监控数据分析] 参考链接:nmon监控数据分析 性能测试中,各个服务器资源占用统计分析是一个很重要的组成部分,通常我们使用nmon这个工具来进行监控以及监控结果输出. 一.在监控阶段使用类 ...
- [转帖] jq实现json文本对比
原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 近期,为了给一个核心系统减负,组内决定将一些调用量大的查询接口迁移到另一个系统,由于接口逻辑比较复杂,为了保 ...