免杀断链
免杀断链前言在这篇文章中我们介绍PEB断链(R3层和R0层)
R3层隐藏模块
首先我们介绍一下PEB断链,相信各位读者大大对PEB这个结构体可以说相当熟悉了,这里我们简单描述一下,做一个介绍
在开始使用TEB/PEB 获取进程的模块信息之前,我想有必要解释一下这两个名词:PEB 指的是进程环境块(Process Environment Block),用于存储进程状态信息和进程所需的各种数据。每个进程都有一个对应的 PEB 结构体。TEB 指的是线程环境块(Thread Environment Block),用于存储线程状态信息和线程所需的各种数据。每个线程同样都有一个对应的 TEB 结构体。
PEB 中包含了进程的代码、数据段指针、进程的环境变量、进程启动参数信息以及加载的模块信息等。在 x86-32 体系下,FS 段寄存器偏移 0x30 处存放了索引,索引查找的指针指向当前进程的 PEB 结构体,在 x86-64 下该指针位于 FS 段寄存器偏移 0x60 处。其他进程可以通过访问自己的 PEB 结构体来获取自己的状态和信息。
TEB 中包含了线程的堆栈指针、TLS(线程本 ...
侧信道爆破二分法
侧信道爆破二分法前言在经过一段时间的休息后,总算有时间开始搞ctf了,把以前没有完成的任务完成一下,并记录。
vim优化方案
侧信道二分法爆破
Vim优化方案在复现网上的相对应的题目时,由于没有原本的文件,按照对应思路写了一个文件,顺便优化了一下vim
用的是vim-plug加各种小插件的方案
gruvbox
nerdtree
vim-airline
首先安装vim-plug
https://github.com/junegunn/vim-plug这是地址
12curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
发现需要科学上网,但是我的虚拟机不知道为什么无法科学上网,可能是配置的问题,有其他解决办法我就没有深究。
于是使用第二种办法
123git clone https://gitee.com/S_rui/vim-plug.gitcp ./vim-plug/plug. ...
伪造 vtable 劫持程序流程
伪造 vtable 劫持程序流程简介前面我们介绍了 Linux 中文件流的特性(FILE),我们可以得知 Linux 中的一些常见的 IO 操作函数都需要经过 FILE 结构进行处理。尤其是_IO_FILE_plus 结构中存在 vtable,一些函数会取出 vtable 中的指针进行调用。
因此伪造 vtable 劫持程序流程的中心思想就是针对_IO_FILE_plus 的 vtable 动手脚,通过把 vtable 指向我们控制的内存,并在其中布置函数指针来实现。
因此 vtable 劫持分为两种,一种是直接改写 vtable 中的函数指针,通过任意地址写就可以实现。另一种是覆盖 vtable 的指针指向我们控制的内存,然后在其中布置函数指针。
实践这里演示了修改 vtable 中的指针,首先需要知道_IO_FILE_plus 位于哪里,对于 fopen 的情况下是位于堆内存,对于 stdin\stdout\stderr 是位于 libc.so 中。
1234567891011int main(void){ FILE *fp; long long *vtabl ...
以太坊智能合约Call注入攻击
以太坊智能合约Call注入攻击前言该文章只是对网上现有的文章进行整理,不具备原创性,相关引用都会在文章末尾进行标注
0x00 基础知识以太坊中跨合约调用是指的合约调用另外一个合约方法的方式。为了好理解整个调用的过程,我们可以简单将调用发起方合约当做传统web世界的浏览器,被调用的合约看作webserver,而调用的msg则是http数据,EVM底层通过ABI规范来解码参数,获取方法选择器,然后执行对应的合约代码。
当然,实际上智能合约的执行一般在打包交易或者验证交易的时候发生,上面的比喻只是方便理解。
在solidity语言中,我们可以通过call方法来实现对某个合约或者本地合约的某个方法进行调用。
调用的方式大致如下:
12<address>.call(方法选择器, arg1, arg2, …) <address>.call(bytes)
如上所述,可以通过传递参数的方式,将方法选择器、参数进行传递,也可以直接传入一个字节数组,当然要自己去构造msg.data的结构。
Solidity编程中,一般跨合约调用执行方都会使用msg.sender全局变量来获取 ...
代理配置
代理配置前言为了使我更了解一下代理,然后还有方便后面配置代理,这里写一下代理配置的方法,主要也是为了使虚拟机也能够科学上网
0x0 unbuntu0x0.0 系统代理设置我们将在/etc/profile.d/proxy.sh下添加一个shell脚本文件,这将确保设置适用于所有已登录的用户:
1sudo vim /etc/profile.d/proxy.sh
将以下内容写到文档中:
12345678910111213# set proxy config via profie.d - should apply for all usersexport http_proxy="http://10.10.1.10:8080/"export https_proxy="http://10.10.1.10:8080/"export ftp_proxy="http://10.10.1.10:8080/"export no_proxy="127.0.0.1,localhost"# For cu ...
什么是零信任网络
什么是零信任网络什么是零信任?「零信任」既不是技术也不是产品,而是一种安全理念。根据 NIST《零信任架构标准》中的定义: 「零信任(Zero Trust)」提供了一系列概念和思想,假定网络环境已经被攻陷,在执行信息系统和服务中的每次访问请求时,降低其决策准确度的不确定性。零信任架构(ZTA)则是一种企业网络安全的规划,它基于零信任理念,围绕其组件关系、工作流规划与访问策略构建而成。
零信任的策略简单来讲,「零信任」的策略就是「不相信任何人」,除非明确接入者身份,否则将无法通过验证,进行下一步操作。传统的访问验证方式只需要知道 IP 地址或主机信息,便可通过验证,而如今零信任的验证模型,需要更清晰、更明确的信息才准许通过,如若不清楚用户身份、访问来源、授权途径等信息,访问请求则会被立即拒绝。
零信任的主流技术从技术视角划分,零信任的主流技术分为三种:即 SIM:S 为 SDP(Software Defined Perimeter, 软件定义边界)、I 为 IAM(Identity and Access Management,身份识别与访问管理系统),M 为 MSG(Micro-Segm ...
什么是UART通信?常见的UART串口通信协议有哪些?
什么是UART通信?常见的UART串口通信协议有哪些?一、什么是UART?通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。UART是一种通用串行数据总线,主要应用于串行异步通信。这样的通用串行数据总线属于双向通信,可以实现全双工传输和接收。它将要传输的资料和数据在串行通信与并行通信之间加以转换。作为可以把并行输入信号转化成串行输出信号的集成芯片,[UART串口通信]通常被应用于元器件集成或其他通讯接口的链接。具体实物化表现为一些独立的UART串口通信模块,或作为集成于微处理器中的一些周边固化设备。一般是RS-232C规格的,与类似Maxim的MAX232之类的标准信号幅度变换芯片进行搭配,作为连接外部设备的接口。
二、UART无线串口模块通信使用的引脚接口在UART串口通信中,两个UART模块是可以直接进行相互通信的。发送UART将来自CPU(核心处理器)等控制设备的并行数据转换为串行数据形式,并将将转换得到的串行数据发送到接收的UART,接收UART然后又将串行数据转换回到接收设备的并行数据。数 ...
人工智能概述
人工智能概述概述
“ 人工智能(英语:artificial intelligence,缩写为 AI )亦称 机器智能 ,指由人制造出来的机器所表现出来的智能。通常人工智能是指通过普通计算机程序来呈现人类智能的技术。该词也指出研究这样的智能系统是否能够实现,以及如何实现。同时,通过医学、神经科学、机器人学及统计学等的进步,常态预测则认为人类的很多职业也逐渐被其取代。”–维基百科
人工智能这个词的出现最早可以追溯至1956年的达特茅斯会议。1956年8月,在美国汉诺斯小镇的达特茅斯学院,以约翰·麦卡锡(John McCarthy)、马文·明斯基(Marvin Minsky)、克劳德·香农(Claude Shannon)、艾伦·纽厄尔(Allen Newell)、赫伯特·西蒙(Herbert Simon)等为首的科学家们相聚在一起,讨论如何让机器模拟人类的学习能力,并在此次会议中正式提出了“人工智能”这个概念。
事实上,直到现在人工智能都没有一个非常明确且统一的定义。如果让我用一两句话来描述,我会说:“让机器明白人类的世界,或者我的意思是,让思想可以被数学描述。”(哦我的上帝这该死的翻译 ...
交叉编译器的命名规则及详细解释
交叉编译器的命名规则及详细解释在linux系统下搞嵌入式开发,交叉编译器那肯定是必备工具。用的场合多了,就会见到各种各样的编译工具,比如:
12345678arm-linux-gccarm-linux-gnueabi-gccarm-none-linux-eabi-gccarm-none-symbianelf-gccarm-none-uclinuxeabi-gccarm-none-linux-gnueabi-gccarm-cortex_a8-linux-gnueabi-gccmips-malta-linux-gnu-gcc
这些编译工具为什么这么叫,各自有什么含义,又分别用在什么场合,你都知道吗?下面就来一一讲解一下。
命名总则一般来说,交叉编译工具链的命名规则为:arch-core-kernel-system-language。其中:
arch:体系架构,如ARM,MIPS,等,表示该编译器用于哪个目标平台;core:使用的是哪个CPU Core,如Cortex A8;或者是指定工具链的供应商。如果没有特殊指定,则留空不填。这一组命名比较灵活,在某些厂家提供的交叉编译链中,有以厂家名 ...
二进制文件应急修复
二进制文件应急修复漏洞修复概述在具体分析一个漏洞之前,我先将漏洞简单的分一下类,根据漏洞修复的难度,可以把漏洞分为以下四类
后门函数、危险的字符串(/bin/sh)、输入函数长度溢出(硬编码)等
格式化字符串等
指针悬挂、堆栈溢出(动态长度)等
逻辑漏洞
这几类漏洞在 CTF、AWD 比赛中很常见,也是二进制漏洞利用的主要考察点,按照不同的漏洞又可以总结出几种修复方式
暴力 nop、修改硬编码数据
替换 GOT 表条目、符号解析信息
第三方工具替换系统函数、添加代码
手动添加代码
实际上,无论是何种修复手段,无非是对程序的代码进行添加、删除或者修改,虽然没有源代码,但是开发者们制作出了很多实用工具,灵活实用这些工具,就算没有源代码也可以实现对 binary 的 patch。
Patch 的核心思想:在不破坏程序原有功能的情况下,加入或者删除部分代码,修复程序的漏洞。
删除代码容易实现,但是插入代码难度就比较高了,具体我们在下面讨论。
工具简介在 patch 二进制文件时几个常用工具:
IDA
keypatch
LIEF
IDA 无需多言,keypatch ...