Skip to content

Commit a1da4b2

Browse files
committed
finish dasx0rays2024 blogs
1 parent 76076eb commit a1da4b2

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

source/_posts/dasx0rays2024/ChromeLogger.md

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ thumbnail: /assets/dasx0rays2024/logo.png
2020
不知道是不是大家对新事物的接受能力不高,WhereIsMySauce做出来的人也不多。
2121
难道是看到libtcmalloc大家就不知道怎么下手了?
2222

23+
> 也可以看看[WhereIsMySauce](/2024/10/22/WhereIsMySauce/)的博客,
24+
> 或者由 *dbgbgtf* 出的[sixbytes和usersys](http://dbgbgtf.top/2024/10/23/dasctf/)
2325
## 缘起
2426

2527
在ctf-wiki上,记载了多个堆实现,除了常见的ptmalloc,还有tcmalloc和jemalloc,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
title: DASCTF 2024金秋十月 WhereIsMySauce 出题博客
3+
date: 2024/10/22 23:44:00
4+
updated: 2024/10/23 19:03:00
5+
tags:
6+
- tricks
7+
sticky: 90
8+
---
9+
10+
## 前言
11+
12+
**debuginfod** 是二进制调试当中非常好用的工具,可以从网上自动拉取调试符号和源码,
13+
无需预先下载好,具体请看[我早前写的博客](/2024/05/08/debuginfod/)
14+
15+
## 出题思路
16+
17+
题目名叫做`WhereIsMySauce`,小小玩了一个谐音梗,`Sauce`谐音`source`
18+
实际上是在暗指flag就放在源码里。由于`debuginfod`是可以分发源码的,
19+
而源码是最便于显示flag的方式,因此这道题的终极目标就是找到藏有flag的源码
20+
21+
pwner一般都知道,pwndbg是可以在有调试符号的情况下显示源码的,并且在程序崩溃时会停在崩溃的地方,
22+
因此这也是我设计的切入点。直接把flag放在顶层文件里有点简单了,于是我设计了让程序崩溃的机制:
23+
只要不加酱油就崩溃,因此正确做法就是打开debuginfod,并设置服务器为靶机,然后打开gdb,
24+
直接让程序崩溃即可打印flag(没有pwndbg插件就手动`l`一下)
25+
26+
我对这道题的预期难度是中等甚至简单,最后却只有一位师傅做出来了,也不知道大家卡在哪里了
27+
28+
wp中也提到了可能存在的坑点是debuginfod的缓存机制,如果先前已经设置过服务器,
29+
那么debuginfod会在服务器中查找相关符号,未找到则会创建空文件,导致后续就算服务器设置正确,
30+
debuginfod也不会自动拉取符号,这时候就需要将这题的缓存先清空一下再运行
31+
32+
```sh
33+
rm -rf ~/.cache/debuginfod_client/$(readelf -n cook | grep Build | awk '{print $3}')
34+
echo 'set debuginfod enabled on' >> ~/.gdbinit
35+
DEBUGINFOD_URLS=$REMOTE gdb cook -q
36+
r
37+
6
38+
```
39+
40+
![flag](/assets/dasx0rays2024/cook.png)
41+
42+
## 做题之外
43+
44+
这道题的所有源码可以在[这里](https://github.com/RocketMaDev/CTFWriteup/tree/main/dasx0rays2024/sources/WhereIsMySauce)找到。
45+
当时在起server的时候还遇到了点麻烦,要想debuginfod server能提供源代码,
46+
不能简单将代码放在某个文件夹里,而是必须放在统一的`/usr/src`下,
47+
只是单单把源码放在家目录下并用`debuginfod -F ~`是无效的,只能分发其中的debuginfo。
48+
与此同时,debuginfo中的源代码路径也不能是相对的,必须是绝对路径,以`/usr/src/`开始,
49+
想用debuginfod来分发源码的师傅可以注意一下。
50+
51+
## 参考
52+
53+
[摆脱调试符号的困扰:使用debuginfod拉取libc的调试符号](/2024/05/08/debuginfod/)
54+
78.2 KB
Loading

0 commit comments

Comments
 (0)