c#网站开发模板,想在意大利做购物网站,网站开发模式名词,ppt模板免费下载完整版免费无需会员以下是pwn中的题目#xff08;漏洞#xff09;类型#xff1a; 关于pwn的学习#xff1a;
一.什么是pwn#xff1f;#xff08;二进制的漏洞#xff09;
Pwn是一个俚语#xff0c;起源于电子游戏社区#xff0c;经常在英语中用作网络或电子游戏文化中的…
以下是pwn中的题目漏洞类型 关于pwn的学习
一.什么是pwn二进制的漏洞
Pwn是一个俚语起源于电子游戏社区经常在英语中用作网络或电子游戏文化中的一个术语最初这个词是“own”的错误拼写意味着彻底打败或掌握某事。在游戏中如果一个玩家“pwns”另一个玩家那通常意味着他们在竞技中显著地优于对手。
随着时间的推移pwn这个词的意义被扩展到其他领域尤其是计算机安全在网络安全语境中pwn通常指的是通过不同的攻击手段如利用漏洞、进行社会工程学攻击等方法成功地获得了一个设备、系统或网络的未授权控制权一旦攻击者“pwn了”一个系统他们就可以执行各种恶意活动如窃取数据、安装恶意软件、或者制造更广泛的破坏。
特别是在黑客竞赛或数量安全比赛如CTFCapture The Flag中pwn任务经常涉及在一个受限制的环境中寻找和利用漏洞来访问受保护的资源或系统。成功pwn一个目标通常需要高水平的技术能力和创造力。
个人理解它是向存在漏洞的目标服务器发送特定的数据EXPexp脚本使得其执行恶意代码或命令。CTF 中 PWN 类型的题目的目标是拿到 flag一般是在 linux 平台下通过二进制/系统调用等方式编写漏洞利用脚本 exp 来获取对方服务器的 shell然后获得 flag。
pwn的概述 破解、利用成功程序的二进制漏洞 攻破设备、服务器 控制设备、服务器 exploit 用于攻击的脚本与方案 payload攻击载荷是的目标进程被劫持控制流的数据 shellcode调用攻击目标的shell的代码
二.pwn的前置技能
汇编语言函数调用约定大小端函数栈帧C语言python语言gdb调试IDA pro分析linux相关32位与64位各类防护机制NXASLRCanaryRelroELF文件格式系统调用shell命令相关课程
汇编语言
编程语言C语言和Python
计算机组成与原理
软件工具
虚拟机以及VMtools、ubuntu以及插件gdb、pwntools、peda、pwndbg等IDA32位和64位
还有好多工具第一篇日志有一些安装的教程以后慢慢学习其他的
二进制基础: 从C源代码到可执行文件的生成过程
1. 编译由C语言代码生成汇编代码
2. 汇编由汇编代码生成机器码
3链接将多个机器码的目标文件链接成一个可执行文件 什么是可执行文件
1. 广义文件中的数据是可执行代码的文件.out、.exe、.sh、.py
2.狭义文件中的数据是机器码的文件.out、.exe、.dll、.so
可执行文件的分类
WindowsPEPortable Executable
可执行程序.exe
动态链接库.dll
静态链接库.lib
LinuxELFExecutable and Linkable Format一种Linux下常用的可执行文件、对象、共享库的标准文件格式
可执行程序.out
动态链接库.so
静态链接库.a 三.文件保护机制
Linux ELF文件的保护主要有四种Canary、NX、PIE、RELRO 在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 --formatcli)
checksec --file文件名
(2)类型二 ——csv
checksec --outputcsv --file文件名
(3)类型三 ——xml
checksec --outputxml --file文件名
(4)类型四 ——json
checksec --outputjson --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 RELROStack-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_SOURCE2 -O1
开启fortity检查开启后会替换strcpy等危险函数。四.NC命令
一.命令简介
nc是netcat的简写是一个功能强大的网络工具。nc命令在linux系统中实际命令是ncatnc是软连接到ncatnc的主要命令如下。
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_64centos7安装的是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