DASCTF 安恒四月春季战 Writeup
Misc
6G 签到题
不需要下载整个文件。点击下载后,就可以停了。然后 winhex 打开下载缓存文件,查看十六进制内容,发现惊喜。
blueshack
流量分析题目,流量包是蓝牙流量。
找到一个压缩包,复制粘贴提取出来。(7z 文件头是:37 7a bc af)
压缩包加密,提示是蓝牙连接的 PIN 码,就返回开头选择 PIN 校验数据流
Re
easyre
加密函数与校验函数如下:
1 | for ( i = 0; i < strlen(&v5); ++i ) |
输入字符串逐字符异或 6 + 1 加密后,与密文对比。
解密脚本如下:
1 | m = "akhb~chdaZrdaZudqduvdZvvv|" |
re2
主要功能函数如下:自定义输入 10 个以上的加密参数,利用参数生成一个密钥,密钥与明文异或输出。
1 | if ( v11 <= 9 ) // 加密参数个数大于9个 |
这里我是试观察到,10 个 参数全为 1 或 2 ,输出值不变。然后根据前面 flag 形式推测 flag 结构为 flag{} 。然后密文输出第一个是 & ,应该对应 f ,也就是异或 64 就解出来 flag 。
解密脚本
1 | v16 = [0x26,0x2C,0x21,0x27,0x3B,0x23,0x22,0x73,0x75,0x72,113,33,36,117,118,119,35,120,38,114,117,113,38,34,113,114,117,114,36,112,115,118,121,112,35,37,121,61] |
Pwn
sales_office
考点:UAF–》DoubleFree,tcache
一开始看以为利用点是在 buy 函数。创建堆失败后,结构体的堆未被删除。最后是 sell 函数没有将 free 的堆指针置零。
1 | int sell() |
泄露地址
题目有输出函数,就把索引堆的 fd 指针覆写为函数 got 地址。覆写的方法比较巧妙。
首先 Double Free 布置 tcache :
1 | free(2) #维持tcache数量 |
完成效果:chunk1 index -> chunk1 data –> chunk1 index -> chunk1 data
布置 chunk1 data fd 指向 chunk2 data fd ,然后 malloc chunk1 index :
1 | buy(0x10,p64(heap_base+0x2e0)) |
修改 chunk2 index fd 指向 malloc@got.plt ,泄露函数 got 表地址:
1 | buy(0x10,p64(elf.got['malloc']))#chunk1 |
后面修改 got 表地址方法同上。
Exp
1 | #encodig:utf-8 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SkYe231 Blog!