zoukankan      html  css  js  c++  java
  • xctf-pwn level3

    这道题研究了很久,总算是理解了got表和plt表的关系和作用

    checksec看防护

    main函数里提示了vunlnerable函数

    查看一下vulnerable函数

    可以利用read函数栈溢出,但是这道题没有给system函数。所以我们可以利用附件给的libc_32.so.6文件,计算出system的地址并执行/bin/sh命令

    IDA里显示的地址是plt的地址。函数被调用时会从plt表跳转到got表最后跳转到真实地址。也就是说,got表指向的是真实地址,plt表指向的是got表内的相应地址。

    exp:

    libc.so 动态链接库中的函数之间相对偏移是固定的,所以只要找到基地址再加上偏移量就可以算出真实地址

    1.用elf模块读取got

    2.调用write函数。调用write可以把目标地址用write函数输出

    3.返回地址,此处是main函数地址,返回main函数后会再执行一次vulnerable函数,这样可以实现两次溢出,第一次溢出得到write的got地址,减去libc的write的真实地址可以计算出偏移量。利用偏移量加上基地址算出system地址和/bin/sh的地址。

    第二次溢出利用system函数getshell。

    4.write函数的参数。

    ps:偏移量的计算也可以用其他函数的got地址,例如read。

    之后尝试把返回地址改成三次pop,payload后面加上main函数地址也是可以的

  • 相关阅读:
    PICT安装及使用
    Linux 压缩和解压缩常用命令
    ICTCLAS 汉语词性标注集
    基于MPI的并行计算—矩阵向量乘
    Python 主成分分析PCA
    Python 利用pytesser模块识别图像文字
    华为HG255D路由器使用OH3C进行中大校园网认证
    Kubuntu 使用YaH3C进行中大校园网认证
    PHP 调用Python脚本
    Python 调用百度翻译API
  • 原文地址:https://www.cnblogs.com/remon535/p/12557082.html
Copyright © 2011-2022 走看看