准备pwn环境的一些基本操作

指定libc版本

方法一
LD_PRELOAD=./libc-2.26.so 来指定libc库

1
2
3
export LD_LIBRARY_PATH=`pwd`
export LD_PRELOAD=你的libc #加载本地pwn题目下的libc
unset LD_PRELOAD #调试完记得删除环境变量

方法二
写exp调试时,加载本地程序使用

1
io = process(['./bin'],env={"LD_PRELOAD":"./libc-2.23.so"})

低版本libc编译的文件

libc中的符号有自己的版本,低版本的符号在高版本的libc中是可以找得到的:
`read@GLIBC.2.21`在libc版本为2.27的系统上是可以运行的

64位ROP练习

写在前面

这个博文应该会持续更新,把看到的64rop有意思的地方都写进来。以及把64位程序的一些相关知识记录一下。真实感受是,pwn技巧要能有长进的话学习是一方面,但是学习的时候别人不会面面俱到,很多细节自己没有掌握。但是有了ida有了gdb,配合各种工具应该自己多摸索。

zip的选择明文攻击

  • 拿到pkcrack里跑,首先拿到pkcrack
    1
    2
    3
    4
    5
    6
    7
    8
    wget https://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack/pkcrack-1.2.2.tar.gz
    tar xzf pkcrack-1.2.2.tar.gz
    cd pkcrack-1.2.2/src
    make

    mkdir -p ../../bin
    cp pkcrack ../../bin
    cd ../../

攻击成功的前提条件是加密zip里有一个已知文件. 那么利用unzip -v可以查看zip压缩算法的版本以及crc32来对比,题目是否是考察此点。

docker基本命令

运行容器

1
2
3
4
5
6
7
8
9
10
docker run IMAGE COMMAND [ARGS]

# 交互式的
docker run -i -t IMAGE /bin/bash

# 指定名字的
docker run --name=container01 -i -t ubuntu /bin/bash

# 重新启动停止的容器
docker start -i NAME

其中-i表示interactive,-t表示建立一个伪tty终端

删除容器

1
docker rm name或者id # 只能用来删除停止了的容器
|