php pwn

php pwn

国内比赛最近非常喜欢出php的pwn,php解释器本身没有太多的可利用点,出题一般把漏洞埋在php的拓展。掌握了php的调试、函数传参、堆内存管理以后这类题难度都不大。由于php题的难度主要在调试方面,但是又没有很好用的gdb插件,因此自己写了一个phpgdb用于调试。

基础知识

php环境配置

apt安装

安装php,并查看版本,

❯ sudo apt install php php-dev
❯ php -v
PHP 8.3.6 (cli) (built: Mar 19 2025 10:08:38) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.6, Copyright (c), by Zend Technologies

源码安装(推荐)

推荐使用源码安装,因为这样会有调试符号,便于本地调试(尤其是学习堆的时候)

$ git clone https://github.com/php/php-src.git \ 
    --branch=PHP-8.3.15
$ cd php-src
$ ./buildconf --force
$ ./configure \
    --enable-cli \
    --enable-debug
$ make && make test && make install

这样是由完整调试符号和源码的:

image

php配置文件

主要关注其中的disable_functions​、disable_classes​和extension​,前二者限制了可以用于编写php利用脚本的函数和类,后者一般是pwn选手需要关注的带有漏洞的拓展文件。