sctf2021 data leak 出题思路和题解
题目描述
Never trust c pointer magic and escape characters,
题目分值:281
解题人数:52
出题思路
最开始其实是cjson这个组件的漏洞 ,主要是 CVE-2019-11834和CVE-2019-11835,
两个cve都可以 实现跳过两个字节的功能,于是设计了这么一个数据泄露的题目 ,
漏洞位置
处理/*
的时候会跳过两个字符,
处理"
的时候如果有\
会跳过两个字符,
内存布局
两个buf长度为0x10, 写入数据为14, 在结尾有两个00, 数据在后面,每次从buf1开始处理,然后打印buf2中的11字节,数据一共22字节,在两次内打印出来,
于是我们的思路是,通过跳过两字节从buf1到buf2, 然后再从buf2跳到data,
但是要注意, "
的方案将会将数据保留,\*
的方案将会将数据舍去, 于是可以将data写入到buf2的位置,控制前面的占位, 即可在两次打印中打印出来完整的data,
远程
原设计是直接泄漏flag出来,后面想到泄漏flag且flag固定,可能存在多次泄漏出来的情况,
于是增加了一层loader,
//
// Created by wlz on 9/14/21.
//
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
int main() {
setvbuf