论坛首页 CTF竞赛交流区 阅读主题

[原创]CTF php .so pwn 题型分析

362 浏览 1 回复
#1 楼主 2026-06-01 21:09:20
‍‍最近打比赛 遇到了几道 php so 模块的 pwn 题,个人感觉挺有意思的一般情况下会把php 大部分函数 ban 掉,只是用 自定义so 文件里的函数‍虽然里面函数名前面有zif_​ ,实际上调用的函数名是​​‍​​​​​​​​​​‍​​‍​​‍‍f23K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2T1L8$3!0C8M7%4c8S2j5$3E0Q4x3X3g2U0L8W2)9J5c8Y4u0W2j5h3c8Q4x3V1k6H3K9s2m8T1L8$3!0C8i4K6u0r3y4#2)9J5k6e0q4Q4x3X3g2E0k6l9`.`.​最简单的获取函数调用者传递过来的参数便是使用zend_parse_parameters()函数。zend_parse_parameters()函数的前几个参数我们直接用内核里宏来生成便可以了,形式为:ZEND_NUM_ARGS() TSRMLS_CC,注意两者之间有个空格,但是没有逗号。从名字可以看出,ZEND_NUM_ARGS()代表着参数的个数。紧接着需要传递给zend_parse_parameters()函数的参数是一个用于格式化的字符串,就像printf的第一个参数一样。下面表示了最常用的几个符号。​‍‍如果参数不是预期的数量和类型,zend_parse_parameters​ 会返回 -1 否则 0简单了解下 lzz​ 是什么东东​​‍‍‍‍bin_data_size的映射表,将宏定义展开为如下数组所示:‍‍‍‍‍‍‍‍‍​​‍‍​​​​​​​‍‍ 大致结构体‍正常情况下,array_size 是 4​​‍array_size 被改 ( 和quicksort 有关),基本上使用 edit 时 idx 就没有限制了,只要知道 heap 地址和另一个地址,即可实现任意地址写​​‍‍‍‍​​‍‍‍‍‍‍然后把所需要的 so 放到指定目录, 后面再启动的后应该就可以成功加载了‍​​‍​​‍直接用本机apache2 + php 环境调试,所以说,没法直接调试,我们可以是用 /usr/sbin/apachectl -X​ 即可调试进程. apachectl​是一个 shell脚本​​​​‍​​​​‍‍​​‍‍​​‍‍​​‍‍​​​​‍​​​​‍​​​​​​‍‍‍‍add_chunk()

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-282026.htm
#2 2026-06-01 21:09:20
师傅,这个numbergame怎么将php写好之后该怎么去打漏洞?本地和远程的操作会有区别吗

请登录后参与讨论

立即登录 注册账号