SCTF2021 pwn Christmas Wishes 出题思路+预期解
sctf2021 pwn出题思路
赛题文件+exp: github
题目描述
圣诞许愿!请输入你的愿望吧!现在已经全面支持json格式!(漏洞利用脚本存在直接成功情况,请在本地搭建环境成功后尝试利用远程,远程环境每五分钟重启一次。)
Make a Christmas wish! Please enter your wish! Now has full support for json format! (Vulnerability exploit script exists direct success, please try to exploit the remote after a successful local build environment, remote environment restart every five minutes.)
题目分值:800
解题人数:6
出题思路
其实最开始没想做成一个php pwn题目,原本就是写了个json parser, 然后模拟一个大的项目中的用来处理json的一个小组件,里面存在漏洞, 构造个环境去利用。
在写完以后发现了一个parser_string位置的堆溢出漏洞,而且和cve 2021 3156
一样。
然后配合链表单向修改可以实现任意地址写,
在和@AFKL简单讨论这个思路时提到可以直接做成一个php网站,由于本来的代码也是模块化出来的,于是很简单的修改成了一个php拓展,搭建出来目前这个样子。
原本elf版本的在文件 JsonParse_elf
, php拓展在文件jsonparser_php
,
调试方案
因为是个so文件,编写了一个简单的loader进行调试
#include <stdio.h>
#include <dlfcn.h>
#include <string.h>
#include <stdlib.h>
typedef struct reader {
char *buf;
int size;
int offset;
} _reader;
int main(){
void *handle = dlopen("modules/jsonparser.so", RTLD_LAZY);
void *(* Parser)(void *temp);
_reader *reader = malloc(<