如何使用C脚本远程打开终端



这个项目由一个服务器(受害者- Debian)和一个客户端(攻击者- Kali)组成。服务器是一个循环运行的程序,监听端口。它通过网络从客户端接收消息。每条消息必须对应一个要执行的系统命令。每条消息必须对应一个要执行的系统命令。执行后,服务器向客户端发送消息执行命令的结果。

客户端是攻击者想要的另一个程序

我试过了;

服务器端(debian):

#define BUFFER_SIZE 1024
int main(void)
{
int sockid;
int port = 1254;
char *ip = "192.168.0.42";
sockid = socket(AF_INET, SOCK_STREAM,0); //paramètre du socket
struct sockaddr_in server_addr, client_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr = inet_addr(ip);
char *buffer[BUFFER_SIZE];
int n, len;
int bind_result = bind(sockid, (const struct sockaddr *)&server_addr, sizeof(server_addr));
if(bind_result<0)
{
printf("Erreur durant la liaison de l'IP au socketn");
}
else
{
printf("Ecoute sur %s:%dn", ip, port);
len = sizeof(client_addr);
n = recvfrom(sockid, (char *)buffer, BUFFER_SIZE,
MSG_WAITALL, (struct sockaddr *) &client_addr,&len);
printf("Message de taille %d envoyé par [%s:%d]: %sn",n, inet_ntoa(client_addr.sin_addr), client_addr.sin_port, buffer);
}
close(sockid);
}

客户端(kali):

#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>
int main(void)
{
int sockid;
int port = 1254;
char *ip = "192.168.0.42";
sockid = socket(AF_INET, SOCK_DGRAM,0);
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr = inet_addr(ip);
char *msg = "Salutation serveur ! ceci est un message test";
//      char *const argv[] = {"/bin/sh", 0};
//      execve("/bin/sh", argv, 0);
sendto(sockid, (const char *)msg, strlen(msg), 0, (const struct sockaddr *) &server_addr,sizeof(server_addr));
//      return 0;
close(sockid);
}

使用此代码,我可以向服务器发送消息或在本地打开shell(使用注释代码)。

但是我想发送"Open terminal"到我的服务器,能够使用命令从我的Kali -两个字,一个反向shell.

如果要远程执行命令,通常使用ssh。你不需要做任何socket编程来使用ssh。

如果你可以使用ssh,那么你应该

。你不应该"重新发明轮子"。而且使用ssh要安全得多!好:听起来这是一个课堂作业。您需要编写一个套接字"监听器"。它执行一些远程命令并返回命令的输出。如果是这样,您可能希望套接字调用popen()。

这里有一个简单的"popen()"例子:

https://c-for-dummies.com/blog/?p=1418

#include <stdio.h>
int main()
{
FILE *p;
int ch;
p = popen("ver","r");   /* DOS */
/*  p = popen("uname","r"); /* Unix */
if( p == NULL)
{
puts("Unable to open process");
return(1);
}
while( (ch=fgetc(p)) != EOF)
putchar(ch);
pclose(p);
return(0);
}

澄清"服务器"的常用含义和"client"

服务器
  • :等待命令,执行命令,返回响应。
  • :向服务器发送命令,等待服务器的响应。

你绝对不需要以编程方式"打开终端"。


附录:

感谢您添加您的"要求"。(班级作业)到你的岗位:

这个项目由一个服务器(受害者- debian)和一个客户端组成(攻击者-卡利)。服务器是一个循环运行的程序监听端口。它通过网络接收来自客户端。每条消息必须对应一个系统命令执行。每条消息必须对应一个系统命令执行。执行后,服务器向客户端发送消息执行命令的结果。

peasy方便。你就要成功了:

  • 你需要修改你的服务器来监听(),然后接受()新的请求,并在一个循环中处理它们。
  • 您的服务器可以使用popen()来执行请求的命令,并将结果写回客户端。忘记"打开终端"吧。
  • 您的客户端正在发送OK。现在您需要修改它以从服务器读取结果。

下面是一些示例代码:https://www.thegeekstuff.com/2011/12/c-socket-programming/(在Google上有很多很多示例)

你可能也对Beej的网络编程指南感兴趣

希望这对你有帮助!

最新更新