最近小伙伴发现了一个学习pwn的网站:http://www.pwnable.kr/。然后想着一块进行,把做过的都记
录下来。那么开始第一个吧!
1.点一下fd图片出现:
观察ssh fd@pwnable.kr -p2222(pw:guest),是一条ssh命令。ssh是secure shell通常用于远程链接Linux服务器。
我们打开终端尝试链接服务器。其中fd是用户名,pwnable.kr是域名,这里可以替换为ip或者别名。-p 2222即为
端口。 guest为密码。
2.打开cmd终端,输入ssh fd@pwnable.kr -p 2222,并输入密码,登陆成功!如果使用ip登录,可以dig pwnable.kr,
将pwnable.kr替换为ip即可,其他不变
3.登录进来即为根目录(/home/fd),然后ls -alh 查看下所有文件。
分析一下最后三个文件权限:
权限 文件拥有者 组
-r-sr-x--- 1 fd_pwn fd 7.2K Jun 11 2014 fd
-rw-r--r-- 1 root root 418 Jun 11 2014 fd.c
-r--r----- 1 fd_pwn root 50 Jun 11 2014 flag
-r-sr-x--- 其中第一个-表示文件,r-s r-x ---分别为用户fp_pwn,组fd,以及其他用户对该文件的权限。分析可知,fd即我们登陆的用户只是对fd.c拥有可读权限。我们对flag文件无任何权限,只能从fd.c下手。
这里要特别提一下权限s,s权限是指在执行该文件是,获取该文件拥有者(在这即为fd_pwn)的所有权限。后边要用到哦!
4.上边分析了只能从fd.c下手,我们先查看下fd.c 输入cat fd.c:
5.分析下代码:
atio()函数是将字符串转换为数字,即将我们输入的数字处理为一下。
read(fp,buff,num)函数是将fp所指向的文件,读取num个字符,写到buf中。返回值为实际读取的字符数。如果fp为零,则在命令行读取。
strcmp(a,b),比较ab大小。如果a=b,返回值为0.
下面重点来了:
system("/bin/cat flag") 这个C文件会帮我们执行查看flag的命令。这里最关键的是当程序运行的时候,fd用户是可以获得fd_pwn的所有权限的,而fd_pwn 拥有对flag的r权限,这不正是我们需要的吗?
总结一下:
我们要让运行fd,使得可以查看flag文件。 分析代码可知,当我们输入的参数使 fd == 0 ,然后输入字符串LETMEWIN\n 即可。
6.终端输入:./fd 4660 然后输入LETMEWIN,回车:
7.然后将上边的mommy。。。输入到 flag框内,完成!!
补充:
我们可以将fd.c文件拷到我们本地,使用命令scp -P2222 fd@pwnable.kr:fd.c .