Getshell远程连接小知识点

2022/7/9 5:21:41

本文主要是介绍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远程连接小知识点的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程