ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Getshell远程连接小知识点

2022-07-08 13:05:15  阅读:210  来源: 互联网

标签:知识点 Getshell 文件 句柄 连接 描述符 进程 接字 远程


for /L %i in (1,1,255) do ping -n 1 -w 60 192.168.1.%i | find "回复" >>d:\pingall.txt查找ip

socket#

socket又称套接字,是API(应用程序编程接口),背后实现了TCP/IP协议栈。Socket用于描述IP地址和端口,是一个通信链的句柄,用来实现不同虚拟机或物理机之间的通信。Socket可理解为一种特殊的文件,在服务器和客户端各自维护一个文件,并使用SocketAPI函数对其进行文件操作。在建立连接打开后,可以向各自文件写入内容供对方读取或读取对方内容,通信结束时关闭文件。

套接字设计的总体思路#

单个系统调用就可以创建任何套接字,因为套接字是相当笼统的。一旦套接字创建后,应用程序还需要调用其他函数来指定具体细节。

套接字描述符#

其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdout、stderr

TCP/IP协议族#

包括运输层、网络层、链路层,而socket所在位置如图,Socket是应用层与TCP/IP协议族通信的中间软件抽象层。

 

文件描述符和文件指针的区别#

文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。

文件指针:C语言中使用文件指 针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针就是句柄的句柄(在Windows系统上,文件描述符被称作文件句柄)。

什么是PBC#

为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。

 

头文件#

  • sys/socket.h 函数和数据结构定义

  • netinet/in.h IPv4和IPv6协议

  • sys/un.h UNIX机器间通信

  • arpa/inet.h 处理数字从操作系统字节序到网络字节序

  • netdb.h 映射服务到IP地址

SocketAPI函数#

struct sockaddr 和 struct sockaddr_in 这两个结构体用来处理网络通信的地址。

socket() 创建套接字,根据指定地址、数据类型、协议分配一个套接字的描述字及所用资源。

int socket(int domain, int type, int protocol)

参数:#

  • domain 协议簇/域,通常为AF_INET(IPv4)、AF_INET6(IPv6)

  • type 套接字类型,主要是SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)

  • protocol 通常为0

Socket有3种类型#

  • 流式 SOCK_STREAM 流失套接字提供可靠的、面向连接的通信流,使用TCP协议从而保证数据传输的正确性和顺序性。

  • 数据报SOCK_DGRAM 数据包套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,不保证是可靠的无差错的,使用数据报协议UDP。

  • 原始SOCK_RAW 原始套接字允许对底层协议如IP或ICMP进行直接访问,功能强大但使用不便,主要用于协议开发。

 

htons();

作用是将端口号由主机字节序转换为网络字节序的整数值。(host to net)

inet_addr();

作用是将一个IP字符串转化为一个网络字节序的整数值,用于sockaddr_in.sin_addr.s_addr。

inet_ntoa();

作用是将一个sin_addr结构体输出成IP字符串(network to ascii)。

bind();

将一本地地址与一套接口捆绑。本函数适用于未连接的数据报或流类套接口,在connect()listen()调用前使用。

listen();

为了接受连接,先用socket()创建一个套接口的描述字,然后用listen()创建套接口并为申请进入的连接建立一个后备日志,然后便可用accept()接受连接了。

注;一个网络连接对应了一个文件描述符,发送和接收数据最基本的方法和文件操作是完全一致的,就是read/write

正连#

shellcode的功能为:让漏洞程序在其本地开启一个网络端口,并在有连接连入时将shell进程的输入输出绑定到该连接上

反连#

shellcode的功能为:让漏洞程序去连接远程的攻击者机器,并且将shell进程的输入输出绑定到此连接上。

用pwntools需要两步#

第一步会把与攻击者建立连接的文件描述符存放到rbp寄存器中,第二步会默认使用rbp寄存器中的文件描述符来重定向shell进程的输入和输出,即完成反连shell。

不连#

其实并不可能不连。你要远程攻击他,那必定得有数据通路,所以可以复用你攻击打过去的这个连接来获得交互shell。这个不连其实是不产生新的连接,也就是连接复用。

Linux反弹shell(文件描述符与重定向)#

linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。

注意:#

(1)以后再打开文件,描述符可以依次增加 (2)一条shell命令,都会继承其父进程的文件描述符,因此所有的shell命令,都会默认有三个文件描述符。

标签:知识点,Getshell,文件,句柄,连接,描述符,进程,接字,远程
来源: https://www.cnblogs.com/qclown/p/16457842.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有