pwnable_Toddler's Bottle之fd

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/jxz_dz/article/details/102727972

最近小伙伴发现了一个学习pwn的网站:http://www.pwnable.kr/。然后想着一块进行,把做过的都记

录下来。那么开始第一个吧!

pwn学习的游戏网站

               

1.点一下fd图片出现:

                 

观察ssh [email protected] -p2222(pw:guest),是一条ssh命令。ssh是secure shell通常用于远程链接Linux服务器。

我们打开终端尝试链接服务器。其中fd是用户名,pwnable.kr是域名,这里可以替换为ip或者别名。-p 2222即为

端口。 guest为密码。

2.打开cmd终端,输入ssh [email protected] -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 [email protected]:fd.c .

   


 

猜你喜欢

转载自blog.csdn.net/jxz_dz/article/details/102727972
fd