自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 854之数据结构

一.线性表1.顺序表#include <iostream>#include<stdlib.h>using namespace std;#define max 100typedef struct{ int element[max]; int last;} List;typedef int position ;void Insert(int x, position p, List &L){ position q; if (L.

2023-08-26 22:52:05 1002

原创 2022赣育杯之skyshell

2022省赛的pwn1

2022-10-11 00:03:06 1368 3

原创 复现TP-Link SR20 本地网络远程代码执行漏洞

TP-Link SR20 的一个漏洞,关于漏洞的解析和漏洞证明代码(POC)比较简单,适合我这样的新手进行学习和复现。首先,我们先从官网下载固件路由器的二进制文件大多数是arm或者mips架构的,而我们的Linux大多数是amd架构的,不兼容。所以我们需要配置一个arm架构的Linux虚拟机为了在amd上模拟arm架构,我们需要下载 QEMU来进行模拟wget https://download.qemu.org/qemu-3.1.0.tar.xz # 下载源码tar xvJf qemu-4.0.0

2022-03-13 20:59:45 8934 1

原创 bytectf2020 easyheap

做一下高版本的堆题目,2.34的glibc符号实在是搞不了,glibc in all one里面下载都是不全的,先做一下2.31的堆吧经典的菜单题,漏洞在new函数里堆限制了大小不能超过0x80,并且会有在最后的位置置零,但是这里的size_1是我们自己设置的,也就是说我们可以在任意地方写0,我们先释放7个堆块,把0x90大小的堆块放进unsorted bins里面,然后再申请出来,堆块就会把main_aren带出来,我们打印出来就能得到libc基值,但是堆块会清空原来空闲的堆块,但是和calloc不一

2022-02-07 18:59:30 3334

原创 MT2021 baby_focal

新年怎么也得干些新的事情 ——————by wondermaker准备了一下内核环境和做了一下简单的内核uaf,感觉不是很清楚,毕竟内核的知识实在是太大了,重心主要放在内核环境的配置,关于题目如何做,是日后学习的目标buu的题目刷了快有7页,感觉效果越来越低了,后面的题目未必比前面简单,只是做的人少,而且buu的题实在是太老了,新年我决定开始复现整个2021pwn题,真是任重道远复现题目之——MT2021 bab.

2022-02-04 16:37:20 1659 2

原创 我的面向对象

洗牌算法package hello;import java.util.Random;import java.util.Scanner;class xipai { String k[] = {"红桃A","红桃2","红桃3","红桃4","红桃5","红桃6","红桃7","红桃8","红桃9","红桃10","红桃J","红桃Q","红桃K; \n黑桃A","黑桃2","黑桃3","黑桃4","黑桃5","黑桃6","黑桃7","黑桃8","黑桃9","黑桃10","黑桃J","黑桃Q","

2021-10-09 17:35:17 1019 4

原创 2017 0ctf babyheap

之前学习了一下lager bins的构建,今天来学习一下堆重叠和堆扩展先找漏洞点这里没有对大小进行检查,可以输入任意字节,存在字节溢出此题的难点在于如何泄露libc,由于add使用calloc的原因,当堆块从bins中拿出来时,会清空堆块很明显我们要申请大的堆块进入unsorted bins来使main_aren+88写在堆块上,我们可以使上一个堆块扩展到这个堆块上来进行泄露先贴上expfrom pwn import *context.log_level = 'debug'context.u

2021-07-26 19:58:10 1061

原创 silverwolf

这个题和看起来像lonewolf,但有沙盒规则,题目给了flag的位置,很显然是用orw来做题,我们先泄露出libc基值,rop中我们注入gadget来进行栈迁移,我们这里利用利用 setcontext 来控制rspfrom pwn import *context.update(terminal=['tmux','splitw','-h'])p=process('./silverwolf')elf=ELF('./libc-2.27.so')def add(idx,size): p.rec

2021-07-18 22:52:43 1256

原创 宁波第四次网络安全大赛之heap

放到ida里一看是个经典的菜单题,先进delete看看,果然有个uaf,可以double free,但是这是个2.31的题目,趁这个机会学习一下2.31的df这里的add和edit是同时进行的,并且只能申请0x70大小的堆,这给我们带来了不小的麻烦。一开始我本来想free tca改变count的,但是libc正好吧0x80的count覆盖了,导致我申请不了堆,所以这个题只能构造larger bins首先2.31的tca已经不能直接free 1->2->1这样df了,所以我们先把tca填满,到

2021-05-26 10:58:20 1041

原创 pwny

这里read是从无符号数组开始读入,但是不能直接read否则会报错,我们可以利用整数溢出来进行读入,多次爆破后利用printf泄露出环境和libc基值,然后我们可以任意地址读写 读个栈地址打通from pwn import *context.log_level = 'debug'context.update(terminal=['tmux','splitw','-h'])p= remote() while (True): p.recvuntil('Your choi.

2021-05-16 09:12:32 1031

原创 lonewolf

原来是一个uaf,真不戳,还有一个show函数,也就是说我们可以泄露main_aren来泄露libc基值,因为2.27我们可以double free,但现在比之前要多了检查,我们要修改一下,如何可以快乐的df了,劫持free_hook,得到flagfrom pwn import *elf=ELF("./lonelywolf")p=remote=("124.70.38.80",22175)libc = ELF('./libc-2.27.so')context.terminal=["gnome-te.

2021-05-15 14:36:40 1023

原创 M78

strlen是一个统计字符串长度的函数 然后我们这次说的题就是关于strlen返回值造成溢出的问题在32的系统中有这么一种情况strlen 的结果的返回值给8位寄存器al那么8位最多是多少? 255 如果我们多输入会怎么办我们如果输入257二进制是多少呢000000001这个应该是没有什么好说的那么假如我们输入了257个字符那么最后统计的结果还是1这个应该是没有什么问题的。。。。。。。。。。expfrom pwn import *context.log_level='debug'context

2021-05-03 17:01:13 1341 2

原创 ciscn_2019_sw_1(fmt改fini_array无限循环)

很明显的格式化漏洞,但是printf只能用一次我们可以修改fini_array简单地说,在main函数前会调用.init段代码和.init_array段的函数数组中每一个函数指针。同样的,main函数结束后也会调用.fini段代码和.fini._arrary段的函数数组中的每一个函数指针。而我们的目标就是修改.fini_array数组的第一个元素为start或者main函数地址。需要注意的是,这个数组的内容在再次从start开始执行后又会被修改,且程序可读取的字节数有限,因此需要一次性修改两个地址并且

2021-04-30 23:25:15 1432 2

原创 houseoforange_hitcon_2016 House of orange

这个题可真是经典,甚至连方法都是来源于此看了看防御全开看看函数根据题分析,本题是没有释放功能的,但是如果没有空闲的chunk我们难以获取libc地址但是如果我们申请的chunk大小比top chunk大,这里需要满足几个条件:topchunk size > MINSIZE(0x10)top chunk inuse位为1修改之后的 size 必须要对齐到内存页我们add函数大小和次数都有限制,所以我们要修改top chunk的size位,使其进入unsorted bins。还涉及

2021-04-14 23:29:34 1222

原创 HITCON_2018_children_tcache关于off by null

创建Chunk时,使用了strcpy函数,而这个函数会在将字符串转移后在末尾添加一个x00,因此此处存在一个off-by-null漏洞。思路off by null 想到堆重叠(overlapping),和 16 区别主要是申请的 unsorted bin 大小需要大于 0x408 来避免 chunk 放入 tcache 。溢出修改 inuse 位比较简单,申请使用下一个 chunk prev_size 的堆直接写满就行,就是 prev_size 怎么写需要想一下办法。因为 free chunk 之前.

2021-04-05 17:16:03 1130 1

原创 swpuctf2019 p1KkHeap

这个函数用mmap映射了一大块内存,而且开了沙盒,我们可以知道禁用见execve,于是system函数和onegadget都不可行。于是就只能自己将shellcode(orw)写到0x66660000这个内存空间上,然后再想办法劫持到这边运行。我们看看free函数典型的uaf漏洞这个2.27版本的,我们一般利用unsorted attach方式来泄露libc,但是我们发现free有限制,只能泄露3次,不能泄露到unsorted bins,但是我们发现但是tcache->count是一个无符号.

2021-04-04 15:01:46 995

原创 我的数据结构

#include <iostream>#include<stdlib.h>using namespace std;typedef struct{ int a[100]; int len; int maxz=100;} node;typedef node* list;void _insert(list L){ int x; cin>>x; while(x!=-1) { L->a[L

2021-03-18 17:03:25 1082 1

原创 (Jarvis Oj)level5的wp

题目描述:mmap和mprotect练习,假设system和execve函数被禁用,请尝试使用mmap和mprotect完成本题。附件和level3_x64的附件一样。首先去看看这个mmap函数和mprotect函数是干啥的。void* mmap(void* addr, size_t len, int port, int flag, int filedes, off_t off)int mprotect(void* addr, size_t len, int port)简单来说mmap函数创建一块内

2021-03-17 20:02:19 995

原创 hitcontraining_bamboobox的wp

是个堆题add函数change函数 没有判断大小可以进行unlink操作伪造一个空闲 chunk。通过 unlink 把 chunk 移到存储 chunk 指针的内存处。覆盖 chunk 0 指针为 atoi 的 got 表地址并泄露。覆盖 atoi 的 got 表为 system 函数地址。给出参数 ‘sh’,调用 atoi 函数拿 shell。add(0x40,b'a' * 8)add(0x80,b'b' * 8)add(0x80,b'c' * 8) ptr = 0x6020

2021-03-16 22:52:11 1160

原创 buuctf ciscn_2019_es_7的wp

打开一看,我觉得是srop,具体知识不先介绍了这是一个最简单的攻击。在这个攻击中,有4个前提条件:第一,攻击者可以通过stack overflow等漏洞控制栈上的内容;第二,需要知道栈的地址(比如需要知道自己构造的字符串/bin/sh的地址);第三,需要知道syscall指令在内存中的地址;第四,需要知道sigreturn系统调用的内存地址。我们先要泄露buf在栈上的地址,我们能在sys_read上写0x20个,而wirte可以打印0x30的,可以泄露from pwn import *.

2021-03-15 22:48:57 1213

原创 [BUUCTF]PWN——[V&N2020 公开赛]babybabypwn

沙盒规则,具体来说就是限制了了execve(系统调用),那么就只能用 open,read,write来获得flag。第一个参数是15的时候代表调用的是sigreturn,这关系到Unix内核相关内核具体知识在这如下图所示,当内核向某个进程发起(deliver)一个signal,该进程会被暂时挂起(suspend),进入内核(1),然后内核为该进程保存相应的上下文,跳转到之前注册好的signal handler中处理相应signal(2),当signal handler返回之后(3),内核为该进程恢.

2021-03-13 16:39:02 684

原创 [V&N2020 公开赛]warmup

这是一个沙盒题禁止了execve和fork syscallsub_9A1()函数,第二个输入点,可以溢出16字节,也就是我们正好只能覆盖到ret但是这个函数在调用 sub_9D3 函数的之前没有任何东西入栈调用 sub_9A1 的返回地址入栈,覆盖完返回地址,下个8字节又正好是我们上次输入的东西,所以两次输入可以连起来,作为一个ROP链一般沙盒类型的题目都不会禁掉open,read,write这三个函数,我们可以想办法在程序中读出flag,并输出,从而得到flagfrom pwn impor

2021-03-10 23:09:34 116

原创 gyctf_2020_borrowstack

这题一看,好像是个栈迁移bass段可以利用,,用两个leave来控制rsp和rbp寄存器from pwn import *io=remote('node3.buuoj.cn','26368')bank=0x0601080leave=0x400699puts_plt=0x04004E0puts_got=0x0601018pop_rdi=0x400703main=0x0400626ret=0x4004c9io.recvuntil('u want')pl1=b'a'*0x60+p.

2021-03-10 22:15:10 106

原创 spfa算法之旅行

#include<bits/stdc++.h>using namespace std;const int maxm=1010;const int maxn=1010;const int inf=0x3f3f3f3f;int head[maxn],vis[maxn][maxn],dis[maxn][maxn];int cnt,n,m;struct node{ int to,next,l;}e[maxm*2];void add(int x,int y,int l){.

2021-03-09 21:12:03 162

原创 roarctf_2019_easy_pwn的wp

一个堆题add函数2.free很完美,没什么漏洞3.edit里面有个判断大小的函数存在obo漏洞,当edit的大小比申请多10会多输入一个字节这道题的思路是通过 offbyone来构造重叠chunk,达到任意地址分配chunk的效果,然后修改malloc_hook地址处的内容为one gadget地址首先利用Unsorted bin泄露libc的地址我们先申请4个chunkadd(0x18)#idx0add(0x10)#idx1add(0x90)#idx2add(0x10)

2021-03-07 14:59:12 197 1

原创 牛牛的回文串(区间dp)

这个题着实折磨#include<stdio.h>#include<iostream>#include<string.h>#define INF 1e14 #define LL long longusing namespace std;char str[55];LL dp[55][55],cost_add[30],cost[30],cost_err[30],C[30][30];//变换表 //dp[i][j]代表i~j段对称的最小花费 void i.

2021-03-06 19:27:51 80

原创 pwnable_orw的wp

好像没见过这样的题就汇编来讲,就是写入shellcode然后执行其中orw_seccomp就是syscall的过滤,相当于一个白名单大概构造sys_open(filename="/home/orw/flag")sys_read(fd=3,count=0x30)sys_write(fd=1,count=0x30)当打开一个新的文件时,文件描述符会在系统原有的0、1、2之上增加,POSIX标准要求每次打开文件时必须使用当前进程中最小可用的文件描述符,所以read在写入的时候调用的就是fd=

2021-03-06 11:50:24 272

原创 cmcc_simplerop的wp

函数很多很唬人但确实不难,很明显要溢出用ROP看看有没有int80有,我们可以利用系统调用再用ROp找找看就这俩了int80(11,"/bin/sh",null,null)后面的四个参数分别是eax、ebx、ecx、edx。所以上面的两条命令刚刚好。没有/bin/sh就用read在bss段上写一个 1 from pwn import * 2 3 p = process('./simplerop') 4 context.log_level = 'debug' 5 6 p

2021-03-06 00:22:48 346

原创 [ZJCTF 2019]Login的wp

先运行,输入admin和2jctf_pa5sw0rd, 发现报错,gdb开始调试进入ida看看在read_password里找到var_18然后通过覆盖var_18, 让他跳到程序自带的shell里60-18 = 48e+3a = 48expfrom pwn import * io = remote('node3.buuoj.cn',28457) shell = 0x400e88io.sendlineafter(': ','admin')io.sendlineafter('

2021-03-05 23:18:18 303 1

原创 babyfengshui_33c3_2016的wp

这是个相当好的堆题add函数可以看出这是个结构体struct Node{ char * description; char name[0x7C];}s便是description的空间地址,而v2则是结构体的空间。delete函数displayupdate这里限制了输入的长度对于chunk0来说,就是0x80c008+输入长度是否大于0x804c08c,但是,有一个问题就是,chunk0和chunk0(name)其实不一定是相邻的,这样的话就有了实现溢出的可能add(0x8

2021-03-05 19:48:37 150 1

原创 dp期望之网格游戏

有一个游戏平板上面有n×m个格子,一开始每个格子都是关闭的,每个格子里面都有一个标记已知每种标记恰好出现两次,也就是一共有n*m/2种标记规定一次移动为依次(one by one不是同时)打开一对格子查看里面的标记,如果标记不一样,格子会自动关闭,但是你的记忆是超强了,看过了就不会忘,如果标记是一样的,格子从此就一直保持打开状态,当所有格子都打开时游戏结束请算出游戏结束的最少期望步数首先设dp[i][j]表示i个打开了,j个没打开的期望.然后就是转移了.dp是由已知向未知转移的.那么,我们怎么转.

2021-03-05 19:08:08 274

原创 dp之删括号

设置一个三维数组第一种情况可以推出dp[i+1][j+1][k]=true或dp[i+1][j][k+1]=true;第二种情况可以推出dp[i+1][j][k+1]=true;第三种情况可以推出dp[i+1][j+1][k]=true或dp[i+1][j][k-1]=true;第四种情况可以推出dp[i+1][j][k-1]=true;综合一下就是如果后一个字符相等且k=0,那么dp[i+1][j+1][0]=true,然后如果s的后一个字符是左括号,那么dp[i+1][j][k+1]=tr.

2021-03-05 18:39:10 87

原创 并查集之集合问题

首先知道p[i]≥1,所以不存在p[i]大于等于max(a,b)用map<ll,ll>mp记录下每个p[i]出现的下标,每次找到b-p[i]或a-p[i]都进行一次连接#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+5;int par[maxn];int a[maxn];int n;map<int,int> mp;void init(){ for (int i=0.

2021-03-04 23:08:55 99 1

原创 蚯蚓之队列

那么只要原来的蚯蚓具有单调性,每次只需要找这三个队列的最大值即可至于每次都要增加的长度,我们可以先不加上,等到取出来的时候在加 (i - 1) * q(i−1)∗q, 放回去的时候注意要减去 i * qi∗q#include<bits/stdc++.h>typedef long long ll;using namespace std;const int N = 2e5 + 5;const int mod = 1e9 + 7;queue<ll> q[3];ll a.

2021-03-04 22:54:33 118 2

原创 BUUCTF [V&N2020 公开赛]simpleHeap

又是一个堆题sub_AB2 是到heap_got (储存堆指针的表)里面找第一个空着的堆序号返回给v1,没有可用的就返回-1,最多申请10个堆之后输入堆的大小,最大是 111,也就是0x6F,,加上chunk头是0x7F ,也就是申请的堆只能fastbin大小之后是填写 heap_got ,并且写入堆,没有溢出 (但是申请不是0x10整数倍而是多出8字节,比如 0x18 0x28,多出的8字节会在下一个chunk的presize里使用,,这是presize的复用,堆的一个机制,后面会说到,利用这个机

2021-03-01 18:59:56 205 3

原创 练习4.2 平衡二叉树的根

#include <stdio.h>#include <malloc.h>#define ElemType inttypedef struct BiTNode { ElemType Data; struct BiTNode *Left; struct BiTNode *Right;}*AVLTree;AVLTree SingleLeftRotation(AVLTree T) {//左单旋 AVLTree B=T->Left; ...

2021-02-26 17:53:10 168

原创 电话聊天狂人

#include<iostream>#include<map>using namespace std;map<string, int >mp;map<string, int >::iterator it;int main() { int n; cin >> n; int max = 0; string maxid; for (int i = 0; i < n; i++) { string s1, s2; cin .

2021-02-25 22:42:17 79

原创 字符串关键字的散列映射

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <string>#include <map>using namespace std;const int maxn = 1e6;bool vis[maxn];string s;int n, p;map<string, int> m;int.

2021-02-25 16:07:01 199

原创 [ZJCTF 2019]EasyHeap的wp

还是堆题的老三样1.有个指针2.edit根据堆块指针表的指针指过去,编辑堆块,,而且竟然还能重新定义可以输入的长度!!但是堆块大小申请好了就不变了,所以这里可以随意造成堆溢出。3.可以用unlink做from pwn import *sh=remote("node3.buuoj.cn",27337)elf=ELF("./easyheap")free_got=elf.got['free']system_plt=elf.plt['system']context.log_level.

2021-02-25 13:52:09 232 1

原创 [BJDCTF 2nd]ydsneedgirlfriend2的wp

这是一道堆题add函数![在这里插入图片描述](https://img-blog.csdnimg.cn/202102241926del函数可以看到的就是,这里虽然把两个chunk的free掉了,但是bss段那个指向chunk00的指针并没有置为null,这里就有机会了show函数show函数实现的就是通过0x603018处存的print girlfriend name函数的地址,调用这个函数,输出chunk的内容。这里我们可以利用一下,如果能够把这个地址改成我们想要的地址,再调用show函数,

2021-02-24 19:39:42 119

空空如也

空空如也

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

TA关注的人

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