自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 祥云杯2022-unexploitable - wp

爆破法解PWN祥云杯

2022-11-08 17:26:45 709 4

原创 [time_formatter]--UAF

这个题很有意思,第一次利用UAF漏洞,PWN的道路道阻且长。

2022-10-07 16:54:10 363 1

原创 第二章:编译和链接_3_4

第二章:编译和链接_3_42.3 链接器的年龄比编译器长程序并不是一写好久永远不变的,它会经常被修改。比如我们在第一条指令之后,第五条指令之前插入了一条或多条指令,那么第五条指令后面的的指令的位置也会相应的往后移动,当程序修改的时候,这些位置都要重新计算,十分繁琐又耗时,并且容易出错。这种重新计算各个目标地址的过程叫做 重定位于是 符号这个概念随着汇编语言的普及迅速的被使用,他可以用来表示一个地址,这个地址可能是一段程序的起始地址,也可以是一个变量的起始地址。2.4 模块拼装——静态链接程序设

2022-04-16 13:01:52 330

原创 第二章:编译和链接_2

第二章:编译和链接_2编译器做了什么从直观来说,编译器就是将高级语言翻译成机器语言的一个工具。编译器的存在可以让程序员更加关注程序本身的逻辑,而尽量少考虑计算机本身的限制,如字长,内存大小,通信方式,存储方式。编译过程一般可以分为6步, 扫描,语法分析,语义分析,源代码优化,代码生成和目标代码优化2.2.1 词法分析首先源代码被输入到 扫描器,扫描器的任务很简单,它只是简单地进行词法分析,运用一种类似于 有限状态机的算法可以很轻松地将源代码的字符序列分割成一系列的 记号(token)。词法分析产

2022-04-16 10:03:43 220

原创 第二章:编译和链接_1

第二章:编译和链接_12.1 被隐藏了的过程当我们用GCC编译文件的时候有很多步骤被隐藏了,GCC编译的过程可以分为四个步骤,分别是 预处理,编译,汇编,链接2.1.1 预编译使用命令来让编译器只执行预编译$gcc -E hello.c -o hello.i或者$gcc hello.c > hello.i预编译的主要过程是处理那些源代码中的以“#”开头的预编译指令。比如“#include”,“#define”等,主要处理规则如下:将所有的“#define”删除,并且展开所有

2022-04-14 14:26:23 269

原创 const和static的区别

const和static的区别constconst修饰的变量不能被更改,但是const修饰又有三种特殊的修饰方法。const修饰指针——常量指针const修饰常量——指针常量const既修饰指针,又修饰常量const修饰指针const int *p = &a;(p为常量指针)在被const修饰后,p为常量指针。常量指证:指针的指向(即指向的地址)可以修改,但是指向的数值不能修改。const修饰常量int *const p = &a;(p为指针常量)指针常

2022-04-11 19:08:51 1579

原创 攻防世界进阶区——greeting-150

攻防世界进阶区——greeting-150进阶区的格式化字符串漏洞,能做到这里的人肯定不差,我就不在重复写那些基础的东西了。这里我尝试用了一下格式化字符串漏洞神器 FmtStr。文件分析先用checksec来查一下coke@ubuntu:~/桌面/CTFworkstation/PWN/OADW/gretting_150$ checksec greeting_150[*] '/home/coke/桌面/CTFworkstation/PWN/OADW/gretting_150/greeting_15

2022-04-10 11:33:21 4545 3

原创 RELRO保护原理

RELRO保护原理简介由于 GOT和PLT以及延迟绑定的原因,在启用延迟绑定时,符号解析只发生在第一次使用的时候,该过程是通过PLT表进行的,解析完成后,相应的GOT条目会被修改为正确的函数地址。因此,在延迟绑定的情况下。.got.plt必须可写,这就给了攻击者篡改地址劫持程序的执行的可能。RELRO(ReLocation Read-Only)机制的提出就是为了解决延迟绑定的安全问题,它最初于2004年由Redhat的工程师Jakub jelnek实现,他将符号重定位表设置为只读,或者在程序启动时就解

2022-04-08 20:08:29 3234

原创 第一章:计算机的软硬件基本结构—6

第一章:计算机的软硬件基本结构—61.6 众人拾柴火焰高1.6.1 线程基础在现代软件系统中,线程和进程一样重要。特别是随着CPU频率增长开始出现停滞,而开始向多核发展。多线程,作为实现软件并发执行的一个重要的方法,也开始具有越来越重要的地位。什么是线程​ 线程(Thread),有时候被称为 轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元,一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。通常意义上,一个进程由一个到多个线程组成,各个

2022-04-08 17:23:39 210

原创 第一章:计算机的软硬件基本结构_5

第一章:计算机的软硬件基本结构_51.5 内存不够怎么办操作系统的多任务功能使得CPU能够在多个进程之间很好的共享,从进程角度好像它独占了CPU而不用考虑与其他进程分享CPU。为了更有效的利用硬件资源,我们必须同时运行多个程序,正如前面的多道程序,分时系统和多任务一样,当我们能够同时运行多个程序时,CPU的利用率较高。但是就会有一个很明显的问题, 如何将计算机上有限的物理内存分配给多个程序使用。在分配内存时会出现的问题。地址空间不隔离 所有程序直接访问物理地址,程序所使用的内存空间不

2022-04-07 21:07:38 159

原创 第一章:计算机的软硬件基本结构_4

第一章:计算机的软硬件基本结构_41.4 操作系统做什么操作系统的一个功能是提供抽象的接口,另一个主要功能是管理硬件资源。1.4.1 不要让CPU打盹在计算机发展的早期,CPU资源十分昂贵,当CPU运行一个程序的时候,该程序需要读写磁盘,CPU就空闲下来了。这极大的浪费了CPU的资源。于是人们编写了一个监控程序,当某个程序暂时无须使用CPU时,监控程序就把另外正在等待CPU资源的程序启动,使得CPU能充分利用起来。这被称为 多道程序。但是这种程序的调度策略太过粗糙。程序之间不分轻重缓急。稍微改

2022-04-05 14:35:29 5082

原创 第一章:计算机的软硬件基本结构_3

第一章:计算机的软硬件基本结构_31.3 站得高,望得远系统软件可以分为两块,一块是平台性的,比如操作系统内核,驱动程序,运行库,和数以千计的系统工具。另一块是用于程序开发的,比如编译器,汇编器,链接器等开发工具和开发库。计算机系统软件体系结构采用一种层的结构,有人说过一句名言:计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决!系统软件体系结构中,各种软件的位置如下图所示。每个层次之间相互通过共同的通信协议来通信,我们一般将其称为 接口,接口下面那层是接口的提供者,由他定义接口

2022-04-05 14:03:53 7467

原创 第一章:计算机的软硬件基本结构_2

第一章:计算机的软硬件基本结构1.2 万变不离其宗计算机是个非常广泛的概念,包括大到要装数层楼的超级计算机,也有小到手上拿的手机上的嵌入式芯片都可以被称为计算机。撇开计算机硬件中复杂的各种设备,芯片,以及外围接口的等,站在软件开发者的角度去看,我们只需要抓住硬件的几个关键部件,对于系统应用开发者来说,最为关键的部件分别是,中央处理器CPU,内存和I/O控制芯片,对于普通应用程序开发者来说,他们只需要关心CPU以外其他的都不需要,对于一些高级平台的开发者来说(如java,.NET或脚本语言开发者),

2022-04-05 12:06:43 2070

原创 第一章:计算机的软硬件基本结构—Q&A

第一章:计算机的软硬件基本结构—Q&A1.1 从hello World说起问题程序为什么要被编译了以后才可以运行?A:编程语言是程序员的语言,但是不是计算机能够理解的语言,计算机能够理解的语言只有机器码,也就是二进制的0和1。所以程序需要被编译才能运行。编译器在把C语言程序转换为可以执行的机器码的过程中做了什么,怎么做的?A:编译分为四个步骤,分别是预处理,编译,汇编,链接。预处理首先对以#开头的预编译命令处理。删除所有注释。编译会经过一系列的词法分析,语法分析,语义分析,优

2022-04-05 11:12:52 994

原创 过程化平台文件代码

过程化平台文件代码LB8103有两个文本文件lb8103a.txt和lb8103b.txt。键盘输入需要读的文件名,然后从该文件中读出前n(<=26)个字符。图1中的lb8103a.txt和3,图2中的lb8103b.txt和8,图3中的lb8103.txt和3是从键盘输入的。#include <stdio.h>int main(void){ int n, sum = 0, i; char ch; char str[20]; FILE *fp; printf(

2022-04-02 21:20:00 351

原创 攻防世界高手进阶区 ——Welpwn

攻防世界高手进阶区 ——Welpwn分析文件checksec分析coke@ubuntu:~/桌面/CTFworkstation/OADW/welpwn$ checksec welpwn[*] '/home/coke/桌面/CTFworkstation/OADW/welpwn/welpwn' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX e

2022-03-21 21:05:54 1137 4

原创 C语言排序算法

C语言排序算法冒泡排序#include <stdio.h>void bubble_sort(int arr[], int len) { int i, j, temp; for (i = 0; i < len - 1; i++)//第一重for循环 for (j = 0; j < len - 1 - i; j++)//第二重for循环,第二重for循环里面次数比第一重少一次 if (arr[j] > arr[j + 1

2022-03-16 20:43:36 987

原创 攻防世界高手进阶区 ——warmup

攻防世界高手进阶区 ——warmup题目并没有给附件,看样子像是一个盲打题。就是BROPBROP原理BROP(Blind ROP) 于 2014 年由 Standford 的 Andrea Bittau 提出,其相关研究成果发表在 Oakland 2014,其论文题目是 Hacking Blind。BROP 是没有对应应用程序的源代码或者二进制文件下,对程序进行攻击,劫持程序的执行流。攻击条件源程序必须存在栈溢出漏洞,以便于攻击者可以控制程序流程。服务器端的进程在崩溃之后会重新启动,并且重新

2022-03-13 18:43:13 952

原创 攻防世界高手进阶区——Recho

攻防世界高手进阶区——Recho题目什么也没给。(在这个题困了好久,一直在学基础,但是发现了一个更好用的学习网站,基本 ROP - CTF Wiki (ctf-wiki.org))希望对你们有用,估计以后就转战ctfwiki了。先做完这个题吧。做题经历int __cdecl main(int argc, const char **argv, const char **envp){ char nptr[16]; // [rsp+0h] [rbp-40h] BYREF char buf[40]

2022-03-11 20:27:57 520

原创 栈溢出计算偏移量

栈溢出计算偏移量一,GDB调试出偏移量 0x8048677 <main+95> lea eax, [esp + 0x1c] 0x804867b <main+99> mov dword ptr [esp], eax ► 0x804867e <main+102> call gets@plt 通过这一串汇编指令可以看出来,此时起始地址相对于esp的偏移为0x1c,只要查看这时候的esp和ebp的寄存器就可以知道偏移量为多少。

2022-03-08 08:37:35 4714 1

原创 系统调用浅解与原理

系统调用系统调用(system calls), Linux内核, GNU C库(glibc).在电脑中,系统调用(英语:system call),指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态执行。如设备IO操作或者进程间通信。用户空间(用户态)和内核空间(内核态)操作系统的进程空间可分为用户空间和内核空间,它们需要不同的执行权限。其中系统调用运行在内核空间。库函数系统调用和普通库函数调用非常相似,只是系

2022-03-07 21:52:32 924

原创 寄存器和汇编指令基础和对于栈区的思考

0X1寄存器通用寄存器AX,BX,CX,DXAX是累积寄存器,相对于其他寄存器,在运算方面比较常用,是很多加法乘法指令的缺省寄存器。BX是基地暂存器,作为内存偏移指针使用,在内存寻址时存放基地址。CX是计数暂存器,是重复(REP)前缀指令和LOOP指令的内定寄存器。DX是资料暂存器,用来放整数除法产生的余数。IP,SP,BP,IP是存储CPU下次所执行的指令地址(存放指令偏移地址)。SP是指针的寄存器,用于堆栈操作。被形象地称为栈顶指针。BP是基址指针,一般指向当前栈帧的栈底

2022-03-04 21:32:09 3982

原创 ROPgadget 安装 错误处理 与使用

0x0 开始做题需要用到ROPgadget,去安装下载,然后麻烦越来越多,将成功过程记录下来。它就是用来查找你的二进制文件中你想要的一些指令,方便你加以利用。有了ROPgadget 你会发现one_gadget也是必须的。one_gadget的安装与使用0x0.1介 绍使用此工具,您可以在二进制文件中搜索Gadgets,以方便您对ROP的利用。随着 NX 保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。攻击者们也提出来相应的方法来绕过保护,目前主要的是 ROP(Return

2022-03-04 13:12:00 1552

原创 one_gadget的安装与使用

0x0 开始当有了ROP_gadget之后就会发现one_gadget也是必须的。没有ROP_gadget的赶快了。ROP_gadget 下载安装与使用one_gadget就是用来去查找动态链接库里execve("/bin/sh", rsp+0x70, environ)函数的地址的,专职。one_gadget 是libc中存在的一些执行execve(“bin/sh",NULL,NULL)的片段。当我们知道libc的版本,并且通过信息泄露得到libc的基址,就可以通过控制EIP/RIP(覆盖.go

2022-03-04 13:06:17 4462

原创 gitee代替github来解决git clone慢的问题

gitee代替github来解决git clone慢的问题对于国内用户来说,搬砖遇到clone Github速度十分缓慢的问题实在是一个令人头疼崩溃的问题。下面就介绍一个简单的方法很好的解决这个问题。0x1创建账户传送门创建账户简单就不教了。0x2导入仓库点击“+”新建仓库。点击导入按钮。输入要到导入仓库的url。导入成功后就可以用自己的url代替github的url了。0x3快乐git...

2022-03-04 12:53:57 702

原创 LINUX保护机制

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

2022-03-01 12:54:53 849

原创 Python 强制类型转换

Python 强制类型转换前言本篇主要介绍Python的强制类型转换。软件环境系统Kali Rolling (2021.3) x64软件Python 2.7.3IPython 4.0.0Python数据类型的显式转换数据类型的显示转换,也称为数据类型的强制类型转换,是通过Python的内建函数来实现的类型转换。显式转换的多种类型int(x [,base]) ⇒ 将x转换为一个十进制的整数long(x [,base]) ⇒ 将x转换为一个十进制的长整数float(

2022-02-26 14:20:08 10631

原创 攻防世界高手进阶区 ——Mary_Morton

攻防世界高手进阶区 ——Mary_Morton不容易呀,这都已经是第七题了,继续加油!一,老规矩,先分析一下文件checksec一下发现开启了栈溢出,可能这个题就是学习栈溢出漏洞绕过的。运行一下告诉了存在栈溢出漏洞和格式化字符串漏洞。file文件┌──(root💀kali)-[/home/…/面/ctf_workstation/Offensive_and_defensive_world/Mary_Morton]└─# file Mary_Morton

2022-02-26 13:17:24 4109

原创 栈溢出保护原理——Stack Canaries

栈溢出保护原理——Stack CanariesStack Canaries (取名自地下煤矿的金丝雀,因为它能比矿工更早地发现煤气泄露,有预警的作用)是一种对抗栈溢出攻击的技术,即SSP安全机制Canary的值是栈上的一个随机数,在程序启动时随机生成并保存在比函数返回地址更低的位置。由于栈溢出是从低地址向高地址进行覆盖,因此攻击者要想控制函数的返回指针,就一定要先覆盖到Canary。程序只需要在函数返回前检查Canary是否被篡改,就可以达到保护栈的目的。一,Canaries的分类canar

2022-02-26 11:08:58 4350

原创 vim使用教程

vim使用教程一,什么是 vim?Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。连 vim 的官方网站 自己也说 vim 是一个程序开发工具而不是文字处理软件。vi/vim 按键说明除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用。第一部分:一般模

2022-02-25 15:22:27 261

原创 CTF学习资源

学习资源 ¶在线学习 ¶i 春秋 - 专业的网络安全 | 信息安全在线学习培训平台看雪知识库CTFHub学习路线 ¶知道创宇研发技能表 v3.1漏洞银行 (BUGBANK) 技能树安全技能树简版 by 余弦安全类思维导图 by phith0n信息安全从业者书单推荐CTFHub 技能树信息资讯 ¶FreeBuf.COM | 关注黑客与极客安全客 - 有思想的安全新媒体嘶吼 RoarTalk – 回归最本质的信息安全Sec-News 安全文摘技术论坛 ¶吾爱破解

2022-02-25 14:42:20 4624

原创 攻防世界高手进阶区——stack2

攻防世界高手进阶区——stack2看题目啥都没有一,分析文件checksec发现居然存在栈溢出保护,这是以前做题没看到过的,可能会有新的知识点。运行文件貌似是一个输入数字计算平均值的程序。ida打开 unsigned int m; // [esp+34h] [ebp-74h] char v13[100]; // [esp+38h] [ebp-70h] unsigned int v14; // [esp+9Ch] [ebp-Ch] v14 = __readgs

2022-02-24 21:52:21 1227 1

原创 CTF汇编基础

CTF竞赛权威指南之汇编基础的学习0x1 CUP架构与指令集0x1.1 指令集架构最先诞生的是复杂指令集计算机(CISC),典型代表就是x86处理器。后面1974年IBM提出了**精简指令计算机(RISC)**的概念。旨在通过减少指令的数量和简化指令的格式来优化和提高CPU的指令执行效率。典型代表是ARM处理器。两种指令集的对比大多数RISC的指令长度是固定的,对于32位的ARM处理器,所有指令都是4个字节,即32位;而CISC的指令长度是不固定的,通常在1到6个字节之间。固

2022-02-24 15:31:30 805

原创 攻防世界高手进阶区 ——forgot

攻防世界高手进阶区 ——forgot看了半天,啥也没看懂,做出来了才发现啥也不是。一,分析文件checksec还好,只开启了堆栈不可执行。运行一下翻译了一下,应该是判断邮箱是否合乎规矩。直接idaint __cdecl main(){ size_t v0; // ebx char v2[32]; // [esp+10h] [ebp-74h] BYREF _DWORD v3[10]; // [esp+30h] [ebp-54h] char s[32]; //

2022-02-20 12:05:45 401 2

原创 攻防世界高手进阶区——dice_game

攻防世界高手进阶区——dice_game题目里面啥都没有。一.分析文件checksec只有栈溢出保护关闭了,其他都是开着的。运行可以看出是要猜数字,猜对50次。ida逆向__int64 __fastcall main(int a1, char **a2, char **a3){ char buf[55]; // [rsp+0h] [rbp-50h] BYREF char v5; // [rsp+37h] [rbp-19h] ssize_t v6; // [

2022-02-19 20:31:35 2323

原创 攻防世界高手进阶区 ——实时数据检测

攻防世界高手进阶区 ——实时数据检测1.分析文件先checksec一下发现啥都没有开,完全就是裸奔。运行一下[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传运行发现就是想要把key的值改为0x2223322。直接上idaint locker(){ char s[520]; // [esp+0h] [ebp-208h] BYREF fgets(s, 512, stdin); imagemagic(s);

2022-02-13 13:39:17 1283

原创 格式化字符串漏洞

格式化字符串漏洞初学pwn,学到了格式化字符串漏洞,总结一下。格式化字符串函数:格式化字符串函数就是将计算机内存中表示的数据转化为我们人类可读的字符串格式。漏洞printf(s)用 printf() 为例,它的第一个参数就是格式化字符串 :“Color %s,Number %d,Float %4.2f”然后 printf 函数会根据这个格式化字符串来解析对应的其他参数%d - 十进制 - 输出十进制整数%s - 字符串 - 从内存中读取字符串%x - 十六进制 - 输出十六进制数%c -

2022-02-13 13:10:20 6075

原创 ASLR和PIE的区别和作用

ASLR和PIE的区别和作用ASLR的作用首先ASLR是归属于系统功能的, aslr是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。如今Linux、FreeBSD、Windows等主流操作系统都已采用了该技术。在传统的操作系统里,用户程序的地址空间布局是固定的,自低向高依次为代码区, BSS区,堆栈区,攻击者通过分析能轻易得出各区域的基地址,在此情况下,只要攻击者

2022-02-13 13:06:39 3890

原创 攻防世界高手进阶区 ——反应釜开关控制

攻防世界高手进阶区 ——反应釜开关控制题目没什么信息。在这里插入图片描述1.分析文件运行一下,可能为栈溢出的题。checkse无栈溢出保护,无地址随机化,只有堆栈不可执行。栈溢出可能性大。ida64int __cdecl main(int argc, const char **argv, const char **envp){ char s[64]; // [rsp+0h] [rbp-240h] BYREF char v5[512]; // [rsp+40h] [

2022-02-11 15:26:43 594

原创 PWNTOOLS的基本使用

pwntools的基本使用首先需要 from pwn import * 把 pwntools 导入进来,它同时会把一些系统库给导入进来本地打的话 p=process('./filename'),远程的话 p=remote('192.168.1.103',10001)p.close() 关闭发送 payloadp.send(payload) 发送 payloadp.sendline(payload) 发送 payload,并进行换行(末尾\n)p.sendafter(some_string,

2022-02-11 14:52:45 2454

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除