常见软件安全漏洞样例代码

缓冲区溢出:

 1 Example1.1:
 2         ...
 3     char buf[BUFSIZE];
 4     gets(buf);//user control
 5     ...
 6
 7 Example1.2(c++):
 8     ...
 9     char buf[BUFSIZE];
10     cin >> (buf);//user control
11     ...
12
13 Example2:
14     ...
15     char buf[64], in[MAX_SIZE];
16     printf("Enter buffer contents:\n");
17     read(0, in, MAX_SIZE-1);
18     printf("Bytes to copy:\n");
19     scanf("%d", &bytes);//user control
20     memcpy(buf, in, bytes);
21     ...
22     char *lccopy(const char *str) {
23         char buf[BUFSIZE];
24         char *p;
25
26         strcpy(buf, str);
27         for (p = buf; *p; p++) {
28              if (isupper(*p)) {
29                 *p = tolower(*p);
30             }
31         }
32         return strdup(buf);
33     }
34
35 Example4:
36     if (!(png_ptr->mode & PNG_HAVE_PLTE)) {
37         /* Should be an error, but we can cope with it */
38         png_warning(png_ptr, "Missing PLTE before tRNS");
39     }
40     else if (length > (png_uint_32)png_ptr->num_palette) {
41         png_warning(png_ptr, "Incorrect tRNS chunk length");
42         png_crc_finish(png_ptr, length);
43         return;
44     }
45     ...
46     png_crc_read(png_ptr, readbuf, (png_size_t)length);
47
48 Example5:
49     void getUserInfo(char *username, struct _USER_INFO_2 info){
50         WCHAR unicodeUser[UNLEN+1];
51         MultiByteToWideChar(CP_ACP, 0, username, -1,
52                             unicodeUser, sizeof(unicodeUser));
53     NetUserGetInfo(NULL, unicodeUser, 2, (LPBYTE *)&info);
54     }

格式化字符串:

 1 Example1:
 2     int main(int argc, char **argv){
 3         char buf[128];
 4         ...
 5         snprintf(buf,128,argv[1]);
 6     }
 7
 8 Example2:
 9 printf("%d %d %1$d %1$d\n", 5, 9);
10
11 Example3:
12     ...
13     syslog(LOG_ERR, cmdBuf);
14     ...
15
16 Example4:
17 #include <stdio.h>
18
19 void printWrapper(char *string) {
20   printf(string);
21 }
22
23 int main(int argc, char **argv) {
24   char buf[5012];
25   memcpy(buf, argv[1], 5012);
26   printWrapper(argv[1]);
27   return (0);
28 }

整数溢出:

Example1:
short int bytesRec = 0;
char buf[SOMEBIGNUM];

while(bytesRec < MAXGET) {
  bytesRec += getFromInput(buf+bytesRec);
}

Example2:
    nresp = packet_get_int();
    if (nresp > 0) {
     response = xmalloc(nresp*sizeof(char*));
     for (i = 0; i < nresp; i++)
      response[i] = packet_get_string(NULL);
    }

Example3:
     char* processNext(char* strm) {
     char buf[512];
     short len = *(short*) strm;
     strm += sizeof(len);
     if (len <= 512) {
      memcpy(buf, strm, len);
      process(buf);
      return strm + len;
     } else {
      return -1;
     }
    }

Example4:
[email protected] ~/labs/integer $ cat add.c
#include <stdio.h>
#include <limits.h>

int main(void)
{
 int a;

//  a=2147483647;
 a=INT_MAX;

 printf("int a (INT_MAX) = %d (0x%x), int a (INT_MAX) + 1 = %d (0x%x)\n", a,a,a+1,a+1);

 return 0;
}

[email protected] ~/labs/integer $ ./add
int a (INT_MAX) = 2147483647 (0x7fffffff), int a (INT_MAX) + 1 = -2147483648 (0x80000000)

Example5:
[email protected] ~/labs/integer $ cat multiplication.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char **argv)
{
 int i, j, z=0x00000001;
 char *tab;

 if(argc<2) _exit(1);

 i=atoi(argv[1]);

 if(i>0) {
   tab = malloc(i * sizeof(char *));
   if(tab == NULL) _exit(2);
 }

 for(j=0; j<i; j++)
   tab[j]=z++;

 for(j=0; j<i; j++)
   printf("tab[j]=0x%x\n", tab[j]);

 return 0;
}

[email protected] ~/labs/integer $ ./multiplication 1073741824
Segmentation fault
时间: 2024-12-19 04:49:21

常见软件安全漏洞样例代码的相关文章

【实用】Dev C++编译器属性代码缺省源样例代码

这是我刚刚发明的东西,比较好用... 源代码复制到Dev C++编译器属性的代码缺省源内即可.. 用法: 包含常用头文件和ctime时间监控插件,常用缩写,快速读入,测试输出函数两个,读入函数,文件读入读出函数,work函数,主函数,还定义了所有的字母变量和常用的其他数组之类的变量.. 上手很快,功能强大..大家自己做一点补充吧.. 那些模板不想放进来,免得A+B都有好几K.. #include<iostream> #include<cstdlib> #include<cst

C#调用 Oracle 存储过程样例代码

-- 建表CREATE TABLE sale_report (     sale_date DATE NOT NULL ,     sale_item VARCHAR(2) NOT NULL ,      sale_money DECIMAL(10,2) NOT NULL,      PRIMARY KEY(sale_date, sale_item)); -- 測试数据DECLAREv_begin_day DATE;v_end_day DATE;BEGIN v_begin_day := TO_D

C编程规范, 演示样例代码。

/*************************************************************** *Copyright (c) 2014,TianYuan *All rights reserved. * *文件名: standard.h *文件标识: 编程规范演示样例代码 * *当前版本号:V1.0 *作者:wuyq *完毕日期:20140709 * *改动记录1: //改动历史记录.包含改动日期.版本号号.改动人及改动内容等 *改动日期 版本号号 改动人 改动内

10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)

1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1)零配置,无需安装和配置: (2)储存在单一磁盘文件里的一个完整的数据库. (3)数据库文件能够在不同字节顺序的机器间自由共享: (4)支持数据大小至2TB: (5)足够小.全部源码大致3万行C代码.250KB: (6)比眼下流行的大多数数据库的操作要快. (7)开源. 2.Sqlite 基本操作语句

[Python] SQLBuilder 演示样例代码

用Python写一个SQLBuilder.Java版能够从 http://www.java2s.com/Code/Java/Database-SQL-JDBC/SQLBuilder.htm 看到. 附上代码: 演示样例代码(一): class SQLDirector: @classmethod def buildSQL(cls, builder): sql = "" sql += builder.getCommand() sql += builder.getTable() sql +=

appium样例代码

appium样例代码 com.appium.driver包下创建InitDriver.java类: package com.appium.driver; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.Rem

java 状态模式 解说演示样例代码

package org.rui.pattern; import junit.framework.*; /** * 为了使同一个方法调用能够产生不同的行为,State 模式在代理(surrogate)的 * 生命周期内切换它所相应的实现(implementation).当你发现,在决定怎样实现任 对象去耦(Object decoupling) * http://blog.csdn.net/lxwde 28 何一个方法之前都必须作非常多測试的情况下,这是一种优化实现代码的方法.比如, * 童话故事青

java 线程、线程池基本应用演示样例代码回想

package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class LiftOff implements Runnable { protected int countDown=10; private static int taskCount=0; private final int id=taskCount++; public LiftOff(){} public LiftOff(int countDown) { thi

css初始化样例代码

/* css reset www.admin10000.com */ body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td { margin:0; padding:0; } body { background:#fff; color:#555; font-size:14px; font-family: Verdana,