Linux基础入门,SEED实验系列

作者:澳门金莎娱乐网站

3.3 漏洞程序

把以下代码保存为“stack.c”文件,保存到 /tmp 目录下。代码如下:

/* stack.c *//* This program has a buffer overflow vulnerability. *//* Our task is to exploit this vulnerability */#include <stdlib.h>#include <stdio.h>#include <string.h>int bof(char *str){char buffer[12];/* The following statement has a buffer overflow problem */strcpy(buffer, str);return 1;}int main(int argc, char **argv){char str[517];FILE *badfile;badfile = fopen("badfile", "r");fread(str, sizeof, 517, badfile);bof;printf("Returned Properlyn");return 1;}

通过代码可以知道,程序会读取一个名为“badfile”的文件,并将文件内容装入“buffer”。编译该程序,并设置SET-UID。命令如下:

sudo sugcc -m32 -g -z execstack -fno-stack-protector -o stack stack.cchmod u+s stackexit

GCC编译器有一种栈保护机制来阻止缓冲区溢出,所以我们在编译代码时需要用 –fno-stack-protector 关闭这种机制。而 -z execstack 用于允许执行栈。

3.rar打包压缩命令

rar也是windows上常用的一种压缩文件格式,在linux上可以使用rarunrar工具分别创建和解压rar压缩包

  • 先安装rarunrar工具
$ sudo apt-get update$ sudo apt-get install rar unrar
  • 从指定文件或目录创建压缩包或添加文件到压缩包
$ rm *.zip$ rar a shiyanlou.rar .

上面的命令使用a参数添加一个目录到一个归档文件中,如果该文件不存在就会自动创建。注意:rar的命令参数没有-,如果加上会报错(我也觉得很坑x啊-_-||)

  • 从指定压缩包文件中删除某个文件或文件(不过这个删除命令貌似有点bug,在当前目录添加上层目录中的文件创建的包,无法删除里面的文件,怎么指定路径都不行,可能是我使用的方式不对吧)
$ rar d shiyanlou.rar .zshrc
  • 查看不解压文件
$ rar l shiyanlou.rar
  • 使用unrar解压rar文件

全路径解压

$ unrar x shiyanlou.rar

去掉路径解压

$ mkdir tmp$ unrar e shiyanlou.rar tmp/

rar命令参数非常多,不过它在linux下面真心不好用啊,所以上面只涉及了一些基本操作

2.环境变量

简单理解了变量的概念,就很好解释环境变量了,环境变量就是作用域比自定义变量要大,如shell的环境变量作用于自身和它的子进程。在所有的Unix和类Unix系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。shell程序也作为一个进程运行在操作系统之上,而我们在shell中运行的大部分命令都将以shell的子进程的方式运行。

澳门金莎娱乐网站 1

通常我们会涉及到的环境变量有三种:

  • 当前shell进程私有用户自定义变量,如上面我们创建的temp变量,只在当前shell中有效
  • shell本身内建的变量
  • 从自定义变量导出的环境变量

也有三个与上述三种环境变量相关的命令,setenvexport。这三个命令很相似,都可以用于打印相关环境变量,区别在于涉及的是不同范围的环境变量,详见下表:

命令 说明
set 显示当前shell所有环境变量,包括其内建环境变量(与shell外观等相关),用户自定义变量及导出的环境变量
env 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
export 显示从shell中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量

澳门金莎娱乐网站 2

你可以更直观的使用vimdiff工具比较一下它们之间的差别:

$ temp=shiyanlou$ export temp_env=shiyanlou$ env|sort>env.txt$ export|sort>export.txt$ set|sort>set.txt

上述操作将命令输出通过管道|使用sort命令排序,再重定向到对象文本文件中

$ vimdiff env.txt export.txt set.txt

使用vimdiff工具比较导出的几个文件的内容

澳门金莎娱乐网站 3

关于环境变量,可以简单的理解成在当前进程的子进程是否有效,有效则为环境变量,否则不是(有些人也将所有变量统称为环境变量,只是以全局环境变量和局部环境变量进行区分,我们只要理解它们的实质区别即可)。我们这里用export命令来体会一下,先在shell中设置一个变量temp=shiyanlou,然后再新创建一个子shell查看temp变量的值:

澳门金莎娱乐网站 4

注意:为了与普通变量区分,通常我们习惯将环境变量名设为大写

2、输入命令“linux32”进入32位linux环境。此时你会发现,命令行用起来没那么爽了,比如不能tab补全了,所以输入“/bin/bash”使用bash:

1.zip压缩打包程序

  • 使用zip打包文件夹
$ zip -r -q -o shiyanlou.zip /home/shiyanlou$ du -h shiyanlou.zip$ file shiyanlou.zip

澳门金莎娱乐网站 5

上面命令将shiyanlou的home目录打包成一个文件,并查看了打包后文件的大小和类型。第一行命令中,-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o澳门金莎娱乐网站,,表示输出文件,需在其后紧跟打包输出文件名。后面使用du命令查看打包后文件的大小(后面会具体说明该命令)

  • 设置压缩级别为9和1,重新打包
$ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou -x ~/*.zip$ zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou -x ~/*.zip

这里添加了一个参数用于设置压缩级别-[1-9],1表示最快压缩但体积大,9表示体积最小但耗时最久。最后那个-x是为了排除我们上一次创建的zip文件,否则又会被打包进这一次的压缩文件中,不过注意:这里只能使用绝对路径,否则不起作用

然后我们再用du命令分别查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小

$ du -h -d 0 *.zip ~ | sort

通过man 手册可知

-h,--human-readble(顾名思义,你可以试试不加的情况)

-d,--max-depth

澳门金莎娱乐网站 6

这样就一目了然了嘛,你可以看到默认压缩级别应该是最高的,压缩与否效果很明显啊,不过你在环境中操作之后看到的大小可能跟图上的有些不同,因为在你使用过程中,会随时还生成一些缓存文件在当前用户的家目录中,这对于我们学习命令使用来说,是无关紧要的,希望你能够忽略这些不同。

  • 创建加密zip包

使用-e参数可以创建加密压缩包

$ zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou

注意: 关于zip命令,还有一点希望你注意,因为windows系统与Linux/Unix在文本文件格式上的一些兼容问题,比如换行符,在windows为CR+LF(Carriage-Return+Line-Feed:回车加换行),而在Linux/Unix上为LF,所以如果在不加处理的情况下,在linux上编辑的文本,在windows系统上打开可能看起来是没有换行的。如果你想让你在linux创建的zip压缩文件在windows上解压后没有任何问题,那么你还需要对命令做一些修改

$ zip -r -l -o shiyanlou.zip /home/shoyanlou

这里你就需要加上-l参数将LF转换为CR+LF来达到以上目的

6.如何让环境变量立即生效

在上面我们在shell中修改了一个配置脚本文件之后(比如zsh的配置文件home目录下的.zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用source命令来让其立即生效。

如:

$ source .zshrc

source命令还有一个别名就是.,注意与表示当前路径的那个点区分开,虽然形式一样,但作用和使用方式一样,上面的命令如果替换成.的方式就该是

$ . ./.zshrc

注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source则不需要

与搜索相关的命令常用的有如下几个whereis,which,find,locate

  • whereis简单快速
$whereis who

澳门金莎娱乐网站 7

你会看到它找到了三个路径,两个可执行文件路径和一个man在线帮助文件所在路径,是不是很快,它快是因为它并没有从硬盘老老实实挨个去找,而是直接从数据库中查询。whereis只能搜索二进制文件,man帮助文件和源代码文件。如果想要获得更全面的搜索结果可以使用locate命令

  • locate快而全

通过"/var/lib/mlocate/mlocate.db"数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行updatedb命令更新一次,所以有时候你刚添加的文件,它可能会找不到,你就得自己执行一次updatedb命令(在我们的环境中必须先执行一次该命令)。它可以用来查找指定目录下的不同文件类型,如:

查找/etc下所有以sh开头的文件

$ locate /etc/sh

注意,它不只是在etc目录下查找并会自动递归子目录进行查找

查找/usr/share/下所有jpg文件

$ locate /usr/share/*.jpg

注意要添加*号前面的反斜杠转义,否则会无法找到

如果想只统计数目可以加上-c参数,-i参数可以忽略大小写进行查找,whereis的-b,-m-s同样可以是使用

  • which小而精

which本身是shell内建的一个命令,我们通常使用which来确定是否安装了某个指定的软件,因为它只从PATH环境变量指定的路径中去搜索命令

$ which man
  • find精而细

find应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。find命令强大到,要把它将明白至少需要单独好几节课程才行,我们这里就只介绍一些常用的内容,希望深入学习的用户可以就多找”男人“多动手。

在指定目录下搜索指定文件名的文件

$ find /etc/ -name interfaces

注意find命令的路径是作为第一个参数的, 基本命令格式为 find [path] [option] [action]

与时间相关的命令参数

参数 说明
-atime 最后访问时间
-ctime 创建时间
-mtime 最后修改时间

下面以-mtime参数举例

  • -mtime n: n 为数字,表示为在n天之前的”一天之内“修改过的文件
  • -mtime +n: 列出在n天之前被修改过的文件
  • -mtime -n: 列出在n天之前被修改过的文件
  • newer file: file为一个已存在的文件,列出比file还要新的文件名

澳门金莎娱乐网站 8

列出home目录中,当天有改动的文件

$ find ~ -mtime 0

列出比某个文件新的所有文件

# 姑且利用一下工程师配置环境时遗留的test.c~文件吧-_-||$ find ~ newer Documents/test.c~

看过《黑客帝国》,觉得里面的矩阵世界的满屏代码的效果炫酷不,在linux里面你也可以轻松实现这样的效果,你只需要一个命令cmatrix

同样先安装,不要指望ubuntu会将虽如此炫酷但却无用的命令预装在里面

$ sudo apt-get update;sudo apt-get install cmatrix

装好之后先不要急着执行,为了看到更好的效果,我们需要先修改终端的主题配色,修改为黑底绿字,修改方法见下图

澳门金莎娱乐网站 9

然后按下F11全屏显示,是不是有点感觉了

本文详细出自

3.1 初始设置

Ubuntu和其他一些Linux系统中,使用地址空间随机化来随机堆和栈的初始地址,这使得猜测准确的内存地址变得十分困难,而猜测内存地址是缓冲区溢出攻击的关键。因此本次实验中,我们使用以下命令关闭这一功能:

sudo sysctl -w kernel.randomize_va_space=0

此外,为了进一步防范缓冲区溢出攻击及其它利用shell程序的攻击,许多shell程序在被调用时自动放弃它们的特权。因此,即使你能欺骗一个Set-UID程序调用一个shell,也不能在这个shell中保持root权限,这个防护措施在/bin/bash中实现。linux系统中,/bin/sh实际是指向/bin/bash或/bin/dash的一个符号链接。为了重现这一防护措施被实现之前的情形,我们使用另一个shell程序代替/bin/bash。下面的指令描述了如何设置zsh程序:

sudo sucd /binrm shln -s zsh shexit

4.tar打包工具

在linux上面还是熟练掌握tar工具的使用才是王道啊,会用tar能就能搞定linux上绝大多数压缩文件包了。不过前面提到了那么多种压缩工具,为什么说只掌握tar就够了呢。

首先你需要知道的是tar原本只是一个打包工具,只是同时还是实现了对7z,gzip,xz,bzip2等工具的支持,这些个压缩工具本身只能实现对文件或目录(单独压缩目录中的文件)的压缩,没有实现对文件的打包压缩,所以我们也无需再单独去学习其他几个工具掌握一个tar就好,而且tar的解压和压缩都是同一个命令,只需参数不同而已,就比较方便使用。

下面先掌握tar命令一些基本的使用方式,即不进行压缩只是进行打包和解包的操作

  • 创建一个tar包
$ tar -cf shiyanlou.tar ~

澳门金莎娱乐网站 10

上面命令中,-c表示创建一个tar包文件,-f用于指定创建的文件名,注意文件名必须紧跟在-f参数之后,比如不能写成tar -fc shiyanlou.tar,可以写成tar -f shiyanlou.tar -c ~。你还可以加上-v参数以可视的的方式输出打包的文件。上面会自动去掉表示绝对路径的/,你也可以使用-P保留绝对路径符

  • 解包一个文件(-x参数)到指定路径的已存在目录(-C参数)
$ mkdir tardir$ tar -xf shiyanlou.tar -C tardir
  • 只查看不解包文件-t参数
$ tar -tf shiyanlou.tar
  • 保留文件属性和跟随链接

有时候我们使用tar备份文件当你在其他主机还原时希望保留文件的属性(-p参数)和备份链接指向的源文件而不是链接本身(-h参数)

$ tar -cphf etc.tar /etc

关于tar的打包和解包的操作讲得差不多了,现在开始玩玩压缩吧

对于创建不同的压缩格式的文件,对于tar来说是相当简单的,你需要的也只是换一个参数而已,这里我就以使用gzip工具创建*.tar.gz文件为例来说明

  • 我们只需要在创建tar文件的基础上添加-z参数,使用gzip来压缩文件
$ tar -czf shiyanlou.tar.gz ~
  • 解压*.tar.gz文件
$ tar -xzf shiyanlou.tar.gz

澳门金莎娱乐网站 11

现在我们要使用其他的压缩工具创建或解压相应文件只需要更改一个参数即可:

压缩文件格式 参数
*.tar.gz -z
*.tar.xz -J
*tar.bz2 -j

tar命令的参数很多,不过常用的大概就是上述这些,需要了解更多你可以查看man手册获取更多帮助

考虑到前面几节,每一节内容都很多,入门用户可能不太容易在一个小时内完成一节的实验内容,这一节就这么多了吧,不过“linxu乐趣多”还是不会省了的

天气越来越冷了,要是能坐在火炉旁coding那真是极好的(坐在30°C空调房里的用户请无视这句话-_-||),好吧,立马满足你

$ sudo apt-get install libaa-bin # 提示command not found,请自行解决$ aafire

澳门金莎娱乐网站 12

本文详细出自

5.修改和删除已有变量

变量的修改有以下几种方式:

变量设置方式 说明
${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串

比如要修改我们前面添加到PATH的环境变量:

为了避免操作失误导致命令找不到,我们先将PATH赋值给一个新的自定义变量path

$ path=$PATH$ echo $path$ path=${path%/home/shiyanlou/mybin}# 或使用通配符,*表示任意多个任意字符$ path=${path%*/mybin}

其他设置方式,你就自己操作体会吧。

可以使用unset命令删除一个环境变量

$ unset temp

缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。

这里虽然讲了这么多种压缩文件,这么多个命令,不过不要害怕,我们一般只需要掌握几个命令即可,包括zip,rar,tar。下面会依次介绍这几个命令及对应的解压命令

本文详细出自

本文由澳门金莎娱乐网站发布,转载请注明来源

关键词: