pwn(一)前置技能

以下是pwn中的题目(漏洞)类型:

关于pwn的学习:

一.什么是pwn?(二进制的漏洞)

"Pwn"是一个俚语,起源于电子游戏社区,经常在英语中用作网络或电子游戏文化中的一个术语,最初,这个词是“own”的错误拼写,意味着彻底打败或掌握某事。在游戏中,如果一个玩家“pwns”另一个玩家,那通常意味着他们在竞技中显著地优于对手。

随着时间的推移,"pwn"这个词的意义被扩展到其他领域,尤其是计算机安全,在网络安全语境中,"pwn"通常指的是通过不同的攻击手段如利用漏洞、进行社会工程学攻击等方法成功地获得了一个设备、系统或网络的未授权控制权,一旦攻击者“pwn了”一个系统,他们就可以执行各种恶意活动,如窃取数据、安装恶意软件、或者制造更广泛的破坏。

特别是,在黑客竞赛或数量安全比赛如CTF(Capture The Flag)中,"pwn"任务经常涉及在一个受限制的环境中寻找和利用漏洞来访问受保护的资源或系统。成功"pwn"一个目标通常需要高水平的技术能力和创造力。

个人理解:它是向存在漏洞的目标服务器发送特定的数据(EXP)exp脚本,使得其执行恶意代码或命令。CTF 中 PWN 类型的题目的目标是拿到 flag,一般是在 linux 平台下通过二进制/系统调用等方式编写漏洞利用脚本 exp 来获取对方服务器的 shell,然后获得 flag。

pwn的概述:

二.pwn的前置技能

汇编语言,函数调用约定,大小端,函数栈帧C语言,python语言,gdb调试,IDA pro分析linux相关:32位与64位,各类防护机制(NX,ASLR,Canary,Relro),ELF文件格式,系统调用,shell命令

相关课程:

汇编语言

编程语言(C语言和Python)

计算机组成与原理

软件工具:

虚拟机以及VMtoolsubuntu(以及插件gdbpwntoolspedapwndbg等)IDA(32位和64位)

(还有好多工具,第一篇日志有一些安装的教程,以后慢慢学习其他的)

二进制基础:

  • 从C源代码到可执行文件的生成过程:
1. 编译:由C语言代码生成汇编代码
2. 汇编:由汇编代码生成机器码
3链接:将多个机器码的目标文件链接成一个可执行文件

什么是可执行文件?

1. 广义:文件中的数据是可执行代码的文件.out、.exe、.sh、.py
2.狭义:文件中的数据是机器码的文件.out、.exe、.dll、.so

可执行文件的分类?

Windows:PE(Portable Executable)
可执行程序.exe
动态链接库.dll
静态链接库.lib
Linux:ELF(Executable and Linkable Format)一种Linux下常用的可执行文件、对象、共享库的标准文件格式
可执行程序.out
动态链接库.so
静态链接库.a

image-20210121181422405

三.文件保护机制

Linux ELF文件的保护主要有四种:CanaryNXPIERELRO
在Linux中可以用checksec来检测文件的保护机制

接下来就了解一下checksec工具的使用

拿到pwn题的第一步大都是运行下,再拿checksec看开启了哪些保护机制,这篇文章主要介绍checksec的安装和使用要点。

1.安装:

git clone https://github.com/slimm609/checksec.sh.git
cd checksec.sh
sudo ln –sf checksec /usr/bin/checksec
(gdb-peda自带老版本的checksec,最后会做对比)

pwntools中自带checksec这个工具,安装了pwntools就不用再特意安装checksec了

关于gdb-peda:

GDB-PEDA-CSDN博客

2.checksec的使用:

(1)类型一 ——normal (or --format=cli)

checksec --file=文件名

(2)类型二 ——csv

checksec --output=csv --file=文件名

(3)类型三 ——xml

checksec --output=xml --file=文件名

(4)类型四 ——json

checksec --output=json --file=文件名

(常用于pwn拿到题目第一件事情checksec一下,然后file一下,然后nc命令互动一下,然后丢进去IDA一下。)

Arch:

程序架构信息。判断是拖进64位IDA还是32位?exp编写时p64还是p32函数?

RELRO

Relocation Read-Only (RELRO) 此项技术主要针对 GOT 改写的攻击方式。它分为两种,Partial RELRO 和 Full RELRO。
部分RELRO 易受到攻击,例如攻击者可以atoi.got为system.plt,进而输入/bin/sh\x00获得shell
完全RELRO 使整个 GOT 只读,从而无法被覆盖,但这样会大大增加程序的启动时间,因为程序在启动之前需要解析所有的符号。

gcc -o hello test.c // 默认情况下,是Partial RELRO
gcc -z norelro -o hello test.c // 关闭,即No RELRO
gcc -z lazy -o hello test.c // 部分开启,即Partial RELRO
gcc -z now -o hello test.c // 全部开启,即Full RELRO

Stack-canary

栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行。当启用栈保护后,函数开始执行的时候会先往栈里插入类似cookie的信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。在Linux中我们将cookie信息称为canary。

gcc -fno-stack-protector -o hello test.c   //禁用栈保护
gcc -fstack-protector -o hello test.c    //启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码
gcc -fstack-protector-all -o hello test.c  //启用堆栈保护,为所有函数插入保护代码
NX

NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,如此一来, 当攻击者在堆栈上部署自己的 shellcode 并触发时, 只会直接造成程序的崩溃,但是可以利用rop这种方法绕过

gcc -o  hello test.c // 默认情况下,开启NX保护
gcc -z execstack -o  hello test.c // 禁用NX保护
gcc -z noexecstack -o  hello test.c // 开启NX保护

PIE

PIE(Position-Independent Executable, 位置无关可执行文件)技术与 ASLR 技术类似,ASLR 将程序运行时的堆栈以及共享库的加载地址随机化, 而 PIE 技术则在编译时将程序编译为位置无关, 即程序运行时各个段(如代码段等)加载的虚拟地址也是在装载时才确定。这就意味着, 在 PIE 和 ASLR 同时开启的情况下, 攻击者将对程序的内存布局一无所知, 传统的改写
GOT 表项的方法也难以进行, 因为攻击者不能获得程序的.got 段的虚地址。
若开启一般需在攻击时泄露地址信息

gcc -o hello test.c  // 默认情况下,不开启PIE
gcc -fpie -pie -o hello test.c  // 开启PIE,此时强度为1
gcc -fPIE -pie -o hello test.c  // 开启PIE,此时为最高强度2
(还与运行时系统ALSR设置有关)
FORTIFY

这是一个由GCC实现的源码级别的保护机制,其功能是在编译的时候检查源码以避免潜在的缓冲区溢出等错误。
简单地说,加了这个保护之后,一些敏感函数如read, fgets,memcpy, printf等等可能
导致漏洞出现的函数都会被替换成__read_chk,__fgets_chk, __memcpy_chk, __printf_chk等。
这些带了chk的函数会检查读取/复制的字节长度是否超过缓冲区长度,

通过检查诸如%n之类的字符串位置是否位于可能被用户修改的可写地址,
避免了格式化字符串跳过某些参数(如直接%7$x)等方式来避免漏洞出现。
开启了FORTIFY保护的程序会被checksec检出,此外,在反汇编时直接查看got表也会发现chk函数的存在
这种检查是默认不开启的,可以通过

gcc -D_FORTIFY_SOURCE=2 -O1
开启fortity检查,开启后会替换strcpy等危险函数。

 四.NC命令

一.命令简介

nc是netcat的简写,是一个功能强大的网络工具。nc命令在linux系统中实际命令是ncat,nc是软连接到ncat,nc的主要命令如下。

1.实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口

2.端口的扫描,nc可以作为client发起TCP或UDP连接

3.机器之间传输文件

4.机器之间网络测速

 nc如果找不到nc命令可以使用yum install -y nc安装,其中centos6系统安装的是nc-1.84-24.el6.x86_64,centos7安装的是nmap-ncat-6.40-19.el7.x86_64。

1.验证服务器的端口是否通

首先在虚拟机中执行命令:ifconfig查看自己虚拟机的ip

nc -nv 10.10.100.221 22

2.拷贝文件功能

首先在接收端开启nc监听 (666是接收端和发送端建立连接的端口)

nc -lp 666 > test.txt

   然后在文件发送终端机器上发送文件

nc  10.10.100.221 666 < test.txt

3.终端之间通信

nc -l 666
nc 10.10.100.221 666

4.验证UDP端口

nc -uv 10.10.100.221  111

5.测试网速

以上的实操用我自己的端口我还没做出来,看下别人的:

Linux命令之nc_linux nc-CSDN博客

使用语法以及参数说明

1.使用语法: ncat [options] [hostname] [port]

2.参数说明(借鉴其他人的)

 

其实常用的就只有几个,把常用的记住就可以了(大部分了解就可以了)

例题:test_your_nc1(来自BUUCTF)

我直接展示用linux扫描后的部分(前面的部分需要用到IDA进行静态分析题目给的文件)

解题具体步骤:BUUCTF PWN-----第1题:test_your_nc_buuctf pwn第一题-CSDN博客

我直接nc这个网址,发现了报错,百度一下

看了别人的wp,发现网址中间的冒号要删掉

具体看一下是什么原因:

我猜测意思大概就是:ip地址中间的那个冒号把ip给中断掉了,所以导致linux无法解析这个ip,所以就会报错

先输入:nc node.buuoj.cn 28080

然后回车,输入ls

发现里面有flag文件,直接:cat flag,得到flag

成功解出flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/834442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字化转型浪潮下,信创如何破浪前行,六招助你稳中求胜

信创改造落地过程中的六个难点及应对经验 技术生态迅猛发展&#xff0c;尚未成熟且多元化&#xff0c;信创技术栈应用经验匮乏&#xff0c;导致改造落地工作面临重重挑战。在此背景下&#xff0c;如何克服技术难题&#xff0c;推动信创改造顺利实施&#xff0c;成为业界亟待解决…

Linux nohup 命令

Linux nohup 命令 应用场景 使用 PyCharm 连接服务器跑模型虽然很方便&#xff0c;但是如果遇到网络不佳、PyCharm出BUG、急需转移阵地等情况就只能中断训练&#xff0c;前面的全白跑了。 因此可以尝试直接在服务器上使用命令跑模型&#xff0c;这个命令好说&#xff0c;笨一…

为什么需要归档和管理合同

归档和管理合同是非常重要的&#xff0c;主要有以下几个原因&#xff1a; 1. 法律合规性&#xff1a;公司需要遵守法律和监管要求&#xff0c;合同是法律文件&#xff0c;涉及公司的权益和责任。归档和管理合同可以确保公司遵守法律法规&#xff0c;合同的内容和执行过程都符合…

水质监测设备预警系统

随着工业化进程的加快和城市化水平的提高&#xff0c;水质安全问题愈发受到社会各界的广泛关注。为了确保水资源的清洁与安全&#xff0c;水质监测设备预警系统成为了不可或缺的利器。在这个背景下&#xff0c;HiWoo Cloud平台凭借其先进的技术和卓越的性能&#xff0c;为水质监…

【Java SE】对象的比较

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容满满干货&#xff0c;将会深入介绍对象与对象之间是如何进行比较的&#xff0c;我们知道基本数据类型是可以直…

[Linux]如何在Ubuntu 22.04系統安裝Node-red?

Node-red是一個建立在Node.js上的視覺化程式設計工具&#xff0c;其常見的應用情境為建置或轉換各項硬體之間的通信協定的物聯網或工聯網場域&#xff0c;其可藉由設置來安裝第三方應用模組來建置多樣的通信協定節點&#xff0c;包含modbus in/out, mqtt in/out, websocket in/…

Mac YOLO V9推理测试

环境&#xff1a; Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、准备工作 工程及模型下载&#xff1a;​​​​​​​https://github.com/WongKinYiu/yolov9 git clone https://github.com/WongKinYiu/yolov9.git 克隆后安装相关依赖&#xff08;没啥依赖好装…

容器集群管理系统Kubernetes(K8S)

目录 一、前言 1.1什么是云原生&#xff1f; 1.2云要素的四要素&#xff1f; 1.2.1微服务 1.2.2容器化 1.2.3DevOps 1.2.4持续交付 1.3云平台有哪些&#xff1f; 1.4SRE 二、Kubernetes 概述 2.1K8S 是什么 2.2K8S作用 2.3K8S版本 2.4为什么要用 K8S 2.5K8S 的特…

在Ubuntu上安装Anaconda之后,启动失败

为了方便管理Pythonu环境&#xff0c;在Ubuntu的Docker容器中安装了Anaconda&#xff0c;安装完成&#xff0c;启动时出现如下错误&#xff1a; conda activate xxx usage: conda [-h] [--no-plugins] [-V] COMMAND ... conda: error: argument COMMAND: invalid choice: acti…

如何让加快OpenHarmony编译速度?

OpenHarmony 有两种编译方式&#xff0c;一种是通过 hb 工具编译&#xff0c;一种是通过 build.sh 脚本编译。本文笔者将提升 build.sh 方式编译速度的方法整理如下&#xff1a; 因为笔者只用 build.sh 脚本编译&#xff0c;没用过 hb 工具&#xff0c;好像下面的选项也可以用于…

Jenkins--自动化构建和部署SpringBoot项目

一、实现目标 通过在Jenkins中创建流水线任务&#xff0c;编写流水线脚本以实现自动化构建和部署SpringBoot项目。流水线脚本主要实现以下几个步骤&#xff1a; Preparation&#xff1a;从gitee上拉取远程仓库的SpringBoot项目代码。Build&#xff1a;使用Maven对拉取的代码进…

部署JVS服务出现上传文件不可用,问题原因排查。

事情的起因是这样的&#xff0c;部门经理让我部署一下JVS资源共享框架&#xff0c;项目的地址是在这里 项目资源地址 各位小伙伴们做好了&#xff0c;我要开始发车了&#xff0c;全新的“裂开之旅” 简单展示一下如何部署JVS文档 直达链接 撕裂要开始了 本来服务启动的好好…

链式二叉树的基本操作1

1.概念回顾 讲二叉树的基本操作之前&#xff0c;我们回顾一下二叉树的概念 在讲树之前&#xff0c;我们的每讲一种数据结构&#xff0c;无外乎就是在讲它们的增删查改&#xff0c;但是在树这里&#xff0c;就有了不小变化。 2.结点的定义 既然是链式二叉树&#xff0c;那必须…

部署 Sentinel 控制台:实现流量管理和监控

序言 Sentinel 是阿里巴巴开源的一款流量防护与监控平台&#xff0c;它可以帮助开发者有效地管理微服务的流量&#xff0c;实现流量控制、熔断降级、系统负载保护等功能。本文将介绍如何在项目中部署和配置 Sentinel 控制台&#xff0c;实现微服务的流量防护和监控。 一、Sen…

深入理解Linux中TCP/IP协议栈的实现原理与具体过程

一、Linux内核与网络体系结构 在我们了解整个linux系统的网络体系结构之前&#xff0c;我们需要对整个网络体系调用&#xff0c;初始化和交互的位置&#xff0c;同时也是Linux操作系统中最为关键的一部分代码-------内核&#xff0c;有一个初步的认知。 1、Linux内核的结构 …

智能改写文章怎么做,3个方法让你轻松改出高质量文章

在如今的自媒体兴盛时代&#xff0c;内容创作对于自媒体人来说是必不可少的一项工作&#xff0c;然而&#xff0c;如何在保持内容原创性的前提下迅速生成高质量的文章变得尤为重要。智能改写文章的出现&#xff0c;为所有的自媒体人带来了一种全新的思路&#xff0c;它让大家在…

2024付费进群系统,源码及搭建变现视频课程(教程+源码)

前三节讲解搭建支付对接&#xff0c;后两节讲解一些引流变现的方法&#xff0c;还有一种变现就是帮人搭建这样的平台&#xff0c;因为全网都没有一套完整的视频教怎么搭建的&#xff0c;有也只是文字教程&#xff0c;一般新人根本看不懂&#xff0c;我视频实操演示&#xff0c;…

16-LINUX--线程安全

一。线程安全 线程安全即就是在多线程运行的时候&#xff0c;不论线程的调度顺序怎样&#xff0c;最终的结果都是 一样的、正确的。那么就说这些线程是安全的。 要保证线程安全需要做到&#xff1a; 1&#xff09; 对线程同步&#xff0c;保证同一时刻只有一个线程访问临界资…

minio安装部署

MinIO 介绍 MinIO是一个对象存储解决方案&#xff0c;它提供了与Amazon Web Services S3兼容的API&#xff0c;并支持所有核心S3功能。 MinIO有能力在任何地方部署 - 公有云或私有云&#xff0c;裸金属基础设施&#xff0c;编排环境&#xff0c;以及边缘基础设施。 MinIO 安装…

【网络基础2】深入理解TCP协议:协议段、可靠性、各种机制

文章目录 1. TCP协议段格式1.1. 如何解包 / 向上交付1.1.1. 交付1.1.2. 解包 1.2. 如何理解可靠性1.2.1. 确认应答机制&#xff08;ACK&#xff09;1.2.2. 序号 与 确认序号 2. TCP做到全双工的原因2.1. 16位窗口大小2.2. 6个标记位 3. 如何理解连接3.1 连接管理机制3.1.1. 三次…