Tag: security

格式字符串漏洞

我有简单的C程序: char user_input[100]; scanf(“%s”, user_input); printf(user_input); 据我所知,这代表了安全漏洞; 例如,输入一堆%x将打印出堆栈的内容。 但是如何打印所选的内存位置呢? 我读到了: \x10\x01\x48\x08_%08x.%08x.%08x.%08x.%08x|%s| 应该从本文的位置0x08480110转储内存的内容。 但相反,它将打印出下一个4字节到堆栈上的格式字符串。 我想知道为什么。

在printf中格式化字符串攻击

#include int main() { char s[200] int a=123; int b=&a; scanf(“%50s”,s); printf(s); if (a==31337) func(); } 目的是执行格式字符串攻击 – 通过输入字符串来执行func()。 我试图用%n覆盖变量,但我得出的结论是,如果不首先显示b变量是不可能的,我不知道如何。 任何提示将不胜感激。 对不起,我的英语不好。

如何使用格式字符串攻击

假设我有以下代码: #include #include #include int num1 = 0; int main(int argc, char **argv){ double num2; int *ptr = &num1; printf(argv[1]); if (num1== 2527){ printf(“Well done”); } if(num2 == 4.56) printf(“You are a format string expert”); return 0; } 我正在努力了解如何正确行事,但我无法用互联网上的指南来组织我的思想。 它假设是这样的: ./Program %p %p %p %p 然后 ./Program $( printf “\xAA\xAA\xAA\xAA”) %.2523d%n 我只是想不出来,请帮我解决这个问题。 其重点是通过prinft函数将字符串利用到正在运行的程序中。 我需要得到“做得好”和“你是格式字符串专家”才能打印出来。 就我而言,通过Linux终端/ […]

对OpenSSL非阻塞I / O感到困惑

通常,OpenSSL库(C API)似乎提供了两种方法来执行所有操作:您可以使用根据自己的喜好配置的普通系统套接字,也可以使用类似于流的OpenSSL BIO对象。 但是,我经常对一些重复的function感到困惑。 例如,如何使SSL连接无阻塞? 一种方法似乎是简单地访问底层文件描述符并使用fcntl将其设置为非阻塞。 但是还有一个名为BIO_set_nbio的OpenSSL API BIO_set_nbio ,它接收一个BIO*对象并将其设置为非阻塞模式。 那么设置非阻塞SSL套接字的最佳方法是什么? 如果您将OpenSSL传递给已通过fnctl设置为非阻塞模式的本机文件描述符会发生什么? 你还需要专门调用BIO_set_nbio来使BIO对象无阻塞吗?

在Mac OS X Snow Leopard中禁用ASLR

基本上我想在Mac OS X Snow Leopard中禁用ASLR并使用gcc todo一些缓冲区溢出和堆栈溢出。 有谁知道如何禁用ASLR?

读取和写入C中的pem文件的rsa键

我正在编写一个C程序来为RSA生成密钥并将它们写入文件然后从中读取。 作业要求我以openssl格式生成文件。 所以,我选择了PEM。 现在,我有以下创建文件的function rsa = RSA_new(); // These 3 keys are generated beforehand rsa->e = e; rsa->n = n; rsa->d = d; fp = fopen(pubkey_file, “w”); if(!PEM_write_RSAPublicKey(fp, rsa)) { printf(“\n%s\n”, “Error writing public key”); } fflush(fp); fclose(fp); fp = fopen(privkey_file, “w”); // pRsaKey = EVP_PKEY_new(); // EVP_PKEY_assign_RSA(pRsaKey, rsa); if(!PEM_write_RSAPrivateKey(fp, rsa, NULL, 0, 0, NULL, […]