命令执行机制的实现与原生套接字通信一致,仅仅只是在调用时采用了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 远程命令执行的更多相关文章

  1. tomcat7.x远程命令执行(CVE-2017-12615)漏洞漏洞复现

    tomcat7.x远程命令执行(CVE-2017-12615)漏洞漏洞复现 一.漏洞前言 2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017 ...

  2. IIS6.0远程命令执行

    0X00 漏洞信息: 漏洞编号:CVE-2017-7269 漏洞简述:开启WebDAV服务的IIS 6.0被爆存在缓存区溢出漏洞导致远程代码执行,目前针对 Windows Server2003 R2 ...

  3. Spring Framework 远程命令执行漏洞(CVE-2022-22965)

    Spring Framework 远程命令执行漏洞 (CVE-2022-22965) 近日,Spring 官方 GitHub issue中提到了关于 Spring Core 的远程命令执行漏洞,该漏洞 ...

  4. "Java 反序列化"过程远程命令执行漏洞

    一.漏洞描述   国外 FoxGlove 安全研究团队于2015年11月06日在其博客上公开了一篇关于常见 Java 应用如何利用反序列化操作进行远程命令执行的文章.原博文所提到的 Java 应用都使 ...

  5. FlexPaper 2.3.6 远程命令执行漏洞 附Exp

    影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...

  6. struts2远程命令执行漏洞S2-045

    Apache Struts2最新漏洞(CVE-2017-5638,S02-45) struts2远程命令执行漏洞S2-045 Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-04 ...

  7. SSD报告 - QRadar远程命令执行

    SSD报告 - QRadar远程命令执行 漏洞摘要 QRadar中的多个漏洞允许远程未经身份验证的攻击者使产品执行任意命令.每个漏洞本身并不像链接那么强大 - 这允许用户从未经身份验证的访问更改为经过 ...

  8. python套接字编程实现ntp服务和远程命令执行

    python套接字编程实现ntp服务和远程命令执行 目录 基于udp实现ntp服务 基于tcp实现远程命令执行 基于udp实现远程命令执行 tcp与udp的比较 前面关于套接字基础请查阅 https: ...

  9. 【漏洞公告】高危:Windows系统 SMB/RDP远程命令执行漏洞

    2017年4月14日,国外黑客组织Shadow Brokers发出了NSA方程式组织的机密文档,包含了多个Windows 远程漏洞利用工具,该工具包可以可以覆盖全球70%的Windows服务器,为了确 ...

  10. URI Scheme注册伪协议实现远程命令执行

    Windows配置注册表注册伪协议 1.新建伪协议项 WIN+R 输入regedit 打开注册表,在注册表HKEY_CLASSES_ROOT键中新建一个项,项的名字就是你伪协议的名字,例如我注册一个c ...

随机推荐

  1. 神经网络优化篇:详解动量梯度下降法(Gradient descent with Momentum)

    动量梯度下降法 还有一种算法叫做Momentum,或者叫做动量梯度下降法,运行速度几乎总是快于标准的梯度下降算法,简而言之,基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新的权重. 例如,如果 ...

  2. AtCoder Beginner Contest 166 (A~E)

    比赛链接:Here AB水题 C - Peaks 题意: 给出 \(n\) 个观察台的高度,以及 \(m\) 条边,定义"好观察台":比所有直接相连的观测台都高 思路: 因为道路是 ...

  3. 【调试】kdump原理及其使用方法

    kdump机制 简介 Kdump是在系统崩溃.死锁或死机时用来转储内存运行参数的一个工具和服务,是一种新的crash dump捕获机制,用来捕获kernel crash(内核崩溃)的时候产生的cras ...

  4. new关键字执行过程

    在javascript中,现阶段我们可以采用三种方式创建对象(object) 利用字面量创建对象 利用new Object创建对象 利用构造函数创建对象 new关键字执行过程 // new关键字执行过 ...

  5. 如何使用chatgpt编写代码

    功能列举 回答编程问题 我想让你充当 Stackoverflow 的帖子.我将提出与编程有关的问题,你将回答答案是什么.我希望你只回答给定的答案,在没有足够的细节时写出解释.当我需要用英语告诉你一些事 ...

  6. C# WPF侧边栏导航菜单(Dropdown Menu)

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  7. phpcms - 获取单网页 , 例如关于我们

       {pc:get sql="select * from phpcms_page where catid=2" num="1"}         {loop  ...

  8. Qt5.9 UI设计(一)——在win10系统上安装Qt5.9

    安装环境 win10 系统 Qt5.9.0 版本 官方下载地址 可以从官方网站获取:https://www.qt.io/zh-cn/ 现在的安装包跟以前的有些区别,加上网络比较慢,我这里演示的是Qt5 ...

  9. [转帖]OceanBase 存储引擎详解

    https://zhuanlan.zhihu.com/p/436485359 作者简介:沈炼,蚂蚁集团技术风险部数据库高级专家毕业于东南大学,2014年以来从事 OceanBase 在蚂蚁的架构工作, ...

  10. [转帖]SQL Server 2008~2022版本序列号/密钥/激活码 汇总

    https://www.cnblogs.com/cqpanda/p/16148822.html SQL Server 2022# Enterprise: J4V48-P8MM4-9N3J9-HD97X ...