gpt4 book ai didi

c - 隐式链接的 C 程序未连接到本地主机

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:02 24 4
gpt4 key购买 nike

我的实验哪里出了问题:

我正在尝试通过实验推断出创建简单 shellcode 的细节。我的第一印象是我可能无法使用导入,因为我的 shellcode 没有被目标程序的编译器链接。然后我开始想知道我可以在不使用导入的情况下通过套接字创建一个简单的 shell 命令接口(interface)有多小,所以我写了一些代码;并开始忽略隐式调用警告:

// socket_family
#define AF_INET 2
#define AF_PACKET 17
// socket_type
#define SOCK_STREAM 1

typedef unsigned short sa_family_t;

struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
};

struct in_addr {
unsigned long s_addr; // load with inet_pton()
};

struct sockaddr_in {
short sin_family; // e.g. AF_INET, AF_INET6
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, above
char sin_zero[8]; // zero this if you want to
};

int main(void) {
int sfd;
const short family = AF_INET;
const char host[] = "127.0.0.1";
struct sockaddr addr;
struct sockaddr_in *addr_full = (struct sockaddr_in*)&addr;

if (sfd = socket(family, SOCK_STREAM, 0) < 0) return 1;
memset(&addr, 0, sizeof(struct sockaddr));
addr_full->sin_family = family;
addr_full->sin_port = htons(8000);
inet_pton(family, host, &(addr_full->sin_addr.s_addr));
if (connect(sfd, &addr, sizeof(struct sockaddr)) < 0) return 2;
close(sfd);
return 0;
}

某处我没有正确连接到我的 python -m SimpleHTTPServer;它报告 在 0.0.0.0 端口 8000 上提供 HTTP

$ gcc my_program.c -o my_program
$ ./my_program
$ echo $?
2

我正在参加有关软件安全的 Coursera 类(class);这个主题的很多内容对我来说都是新的。

编辑:

删除重新定义并添加包含后:

#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>

int main(void) {
int sfd;
const short family = AF_INET;
const char host[] = "127.0.0.1";
struct sockaddr_in addr_full; // = (struct sockaddr_in*)&addr;

if (sfd = socket(family, SOCK_STREAM, 0) < 0) return 1;
memset(&addr_full, 0, sizeof(struct sockaddr));
addr_full.sin_family = family;
addr_full.sin_port = htons(8000);
inet_pton(family, host, &(addr_full.sin_addr.s_addr));
if (connect(sfd, (struct sockaddr*)&addr_full, sizeof(struct sockaddr)) < 0) return 2;
close(sfd);
return 0;
}

程序仍然以 2 退出。

最佳答案

没有正确分配套接字文件描述符。添加括号,我应该分配描述符,然后检查它的值:

if ((sfd = socket(family, SOCK_STREAM, 0)) < 0) return 1;

关于c - 隐式链接的 C 程序未连接到本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30792515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com