BruceFan's Blog

Stay hungry, stay foolish

0%

监督学习和无监督学习

简单来说:是否有监督(supervised),就看输入数据是否有标签(label)。输入数据有标签,则为有监督学习,没标签则为无监督学习。

阅读全文 »

模板是C++中泛型编程的基础,一个模板就是一个创建类或函数的蓝图。

函数模板

我们可以定义一个通用的函数模板(function template),而不是为每个类型都定义一个新函数。compare的模板版本如下:

阅读全文 »

题目概述

这是一道CTF的kernel题,题目不是很难,但是可以学到很多知识,下面会用两种方法对这个题目进行解决:
1.修改进程的cred结构体中权限相关的信息,将权限改为root;
2.通过ROP将cr4中的smep位置反,关闭SMEP机制,然后ret2usr获取root权限。
题目给出了三个文件:rootfs.cpio、bzImage和boot.sh。boot.sh内容如下:

阅读全文 »

之前写过一篇文章介绍过libc malloc,主要是PC上的malloc机制。这篇文章要介绍的是jemalloc,Android早在5.0就切换到了jemalloc。所以想要学习Android上堆相关的漏洞利用就要对jemalloc有所了解。

阅读全文 »

CVE-2015-3636是一个Android系统上可通用的root提权漏洞,这种提权漏洞的挖掘越来越困难,一方面是因为Android系统碎片化十分严重,另一方面是漏洞缓冲机制的不断引入。

漏洞概述

该漏洞属于Linux Kernel级别的use-after-free漏洞,存在于Linux内核的ping.c文件中。当用户态调用系统调用socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP),用返回的socket文件描述符作为参数调用系统调用connect(),并且connect的第二个参数中sa_family == AF_UNSPEC时,就会因为访问0x200200这个地址引起系统crash。如果攻击者巧妙地填充或者覆盖PING socket对象,就能达到获取root权限的目的。

阅读全文 »

前面一篇文章介绍过libFuzzer的基本用法了,本文就用libFuzzer来搞一些实际的事情。这里的学习还是以libfuzzer-workshop这个系列教程为主。

Heartbleed Vulnerable(CVE-2014-0160)

编译有漏洞的openssl版本 libfuzzer-workshop/lessons/05

阅读全文 »

简介

LibFuzzer是一个in-processcoverage-guidedevolutionary模糊测试引擎,是LLVM项目的一部分。LibFuzzer和要被测试的库链接在一起,通过一个特殊的模糊测试进入点(目标函数),用测试用例feed要被测试的库。fuzzer会跟踪哪些代码区域已经测试过,然后在输入数据的语料库上产生变异,来最大化代码覆盖。代码覆盖的信息由LLVM的SanitizerCoverage插桩提供。

阅读全文 »

CVE-2016-5195是一个几乎通杀全版本linux的本地提权的神洞,最近学习了Linux内核的一些调试方法和漏洞利用技术,但到目前为止做过的漏洞还都是比赛中的题目,都是驱动上的漏洞,没有做过实际漏洞的分析,这篇文章作为第一次对实际Linux Kernel漏洞的分析学习。

阅读全文 »

代码虚拟化简介

虚拟化是用一套自定义的字节码来替换程序中的native指令,而字节码在执行的时候又由程序中的解释器来解释执行。自定义的字节码只有解释器才能识别,一般工具无法识别这些字节码,所以基于虚拟机的保护相对其他保护而言要更加难破解。其中的关系就像解释语言一样,不是系统可执行文件,不能直接在系统中运行,需要相应的解释器才能运行,如Python。

阅读全文 »