menu Limu's Blog
CTFPwn的奇技淫巧
1294 浏览 | 2021-02-01 | 阅读时间: 约 2 分钟 | 分类: CTF | 标签:

tmux辅助

有时候我们会在特定的docker容器下进行pwn的解题,或者是调试,因为只能在shell进行,所以我们使用gdb.attach()会有问题,所以这里推荐使用tmux
在新版的tmux中在对应用户目录下的.tmux.conf文件添加如下两行代码,可实现鼠标操作:

//设置最多回滚的行数
set -g history-limit 5000
//启动鼠标模式 
set -g mouse on
# 允许鼠标选择窗格
set -g mouse-select-pane on

而且,我们在编写exp的时候,只需要在开始加入这两行代码,就可以正常使用gdb.attach()了:

context.log_level = "debug"
context.terminal = ['tmux','splitw','-h']

注意!要在tmux的环境下执行exp,这样的话才可以正常的使用。
另外可能存在docker即使打开了privileged(万金油),依然无法使用ptrace,这个是因为引入了secommp的缘故,我们可以在run容器的时候添加下面的参数

--security-opt seccomp=unconfined

使用特定libc

方法一:修改LD_PRELOAD

export LD_LIBRARY_PATH=`pwd`
export LD_PRELOAD=libc.so    #加载本地pwn题目下的libc
/path/to/libc.so ./bin
unset LD_PRELOAD    #调试完记得删除环境变量

写exp的时候:

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

方法二:使用patchelf

安装:
git clone https://github.com/NixOS/patchelf.git 
./bootstrap.sh 
./configure 
make 
sudo make install
patchelf基础使用

修改程序的动态链接加载器ld

patchelf --set-interpreter /lib/my-ld-linux.so.2 my-program 

修改程序和库的路径

patchelf --set-rpath /opt/my-libs/lib:/oter-libs my-program

缩减程序和库的路径

patchelf --shrink-rpath my-program 

移除一个已声明的依赖动态库(就是移除动态链接库路径)

patchelf --remove-needed lib.so myprogram 

添加一个已经声明的依赖动态库

patchelf --add-needed libfoo.so.1 my-program 

替代一个已声明的以来动态库

patchelf --replace-needed liboriginal.so.1 libreplacement.so.1 my-program 

改变动态库的符号名

patchelf --set-soname libnewname.so.3.4.5 path/to/libmylibrary.so.1.2.3

现在所需工具我们已经安装好了,我们只需要利用patchelf将ld和libc修改为我们用glibc-all-in-one编译好的ld和libc即可。

patchelf --set-interpreter /glibc/2.27/amd64/lib/lib-2.27.ld ./pwn 
patchelf --replace-needed libc.so.6/glibc/2.27/amd64/lib/libc-2.27.so ./pwn 

利用ldd测试,即可发现修改成功 ok现在我们可以修改程序为指定libc了,并且all-in-one里面的glibc保留了编译信息。

文章转载请注明limu

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

全部评论

info 评论功能已经关闭了呐!