pwnable part1 溢出研究
来源:互联网 发布:国外mac破解软件网站 编辑:程序博客网 时间:2024/05/17 04:36
这里有个视频是讲过程的,但是都是英文。。。
part1
pwnable第一题的题目是这样的
Mommy! what is a file descriptor in Linux?* try to play the wargame your self but if you are ABSOLUTE beginner, follow this tutorial link: https://www.youtube.com/watch?v=blAxTfcW9VUssh fd@pwnable.kr -p2222 (pw:guest)
我们连上那个ssh
用ls -il
看一下
fd@ubuntu:~$ ls -iltotal 161578052 -r-sr-x--- 1 fd_pwn fd 7322 Jun 11 2014 fd1578049 -rw-r--r-- 1 root root 418 Jun 11 2014 fd.c1578050 -r--r----- 1 fd_pwn root 50 Jun 11 2014 flag
有三个文件,然后我们要的是flag的信息,然后主要就是要用fd这个可执行文件去溢出攻击系统,然后获得flag
看到fd文件属性那个组属性,刚好组属性可以执行,我们用户名是fd刚刚包括fd这个文件,所以我们可以执行这个fd文件
然后我们打开源文件fd.c
源码如下
#include <stdio.h>#include <stdlib.h>#include <string.h>char buf[32];int main(int argc, char* argv[], char* envp[]){ if(argc<2){ printf("pass argv[1] a number\n"); return 0; } int fd = atoi( argv[1] ) - 0x1234; int len = 0; len = read(fd, buf, 32); if(!strcmp("LETMEWIN\n", buf)){ printf("good job :)\n"); system("/bin/cat flag"); exit(0); } printf("learn about Linux file IO\n"); return 0;}
这个学过C语言的同学都知道,这个argc是保存参数的数量的参数,argv[]则是保存参数具体值的数组,然后这个envp不是很常见,是存放系统的环境变量的数组。
if(argc<2){ printf("pass argv[1] a number\n"); return 0; }
如果参数的数量小于2,就输出那个字符串,然后返回0退出。
int fd = atoi( argv[1] ) - 0x1234;
这是把第一个参数 按字符串转换成整型数,然后减去0x1234,得到fd的值
len = read(fd, buf, 32);
然后从fd指向的文件读取32字节的数据放在buf中。
他题目中说的file descriptor就是文件句柄的意思,也就是打开一个文件系统返回的对这个文件的唯一标识符。
if(!strcmp("LETMEWIN\n", buf)){ printf("good job :)\n"); system("/bin/cat flag"); exit(0); }
然后这个strcmp比较字符串”LETMEWIN\n”和buf中的数据,如果相同,返回0,如果“LETMEWIN\n”大于buf中的数据,返回大于0数,反正返回小于0的数,要使这句话生效,要么相等返回0,然后非0得1,要么小于,这个小于的也好构造,把L改成L之前的任何一个数都行,
system("/bin/cat flag");
调用系统调用,来输出flag
fd呢是拥有者是fd_pwn,而flag的拥有者也是fd_pwn,所以这个时候这个代码执行后是有权限打开flag的。
然后我们怎么去改这个buf的内容呢,buf是从fd中读进去的数据,所以我们要改fd,要让fd读取我们的输入,这里就是linux的io接口知识 了。
即标准输入文件(stdin):通常对应终端的键盘;
标准输出文件(stdout):通常对应屏幕
标准错误输出文件(stderr):也是对应屏幕
这三个的文件描述符也就是文件句柄是0,1,2
stdin->0
stdout->1
stderr->2
我们将文件句柄对准我们的键盘,就是让fd为0
我们输入0x1234看看
不行,0x是16进制的意思,我们把16进制换成10进制看看
换成十进制是4660
./fd 4660
就可以让fd指向我们的键盘,然后输入那个letmewin然后回车,就可以了
- pwnable part1 溢出研究
- 堆溢出的研究
- TOMCAT内存溢出研究
- TOMCAT内存溢出研究
- 从零开始学Win32平台缓冲区溢出(Part1)
- part1
- PART1
- PART1
- 最近开始研究缓冲区溢出
- 栈的缓冲区溢出研究
- pwnable.kr
- pwnable dragon
- pwnable.kr
- pwnable.kr
- 缓冲区溢出分析第10课:Winamp缓冲区溢出研究
- 缓冲区溢出1 ---- 数据内存分配研究
- C# 3.0新特性初步研究 Part1:使用隐含类型的本地变量_C#教程
- C# 3.0新特性初步研究 Part1:使用隐含类型的本地变量_C#教程
- Angularjs bootstrap table多选(全选),支持单击行选中
- 虚拟化安全怎么做?靠安全设备虚拟化还是换个思路?
- py
- oracle读取评论列表,先按点赞次数取前三名,然后按创建时间倒序排序,需要分页
- 23种设计模式(7):中介者模式
- pwnable part1 溢出研究
- JNI NDK开发笔记
- ionic添加cordova插件-AppVersion
- 事件监听器模式和观察者模式
- gitbook制作电子书
- 原型模式(创建型)
- 轻量级过程改进之我见
- java反射机制--Method.invoke方法
- hdu.1219.AC Me