您的位置:首页 > 其它

信息安全课程复习总结(部分)

2017-06-23 11:33 330 查看

信安总结

将 ls 变成 root-kit(假设此时已经取得系统的root权限)

1.一种笨的方法:将系统中的ls命令重命名,假设为list并隐藏它,自己重新写 一个程序命名为ls,这个程序会调用系统之前的ls,也就是如今的list。 这里需要注意的时,我们调用之前,可以在这个程序中加入一些过滤文件名 或路径名(我们的攻击程序)。我们先取得ls的结果,每当ls结果中有这些 信息时,会将这条记录滤掉,再输出到终端。最后我们要把这个我们自己写的可执行 程序ls放在原先真正ls所在的目录,一般是‘/bin/ls’。这样就可以实现隐藏我们的攻击程序了。

2.高大上的做法:重写ls程序,通过DIR结构体以及readdir、 fstat等函数调用,当遇到我们想要隐藏的文件时,自动跳过。ls选项过多,不过常用的选项很少,可以只实现一些常用的选项。这样改的更彻底,想显示什么都可以。

如何保护栈

1.基于编译的保护:随机Canary,Canary的值从一块只读内存读取,每当程序返回时就判断Canary是否被修改。

2.基于内存的保护:在调用函数后,将返回地址、ebp等所在的栈空间设置为不可写,当成功返回后,再设置回来。

3.基于操作系统保护:专门为返回地址保留一个寄存器,只有操作系统使用修改它的值。原理就是:将返回地址放在别处,不放在栈中。

简述静态链接与动态链接

a.静态链接:在程序运行之前,就完成了整个程序各个模块的组装,此时这个程序是完整的,是可以直接运行的。

b.动态链接:是把调用函数的所在的文件模块和调用函数所在的文件信息链进目标程序,当程序运行时,再从动态链接库中查询所需要执行的代码。

比较:静态链接程序大,运行快,但难以维护。动态链接则相反

链接器ld做哪些工作

1.源代码编译成机器码时,会把一些程序要引用的函数,从头文件中取出来。

2.加载进内存时,根据符号表等信息,将代码和数据分别放进内存的不同地方。

3.程序运行时,若有动态链接,则根据符号表查询对应的函数位置,并把它动态的链接进内存。

写出最小的死循环、最小的hello world 等

\xeb\xfe//写成shellcode形式,或者写成一个程序,用strip减掉一些不需要的部分

.text
.globl main
main:
call .L
.string "hello\n"
.L:
pop  %ecx
movl $4, %eax
movl $1, %ebx
movl $6, %edx

int $0x80

// write( 1, str, len )
// 4      1   str  5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: