一个很老的游戏了,在每一level通过权限提升得到下一level的密码。
在一位师兄的帮助下,一点点地学习,在此,把每一关带来的安全启示记录下来。。。
第一关:[一头雾水]
提示要去找一个setuid的文件,这个文件提供了现成的权限提升的功能,非常简单。
启示:小心地使用setuid的文件,检查系统的setuid的文件,说不定就有不属于自己的好东西。
第二关:[找个编辑器。。。]
提示有的编辑器可以执行命令。同样是setuid的问题,编辑器有s位。
启示:同上。另外,对于一些可以执行外部命令的软件,要小心控制权限。
第三关: [独立完成,嘿嘿]
这关给出了一个做DNS查询的程序源码和编译好的程序。程序有下一个level的s位权限。其中,仅将用户输入简单拼接后调用了system()执行命令。就是说,只要用户构造合理但不合法的参数,就可以执行到下一级权限的命令得到密码。
启示:写程序时,请不要相信过分用户的输入。N多的注入问题都是这么来的。
第四关:[服务器昨天有点问题]
这关要利用xinetd.d下面的一个不当配置来做,某个服务以level5的权限执行,但服务程序却是用level4的,以level4的用户权限写程序,以level5的身份用xinetd运行,可以得到level5的密码。
这个关拖了两天时间,虽然找到了相应的服务,发现机器上也有现成的代码,但是telnet不能用,curl本地相应的端口和finger(师兄以前用过的方法)时候分别是empty reply和socket error :(
今天重新登录后,curl和finger都可以拿到第五关的密码了...-_-b
启示:配置服务时,要进行严格的权限检查和控制,一些没必要使用高级权限的服务进程,不要给过高的权限。
2009-03-21
第五关:[无语]
这关的提示里要求利用竞态条件来搞到一个程序产生的level6的密码文件。这是一个level5用户组可执行的level6用户权限的可执行文件。最初的想法是gdb这个可执行程序,设置断点,可是看了gdb不知道断点设在哪里啊...结果,"某人"过来看,strace了一把,还没往下搞,我已经看到明文的密码了,write("next password : ......")之类的,立即orz掉了,这关over。。。
其实,其实,只要vim那个倒霉的可执行文件,寻找关键字之类的就可以啦,没有那么复杂的 -_-b
启示:”没有软件是破解不了的。“--by某人
第六关:[没看明白要说什么]
这关感觉很easy,telnet过去没有出现提示符,只有个hint,说是以前telnet端BBS常用的手法,在这里按下ctrl+C,直接出现提示符了,然后目录下面一个文件写了next passwd,我查了这个文件的日期在2000年,所以应该不是上一个过关者无聊留下的,所以,就算过了。。。
启示:还是不要相信用户输入,coding的时候要想想程序的一些信号处理,如果中途quit,会如何。
第七关:[猜密码 :(]
这关依然要你执行一个程序,然后给了一堆猜测密码的提示,根据第五关的结果,我无聊了一把,从二进制的ELF文件中读出了明文密码。。。这个玩法不太对头啊...
启示:无语。
第八关:[不好玩起来]
这关指示找一个1481大小的文件,是level9的shadow,结果,发现那个文件被改成2700大小了 -_-b
用john跑一下,猜出一个简单的密码了事。
启示:小心保护密码加密结果。
第九关:[溢出开始了]
这关的hint中给了一段明显可以溢出的代码。
启示:小心检验用户输入内容的时候,也要注意控制读入的长度与自己的缓冲区大小是否匹配。
第十关:[共享内存内容的保护]
hint中要求通过读取共享内存内容来获取密码。。。
查到了共享内存的权限是666,就是说,写个程序读出内容就行了,应该不难,今天暂到此为止。
阅读(1516) | 评论(0) | 转发(0) |