BruceFan's Blog

Stay hungry, stay foolish

0%

这篇文章用python实现一下区块链的基本概念,主要目的是凑热闹学习区块链相关知识,没有太大实际用途。

创建区块链

区块链就是许多区块的链表,区块链里的每个链表都有自己的签名,包含前一个区块的数字签名和一些数据(例如交易)。

阅读全文 »

监督学习和无监督学习

简单来说:是否有监督(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漏洞的分析学习。

阅读全文 »