软件安全实验——pre3

Posted 大灬白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件安全实验——pre3相关的知识,希望对你有一定的参考价值。

1.

main()
{
 int num=0x41414141;

 printf("Before: num = %#x \\n", num);
 printf("%.20d%hn\\n", num, &num);
 printf("After: num = %#x \\n", num);
}

查看这段代码的执行结果,解释%.20d和%hn的含义。
在这里插入图片描述
在这里插入图片描述

解释:

%.20d:%m.n格式中m为输出宽度,n为精度控制。d表示以十进制形式输出带符号整数,所以解释是为输出精度为20的整形量。

%hn: h表示按短整型量输出,%n并不告诉printf()显示什么内容,而是将已输出的字符个数放入到变元指向的变量中。在printf()调用返回后,这个变量将包含一个遇到%n是字符输出的数目。%n格式符返回的是应该已经输出的字符个数,而不是实际输出的字符个数。
%hn格式符表示的是按短整型应该已经输出的字符个数,而不是实际输出的字符个数。

2.解释linux用root执行下面这条命令sysctl -w kernel.randomize_va_space=0的含义和用途。

在这里插入图片描述

答:我们使用sudo sysctl -w kernel.randomize_va_space=0命令类关闭“地址空间随机化”这一功能,表示关掉aslr功能,ASLR(Address space layout randomization)是一种针对缓冲区溢出的安全保护技术,通过对栈、共享库映射等线性区布局的随机化,防止攻击者定位攻击代码位置,达到阻止溢出攻击的目的。
sysctl命令用于运行时配置内核参数,还可以设置或重新设置联网功能。
-w参数用于临时改变某个指定参数的值。格式为「 sysctl [-n] [-e] -w variable=value」
设置全局变量 randomize_va_space 值为 0 (该值默认为1),可以让程序的栈和 mmap 映射区域从一个固定位置开始。

3.描述fprintf、printf、sprintf、snprintf、vprintf这几个函数的功能和差异。

函数声明:

#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);

#include <stdarg.h>
int vprintf(const char *format, va_list ap);
参数类型输出到设备输出到文件输出到字符串
可变参数printffprintfsprint、snprintf
固定参数vprintf

描述:print系列函数根据format 参数生成输出内容:
printf和vprintf函数把输出内容写到stdout,即标准输出流;
Fprintf:函数把输出内容写到指定的stream流;
sprintf:存入指定的数组buf内,会自动在结尾追加null字节。此外,因为
sprintf可能会溢出,所以调用者要确保buf的尺寸;
snprintf:把输出内容存放到字符串str中,相对于sprintf明确指定了尺寸,防止溢出问题。

这些函数由格式字符串format参数控制输出内容,它指出怎么样把后面的参数(或通过stdarg(3)的变长参数机制访问的 参数)转换成输出内容。
这些函数返回打印的字符数量(不包括字符串结尾用的‘\\0‘)。snprintf的输出不会超过size 字节(包括了结尾的`\\0’), 如果因为这个限制导致输出内容被截断, 则函数返回-1。

以上是关于软件安全实验——pre3的主要内容,如果未能解决你的问题,请参考以下文章

软件安全实验——lab10(基于时间的侧信道攻击)

腾讯安全反病毒实验室解读“Wannacry”勒索软件

2018-2019-1 20165320 《信息安全系统设计基础》 缓冲区溢出漏洞实验

软件安全实验——lab11(XSS跨站脚本攻击)

软件安全实验——lab8(SQL注入)(下)(旧虚拟机SEEDUbuntu12.04版本实验)

软件安全实验——lab9(缓冲区溢出:return-to-libc绕过非可执行堆栈)