网络协议基础01
网络协议基础01
1、网络协议分层
对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多种多样的设备,就协商出一套通用的网络协议。
这个网络协议是分层的,每一层都有各自的作用和职责,通常是由上到下,分成五层。
应用层
传输层
网络层
数据链路层
物理层
(1)应用层
最上层的,也是我们能直接接触到的就是应用层(Application Layer),我们电脑或手机使用的应用软件都是在应用层实现。那么,当两个不同设备的应用需要通信的时候,应用就把应用数据传给下一层,也就是传输层。
所以,应用层只需要专注于为用户提供应用功能,不用去关心数据是如何传输的,就类似于,我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不需要关心快递是如何被运输的。
而且应用层是工作在操作系统中的用户态,传输层以下则工作在内核态。
(2)传输层
应用层的数据包会传给传输层,**传输层(Transport Layer)**是为应用层提供网络支持的。
在传输层会有两个传输协议,分别是TCP ...
虚拟靶场环境搭建
虚拟靶场环境搭建
1、VMware虚拟网络编辑
NAT模式
模式介绍
网络适配器:NAT
虚拟网络设置:
vmnet0:桥接模式 – 自动连接
vmnet1:仅主机
vmnet8:NAT模式 – NAT模式
123NAT(Network Address Translation网络地址转换)模式:一般是vmnet8,如果你的网络IP资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择。NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。NAT模式的虚拟机就是通过宿主机上网和交换数据的。在NAT模式下,虚拟机的网卡连接到宿主机的VMnet8上(安装完Vmware虚拟机会多出两个虚拟网卡Vmware1和Vmware8)。此时系统的VMware NAT Service服务就充当了路由器,负责将虚拟机发送到Vmnet8的包进行地址转换之后发到实际的网络上,再将实际网络上返回的包进行地址转换后通过VMnet8发送给虚拟机。VMware DHCP Service负责为虚拟机分配IP地址。
其网络结构如下图所示:
桥接模式
网络适配器:桥接
虚拟网络设 ...
云服务器与Docker
云服务器与Docker
1、云服务器
三家厂商
123https://cloud.tencent.com/product/cvm 腾讯云https://www.aliyun.com/product/ecs/ 阿里云https://www.huaweicloud.com/theme/512014-1-G 华为云
一台通过公网访问的虚拟服务器,可以是Windows、Linux系统。
云服务器VPS(Virtual Private Server)是一种虚拟化技术,它将物理服务器划分为多个独立的虚拟服务器。每个虚拟服务器都具有自己的操作系统、磁盘空间、CPU资源和内存,并且可以像独立的服务器一样运行和管理。
使用云服务器VPS,用户可以获得一个独立的虚拟环境,享受与实际服务器相似的灵活性和可靠性。用户可以根据自己的需求选择服务器的配置,包括CPU核数、内存大小、存储空间等。此外,用户还可以根据需要安装和配置所需的软件和应用程序。
云服务器VPS具有以下优点:
灵活性:用户可以根据需要轻松扩展活所系虚拟服务器的资源。
独立性:每个虚拟服务器都是相互隔离的,用户之间不会相互干扰。
可靠性: ...
Linux基础
Linux基础
Linux目录结构
1234567891011121314151617181920212223242526272829303132333435363738394041424344/:根目录,每一个文件和目录都从这里开始。只有root用户具有该目录下的写权限。/bin:用户二进制文件,包含二进制可执行文件。系统的所有用户使用的命令都设在这里,例如:ps,ls,ping,grep,cp等。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev :设备文件,dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。/etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。/lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。/opt:可选的附加应用程序,这是给主机额外安 ...
py逆向工具使用
py逆向工具使用
一、前言
py逆向,找个题目举例子说明一下[NISACTF 2022]ezpython。
二、题目
工具: 1.pyinstxtractor.py 下载地址:https://sourceforge.net/projects/pyinstallerextractor/ 2.HEX编辑器,我这里使用winHEX 下载地址:https://www.jb51.net/softs/16546.html#download 3. uncompyle 库 可在命令框中输入:pip install uncompyle6 进行安装
需要用到这两个工具
把给出的exe文件放到跟pyinstxtractor.py的同一目录下,然后
1python pyinstxtractor.py 附件.exe
会生成一个和附件名相同的文件夹
进入到文件夹找到这两个文件
struct.pyc这个文件一般都是的这个名字,src.pyc这个文件跟附件相关,名字有时不一样。
然后把这两个文件放到010Editor(编辑器都行)中
把struct.pyc的第一行添加到src.pyc中,因为struct保存着 ...
pwn中直接调用(plt)system函数和调用call system函数区别
pwn中直接调用(plt)system函数和调用call system函数区别
溢出大概有两种形式
直接调用system函数,就是plt表的system函数
1payload = padding + p64(system_addr)+p64(1)+p64(binsh_addr)
调用call system
1payload = padding + p64(call_system_addr)+p64(binsh_addr)
可以看出上述两种情况只差了一个p64(1)。
其实这个p64(1)的作用是相当于一个返回地址。
为什么?
先回顾一下函数调用过程,比如说我们要调用system(‘/bin/sh’)。
首先程序在编译这一步,实际上执行的是:
123lea eax, [address_binsh_str]push eaxcall system
call指令其实还有两步:
12push ip ;执行system_addr之后的返回地址jmp system_addr
因此,直接调用system函数时,在system地址后面要接上一个返回地址,再接上system函数的参数。
而如果 ...
glibc版本的更换
glibc版本的更换
前言
在我们学习pwn或者做pwn题的时候,尤其是涉及到堆的时候,glibc版本的要求也是比较重要的。
介绍
Libc,Glibc都是Linux版本下的C语言函数库
Libc(C Library)是ANSI C最基本的C语言函数库,由头文件不同被划分为15个部分。
Glibc(GNU Library)是GNU C函数库的一部分,主要适用于Linux系统。
如何更换glibc版本
1、下载安装patchelf
1sudo apt install patchelf
输入:
1patchelf -h
看是否安装成功
2、下载glibc-all-in-one
1git clone https://username:passwords@github.com/matrix1001/glibc-all-in-one
然后执行:
123update_list./update_list会出现list和old_list
然后可以使用cat list查看我们需要的libc。
123456789101112131415161718192021222324252627282930313 ...
花指令总结
花指令总结
1、花指令介绍
花指令的目的是干扰ida和od等软件对程序的静态分析。使这些软件无法正常的反汇编出原始代码。
2、常见的两类反汇编算法
反编译器的工作原理一般是线性扫描反汇编算法或行进递归反汇编算法。
线性扫描反汇编算法:
逐行反汇编,缺点是在于冯诺依曼体系结构下,无法区分数据与代码,从而导致将代码段嵌入的数据误解释为指令的操作码。以致最后得到错误的反汇编结果。
行进递归反汇编算法:
按照代码可能的执行顺序进行反汇编程序。行递归算法通过程序的控制流来确定反汇编的下一条指令,遇到非控制转移指令时顺序徐进行反汇编,而遇到控制转移指令时则是从转移地址出开始反汇编。缺点在于准确确定间接转移目的地址难度较大。
3、花指令实现
12345678910111213141516171819//源码#include<stdio.h>#include<windows.h>int main(int argc, char* argv[]){ int a = MessageBoxA(NULL, "Hello", "main", ...
ELF文件格式
ELF文件格式
1、简介
可执行与可链接格式(Executable and Linkable Format,ELF),常被称为ELF格式,是一种用于可执行文件、目标代码、共享库和核心转储的标准文件格式
ELF文件有三种:
可重定向文件(.o文件):包含基础代码和数据,但它的代码及数据都没有指定绝对地址,因此它适合与其他目标文件链接来创建可执行文件或者共享目标文件。
可执行文件(.out):包含代码和数据,是可以直接运行的程序。其代码和数据都有固定的地址(或相对于基址的偏移),系统可根据这些地址信息把程序加载到内存执行。
共享目标文件(.so):也称动态库文件,包含了代码和数据,这些数据是在链接时被链接器(ld)和运行时动态链接器(ld.so.l、libc.so.l、ld-linux.so.l)使用的。
2、ELF文件基本格式
ELF文件有一定格式,从文件格式上来说,分别从编译阶段的链接视角和程序的执行视角去分析
从程序执行视角来看就是Linux加载器加载的各种Segment的集合。根据各种节的权限来分段,段就是相同权限的节的合并
从链接角度来看就是各种节section
ELF文件 ...
延迟绑定
延迟绑定
静态链接:
静态链接是将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一起,生成一个可执行文件
程序运行速度快,但是浪费空间,更新库函数代码也困难,需要重新编译链接
动态链接:
动态链接是在程序运行时将程序与共享库链接起来,允许多个程序共享一个库。当一个程序被加载到内存中运行时,动态链接器会检查程序所需的共享库,并将它们加载到内存中,然后动态链接器也会将程序中对共享库中函数和变量的引用重定位实际的地址。
动态链接的优点是它可以减少内存占用和磁盘空间的浪费,并且多个程序可以共享同一个库,也更容易更新升级。但是由于把链接推迟到了程序运行时,所以每次执行程序时都需要链接,性能会降低。
因为Gcc默认是动态链接,所以为了解决动态链接缺点的问题有了延迟绑定
延迟绑定是动态链接器用来减少程序启动时间的一种技术。延迟绑定就是在函数第一次被调用的时候再和函数地址绑定
GOT 全称是全局偏移量表(Global Offset Table),用来存储外部函数在内存的确切地址。GOT 存储在数据段(Data Segment)内,可以在程序运行中被修改。
PLT 全称是程序链接表(Proce ...