本文以夺旗赛(ctf)为背景,简单说明一下困惑的副手问题(Confused deputy problem)。
wiki资料:https://en.wikipedia.org/wiki/Confused_deputy_problem
原文:http://www.cap-lore.com/CapTheory/ConfusedDeputy.html
- 什么是困惑的副手问题(Confused deputy problem)
这里有原文链接:http://www.erights.org/elib/capability/deputy.html

我们的操作系统在保护结构上非常类似于Unix(AT&T™)。编译器安装在名为SYSX的目录中。用户可以通过说“ RUN(SYSX)FORT”来使用编译器,并且可以提供文件名来接收一些可选的调试输出。我们已经对编译器进行了检测,以收集有关语言功能使用情况的统计信息。统计文件称为(SYSX)STAT,该名称已汇编到编译器中。为了使编译器能够写入(SYSX)STAT文件,我们使用主文件license标记了包含编译器{(SYSX)FORT}的文件。操作系统允许具有此类许可的程序将文件写入其主目录(在本例中为SYSX)。
帐单信息文件(SYSX)BILL也存储在SYSX中。一些用户知道了名称(SYSX)BILL并将其作为接收调试信息的文件名提供给编译器。编译器在打开该文件以进行输出的请求中将该名称传递给操作系统。操作系统观察到编译器具有主文件许可证,因此允许编译器通过(SYSX)BILL写入调试信息。帐单信息丢失。(来源维基百科)
- 举个例子
我们不一定把文章中的编译器理解成gcc等直观的编译器,我们可以把它理解成某些应用程序,这些应用程序有着对我们无权访问的文件有着访问权限。
近期我参加了一个夺旗赛(ctf),在我的workspce中有这样几个文件:
-r-sr-xr-x 1 flagkeeper flagkeeper 990K Apr 2 16:59 deputy*
-r-------- 1 flagkeeper flagkeeper 33 Apr 2 17:09 flag
-rw-r--r-- 1 flagkeeper flagkeeper 65 Apr 4 16:02 passwd
我们的目的是看到flag文件里面的内容,但是作为challenger,我们没有flagkeeper用户的权限。
在执行deputy应用程序时,会要求用户输入一个User ID和一个password。
然后程序回把我们输入的password转化成SHA256 hash值,之后会将这个hash值和文件夹下的passwd文件中的内容进行对比,如果一致便会打开我们的flag文件,如果错误程序将会生成一个以我们输入的User ID命名的文件,其内容是我们输入错误的password。
在这里我直接揭晓答案,应用程序会直接对比目录下的passwd文件,而我们对passwd文件并没有操作权限(甚至在这次比赛中,我们没有使用vim的权限),但是我们要利用好deputy程序,它有比较高的权限去修改另外两个文件,并且我们在输入错误的时候也会得到一个和passwd权限一模一样的文件。
利用这一点我们就可以拥有修改passwd文件的权限了。
我们首先以我们喜欢的内容去网上把它转化成SHA 256的hash值,然后使用passwd的User ID来升权修改passwd文件中的内容。
原始内容:
⋊> ~/confused-deputy cat passwd 16:00:19
c0d295a50d6b3b7afe54e9dd49962ff82e83467105c1e3d9bcb9171a882b81cb
以passwd为User ID,确定内容生成的SHA256 hash值为password,执行一次deputy后:
⋊> ~/confused-deputy cat passwd 16:02:24
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
这时我们以任意User ID 和我们确定的内容为password再执行一次deputy:
- 感想
Confused deputy 问题在国内的IT网站我没有找到太多,大多数的资料来自于Google,我不是很清楚这个问题为什么在国内很少有人提及。
我是因为信息安全课程强行接触的confused deputy problem,通过这个夺旗赛,我们可以发现一个问题,challenger用户得到了flagkeeper用户的权限。
其实我讲到这里能接触到Linux服务器的各位同行们想必都能一眼看出这中间的安全问题了。
附加一个直观的关于confused deputy problem的视频(YouTube视频,很抱歉我没有在国内的视频网站上找到这个视频):
https://www.youtube.com/watch?v=Yfsmc0b8o78