WEB

WEB安全

漏洞复现

CTF

常用工具

实战

代码审计

Javaweb

后渗透

内网渗透

免杀

进程注入

权限提升

漏洞复现

靶机

vulnstack

vulnhub

Root-Me

编程语言

java

逆向

PE

逆向学习

HEVD

PWN

CTF

heap

其它

关于博客

面试

杂谈

PWN环境配置

系统: kali2022

最近想入门pwn了来记录一下环境搭建的步骤

0x00 配置root密码

为了方便调试最好用户直接为最高权限,可以避免一些问题

kali默认是是没有root密码的

需要手动配置

1
2
3
4
5
sudo passwd root				//sudo提权配置root用户密码
[sudo] password for pwn: //输入当前用户密码
New password: //设置root密码
Retype new password: //再次输入root密码
passwd: password updated successfully //配置完成

然后用root用户登录就可以了

换源

阿里云

1
2
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib

打开/etc/apt/sources.list将原来的源注释掉

把上面两行复制到文件中后执行

1
apt update

0x01 安装GDB

1
apt install gdb

选择yes就可以

0x02 安装pwntools

1
pip install pwntools

0x03 安装pwndbg

1
2
3
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh

然后将pwndbg写入gdb配置文件

1
2
3
4
5
6
7
8
touch ~/.gdbinit
echo 'source /root/pwndbg/gdbinit.py' > ~/.gdbinit

##下面的按需开启
#汇编默认为intel
echo 'set disassembly-flavor intel' >> ~/.gdbinit
#输出显示到第二个tty
echo 'set context-output /dev/pts/2' >> ~/.gdbinit

后续的按需配置

0x04 patchelf

用来修改二进制文件的glibc版本

1
2
3
4
5
6
7
8
9
git clone https://github.com/NixOS/patchelf.git
./bootstrap.sh
#如果提示找不到autoreconf
#apt install autoconf
./configure
make
make install
make check
#默认安装到/usr/local/bin/patchelf

下面是替换glibc的命令

1
2
3
4
5
6
7
patchelf --set-interpreter /ld.so的路径 /需要替换libc的二进制文件
patchelf --replace-needed libc.so.6 /libc的地址 /需要替换libc的二进制文件

#举个例子
patchelf --set-interpreter /home/hacker/glibc-all-in-one/libs/2.23-0ubuntu3_i386/ld-2.23.so ./hacknote

patchelf --replace-needed libc.so.6 /home/hacker/glibc-all-in-one/libs/2.23-0ubuntu3_i386/libc-2.23.so ./hacknote

有大佬写了bash脚本

1
2
3
4
5
6
7
8
9
10
11
set -x
libc_path=$1
elf_path=$2
patchelf_bin_path="/usr/local/bin/patchelf"
if [ -f ${libc_path}/ld-[2].[0-9][0-9].so ]; then
$patchelf_bin_path --set-interpreter $libc_path/ld-[2].[0-9][0-9].so $elf_path
fi
if [ -f $libc_path/libc-[2].[0-9][0-9].so ]; then
$patchelf_bin_path --replace-needed libc.so.6 $libc_path/libc-[2].[0-9][0-9].so $elf_path
fi
set +x

只需要一条命令就可以修改了

1
2
./patch.sh /glibc的路径 ./test
./patch.sh /home/hacker/glibc-all-in-one/libs/2.23-0ubuntu3_amd64 ./test

0x05 glibc-all-in-one

1
2
3
4
5
6
7
8
9
10
11
12
13
14
git clone https://github.com/matrix1001/glibc-all-in-one.git
cd glibc-all-in-one
./update
#下载可选的libc列表
cat list.txt
#查看可下载的libc版本
#2.23-0ubuntu11.3_amd64
#2.23-0ubuntu11.3_i386
#2.23-0ubuntu3_amd64
#2.23-0ubuntu3_i386
#当然还有很多
./download 2.23-0ubuntu3_i386
#下载指定libc
#最后libc会存在当前文件下的lib文件夹

0x06 one_gadget

1
gem install one_gadget

想到什么再继续补充

0x07 seccomp-tools

1
gem install seccomp-tools

报错可能是缺少依赖

1
sudo apt install gcc ruby-dev

项目地址

https://github.com/david942j/seccomp-tools

0x08 main_arena_offset

1
2
3
git clone https://github.com/bash-c/main_arena_offset.git
cd main_arena_offset
./main_arena_offset libc

计算main_arena偏移