看了网上的一个klee教程,来源于:https://adalogics.com/blog/symbolic-execution-with-klee

在此记录。

global-buffer-overflow

测试代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int global_arr[10] = {0,1,2,3,4,5,6,7,8,9};
int test1(char * buf)
{int i = 5;if (strcmp(buf,"BUG!") == 0){i += 20;}return global_arr[i];
}
int main(int argc,char ** argv)
{char arr[10];klee_make_symbolic(arr,10,"arr");klee_assume(arr[9]=='\0');test1(arr);
}

clang编译字节码

clang -c -g -emit-llvm uaf.c

klee符号执行

klee --libc=uclibc uaf.bc

显示结果

查看测试样例,可以看到触发了指针越界的是测试样例3,然后查看测试样例3的内容,可以看到触发漏洞的输入为BUG!开头的字符串。

DF

测试代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int test4(char * buf)
{char * var = malloc(10);if(strcmp(buf,"bug!")==0){free(var);}free(var);return 1;
}
int main(int argc,char ** argv)
{char arr[10];klee_make_symbolic(arr,10,"arr");klee_assume(arr[9]=='\0');test4(arr);
}

clang编译字节码

clang -c -g -emit-llvm uaf.c

klee符号执行

klee --libc=uclibc uaf.bc

显示结果

查看触发漏洞的样例,可以发现触发的输入是bug!开头的字符串。

ktest-tool test000003.ktest

还有两个例子的结果也差不多。

就简单列下漏洞代码。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int global_arr[10] = {0,1,2,3,4,5,6,7,8,9};
int test2(char * buf)
{int * dyn_mem_arr = malloc(sizeof(int)*10);int i =5;dyn_mem_arr[0] = 0;dyn_mem_arr[1] = 1;dyn_mem_arr[2] = 2;dyn_mem_arr[3] = 3;dyn_mem_arr[4] = 4;dyn_mem_arr[5] = 5;dyn_mem_arr[6] = 6;dyn_mem_arr[7] = 7;dyn_mem_arr[8] = 8;dyn_mem_arr[9] = 9;if (strcmp(buf,"BUG!") == 0){i += 20;}int return_value = dyn_mem_arr[i];free(dyn_mem_arr);return return_value;
}
int main(int argc,char ** argv)
{char arr[10];klee_make_symbolic(arr,10,"arr");klee_assume(arr[9]=='\0');test2(arr);
}

另一个空指针解引用的例子:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int *global_string[] = {"string1","string2","string3",NULL
};
int test3(char * buf)
{int i = 1;if (strcmp(buf,"BUG!") == 0){i = 3;}char c = *(global_string[i]);if(c=='s')return 0;return 1;
}
int main(int argc,char ** argv)
{char arr[10];klee_make_symbolic(arr,10,"arr");klee_assume(arr[9]=='\0');test3(arr);
}

klee 检测漏洞-四个实例相关推荐

  1. Vue3官网-可复用组合式API(十四)实例 property(\$slots,\$attrs)、渲染函数render(虚拟节点VNode,h() 参数,使用JavaScript代替模板功能),插件

    Vue3官网-可复用&组合式API(十四)实例 property($slots,$attrs).渲染函数render(虚拟节点VNode,h() 参数,使用JavaScript代替模板功能), ...

  2. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (四)

    原文:https://blog.csdn.net/u011520516/article/details/80228130 点击查看博客原文 这是从零开始实现YOLO v3检测器的教程的第4部分,在上一 ...

  3. 微信公众平台开发教程(四) 实例入门:机器人(附源码)

    微信公众平台开发教程(四) 实例入门:机器人(附源码) 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团. 一.功能介绍 通过微信公众平台实现在 ...

  4. OpenCV使用Harris-Stephens方法检测角点的实例(附完整代码)

    OpenCV使用Harris-Stephens方法检测角点的实例 OpenCV使用Harris-Stephens方法检测角点的实例 OpenCV使用Harris-Stephens方法检测角点的实例 # ...

  5. OpenCV方形检测Square Detection的实例(附完整代码)

    OpenCV方形检测Square Detection的实例 OpenCV方形检测Square Detection的实例 OpenCV方形检测Square Detection的实例 #include & ...

  6. OpenCV在相机或图像中检测QR码的实例(附完整代码)

    OpenCV在相机或图像中检测QR码的实例 OpenCV在相机或图像中检测QR码的实例 OpenCV在相机或图像中检测QR码的实例 #include "opencv2/objdetect.h ...

  7. OpenCV使用MSER检测末端区域的实例(附完整代码)

    OpenCV使用MSER检测末端区域的实例 OpenCV使用MSER检测末端区域的实例 OpenCV使用MSER检测末端区域的实例 #include <opencv2/core.hpp> ...

  8. 使用SQLmap检测漏洞

    使用sqlmap检测漏洞(经典用法) 1.sqlmap的安装 zip版:https://github.com/sqlmapproject/sqlmap/zipball/master tar.gz版:h ...

  9. 图像处理之前景检测(四)之自组织背景检测(SOBS)(转载)

    图像处理之前景检测(四)之自组织背景检测(SOBS)(转载)        一种基于自组织神经网络(self-Organizing through artificial neural networks ...

最新文章

  1. 你说,一个Java字符串到底有多少个字符?
  2. 独家 | 人工神经网络中发现了人类大脑拥有的多模态神经元(附链接)
  3. html5播放视频只有声音不出现画面?
  4. shadows a parameter
  5. [医疗开发]医疗相关名词解析
  6. asp.net asp:TextBox控件绑定值后,获取不到新值问题解决方法
  7. android log 码率,webrtc之Android视频质量提升:保帧率降码率
  8. python_集合(set)
  9. mysql实现类似oracle中rownum的效果
  10. sql-删除无效sql链接
  11. paip.语义相关是否可在 哈米 的语义分析中应用
  12. USB转串口那些事儿—串口驱动类型
  13. win10 32位和64位的区别,win10 32位和64位有什么区别
  14. 计算机中0和1的表示
  15. 超级计算机作文230字,我想养小兔子二年级作文230字
  16. python,基础-字符串(1)
  17. Ordered Fractions
  18. Name Mangling
  19. 人工神经网络(ANN/NN)、感知机(PLA)
  20. LibreOJ #6177. 「美团 CodeM 初赛 Round B」送外卖2【状压DP】

热门文章

  1. 【KMRE全新升级】玩法更多、应用更全、体验更好
  2. Unity适配iPhoneX iOS 11+ Home键易误操作的问题
  3. YOLOV5融合SE注意力机制和SwinTransformer模块开发实践的中国象棋检测识别分析系统
  4. nacos 官方以及社区文档
  5. 3xian的经历和见解....我深思...(转)
  6. X86 平台Ubuntu系统下模拟ARM64架构虚拟机的方法
  7. 帆软超链接导出excel
  8. 听说大企业的IT部都在纷纷独立成网络科技公司,客户变友商了
  9. C++实现软件版本号比较
  10. @mysql读写分离分库分表