搜索
当前位置:首页 > 时尚 > pwn环境搭建

pwn环境搭建

发表于 2026-10-17 06:15:38 来源:烟消火灭网

搞pwn的境搭建人,十有八九的境搭建时间都耗在环境上。不是境搭建gdb调不了,就是境搭建libc版本对不上,再不然就是境搭建堆结构被系统随机化搅得一团糟。所以,境搭建一个干净、境搭建可控、境搭建可复现的境搭建环境,比什么花哨的境搭建技巧都重要。

我的境搭建建议很直接:用Ubuntu 18.04或20.04的虚拟机,配Docker。境搭建别用最新的境搭建22.04,除非你想跟glibc 2.35的境搭建tcache刁难机制搏斗。18.04的境搭建glibc是2.27,很多经典堆题都基于这个版本,你拿它打CTF,基本不会碰到“为什么我的unsorted bin attack没反应”这种破事。

装好系统后,第一件事不是装pwntools,而是换源。清华源或阿里源,随便挑一个,速度快到飞起。然后apt update,apt install python3-pip gdb git vim——记住,别装python2,现在没人用那个写exploit了。

接下来是核心三件套:pwntools、pwndbg、one_gadget。pwntools直接pip3 install pwntools,装完写个python脚本测试一下,能连上本地端口就是成功。pwndbg这玩意儿有点脾气,它跟gdb的版本兼容性很敏感。我踩过的坑是:Ubuntu 20.04自带的gdb 9.2跟pwndbg最新版会报错,解决办法是git clone时指定旧版本分支,或者干脆用peda——虽然功能弱些,但稳定。

然后配glibc调试符号。这一步很多人忽略,但没它你连堆块结构都看不清。apt install libc6-dbg,然后gdb里设一下solib-search-path,指向/lib/x86_64-linux-gnu/。调试时用p &main_arena,能直接看到bins的链表状态,那感觉,比盲猜舒服多了。

再说个容易被坑的地方:ASLR。本地调试时,最好关掉它,不然每次运行地址都变,你写固定偏移的exploit根本跑不通。echo 0 > /proc/sys/kernel/randomize_va_space,这条命令每次开机都要执行,所以写进/etc/rc.local里,一劳永逸。

最后,我强烈建议你装个patchelf。遇到那种题目给了libc.so.6和ld.so的情况,直接patchelf --set-interpreter ./ld-2.27.so --set-rpath . ./pwn,然后就能在本地跑起来,跟远程环境几乎一模一样。没有这个工具,你只能干瞪眼,或者手动改二进制,那效率低得想砸键盘。

对了,容器化方案值得多提一句。我习惯把每个CTF比赛的题目单独丢进一个Docker容器,镜像基于ubuntu:18.04,里面装好对应的libc。这样即使题目环境冲突——比如一个要glibc 2.27,另一个要2.31——也不会互相干扰。Dockerfile写起来不复杂,就几行基础命令,但省下的时间,够你多刷三道题。

环境搭完,记得跑一个最简单的ret2libc测试。拿一个故意写烂的程序,打一遍system("/bin/sh"),如果shell弹出来,说明你的工具链、调试器、libc版本全对齐了。没弹?那就回头查查是不是没关PIE,或者ROP链里的偏移算错了。

这活儿不浪漫,但它是pwn的地基。你技巧再牛,环境一崩,全白搭。所以,耐心点,把上面这些步骤走一遍,然后你会发现,那些曾经让你抓狂的“为什么远程打不通”,八成是环境差异闹的。

随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by pwn环境搭建,烟消火灭网   sitemap

回顶部