X3C

内存保护机制及绕过方案——通过覆盖虚函数表绕过/GS机制

邮差的信 提交于 2021-02-02 15:35:18
1 GS内存保护机制 1.1 GS工作原理 栈中的守护天使--GS,亦称作Stack Canary / Cookie,从VS2003起开始启用(也就说,GS机制是由编译器决定的,跟操作系统无关)。 GS机制分三个步骤:计算随机种子 --> canary写入栈帧 --> GS校验。 [1]程序启动时,读取 .data 的第一个 DWORD 作为基数,然后和各种元素(时间戳,进程ID,线程ID,计数器等等)进行XOR加密 [2]然后将加密后的种子再次写入 .data 的第一个 DWORD [3]函数在执行前,把加密后的种子取出,与当前 esp 进行异或计算,结果存入EBP的前面 [4]函数主体正常执行。 [5]函数返回前(retn前一点),把cookie取出与esp异或计算后,调用security_check_cookie函数进行检查,与.data节里的种子进行比较,如果校验通过,则返回原函数继续执行;如果校验失败,则程序终止。 图解: 1.2 变量重排技术 如图1.1所示,在缓冲区域cookie之间还有一些空隙,这是因为在旧版本(VS2005之前)的编译器里,局部变量是随机摆放的(指针,int,字符串位置随机) 所以这里就还存在一丝安全隐患->_->那就是Buff可能在不压过Cookie的情况下覆盖一些局部变量,所以,后期的编译器就推出了-- 变量重排技术。 如图1-2所示 图 1

执行方式免杀之内联汇编(FUD101连载三)

风格不统一 提交于 2021-01-23 05:21:30
声明 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。 前言 针对本篇及后续文章中用到的部分技术,我已经写好了相关代码,用于快速生成免杀的可执行程序,源代码放在了(github)[https://github.com/1y0n/AV_Evasion_Tool]上,也可以直接下载编译好的(程序)[https://github.com/1y0n/AV_Evasion_Tool/releases] 工具界面如下: 效果如下: 学习免杀,汇编是一个永远绕不开的话题。这一章节,我们将学习汇编一些常见的指令,通过这些指令执行我们的 shellcode 可以取得很好的免杀效果。当然,我们学习的仅是汇编中比较基础的部分,更多的内容需要自己不断地学习研究。 No.1 基础知识 寄存器 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。32位通用寄存器有 8 个: 常见操作码 花指令 花指令指一些没有实际意义的指令,执行或不执行它们对最后的结果不会带来影响,但可以增加反汇编分析的难度,甚至会干扰反汇编程序的正常工作

FUD101(连载): 一、shellcode免杀

二次信任 提交于 2021-01-23 04:57:11
No.1 声明 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。 No.2 前言 针对本篇及后续文章中用到的部分技术,我已经写好了相关代码,用于快速生成免杀的可执行程序,源代码放在了(github)[https://github.com/1y0n/AV_Evasion_Tool]上,也可以直接下载编译好的(程序)[https://github.com/1y0n/AV_Evasion_Tool/releases] 工具界面如下: 效果如下: 目前,针对 shellcode 的免杀,在不讨论自己编写 shellcode,而是使用现成的 shellcode(msfvenom、cobaltstrike等)的情况下,主要有两种方式: 1、分离免杀 分离免杀主要是将 shellcode 和 loader 彻底分开,比如可以将 shellcode 藏在其他文件中、放在网络上等等。 2、加密混淆 加密混淆指将 shellcode 进行一定变形处理后,同 loader 放在一起,打包为一个完整独立的可执行文件。

30天自制操作系统之-第一天-

心已入冬 提交于 2020-11-30 07:00:12
从计算机结构到汇编程序入门 最近受知乎影响,一股脑热买了这本《30天自制操作系统》的书,该书是日本一位大牛写的。看了前20页,还是有些东西可以琢磨的,虽然接触计算机也7年了,惭愧在于大多都只停留在想法,而未动手去好好实践,大忌大忌。写这个系列章节也是希望通过这样的方式来督促自己。工作几个月的感受其实就是:凡是能够追求百分百的一定不能懈怠,不能因为你已经取得第一而放弃继续追求完美。两年前跟导师辩论过,当时我还是很不理解,“都已经达到第一了,为什么还要去花十倍的努力去做的完美”,这里再次感谢导师的教诲。一鞠躬。 废话多了,言归正传。首先根据书中第一天的任务下载个二进制编辑器, https://www.vcraft.jp/soft/bz.html , 这里直接放工具在百度云盘里。https://pan.baidu.com/s/1I1FoGeB-BRLFkbX3Pv8fnA 书中介绍该工具用于对二进制进行编辑,可以生成.img文件。之前搞KVM、OpenStack就经常跟.img文件打交道,这次终于可以试一试自己写一个.img了(nice脸)。 以下代码是该书作者自己写的汇编编译器做的一个.img文件的生成脚本。该代码主要是节省手工编写17万行的二进制(书中提到),这也是编译器干的事。至于汇编代码中每个语句的含义,需要后续章节在体会体会才行。 ; hello- os ; TBA = 4

迅为IMX6ULL开发板Linux下电容触摸屏实验-驱动框架

时光怂恿深爱的人放手 提交于 2020-11-27 10:58:06
如今 触摸屏 的使用越来越广泛,从手机、平板到蜂巢取货等场合,都是用了触摸屏,触摸屏的使用非常便捷高效。在本章就来学习一下如何在 Linux 下编写 电容 触摸屏驱动。 54.1 Linux 下电容触摸屏驱动框架 54.1.1 多点触摸协议详解 在前面的裸板实验中,已经详细讲解过了电容触摸驱动的基本原理,根据前面的实验可以总结出电容触摸屏驱动其实就是一下几种 linux 驱动框架的组合: ① IIC 设备驱动,因为电容触摸 IC 基本都是 IIC 接口的,因此大框架就是 IIC 设备驱动。 ② 通过中断引脚(INT)向 linux 内核上报触摸信息,因此需要用到 linux 中断驱动框架。坐标的上报在中断服务函数中完成。 ③ 触摸屏的坐标信息、屏幕按下和抬起信息都属于 linux 的 input 子系统,因此向 linux 内核上报触摸屏坐标信息就得使用 input 子系统。只是,我们得按照 linux 内核规定的规则来上报坐标信息。 在上面的驱动框架组合中我们发现 I2C 驱动、中断驱动、input 子系统都已经学习了解过了,还没有学习过 input 子系统下的多点电容触摸协议,这个就是本章学习的重点,linux 内核中有一份文档详细的讲解了多点电容触摸屏协议,文档路径为:Documentation/input/multitouch-protocol.txt。 MT

海思Hi3516A(3)图像sensor驱动开发

一个人想着一个人 提交于 2020-08-14 02:52:17
1. 设备驱动加载及系统配置 关于sensor的开发环境、MPP的工作原理、ISP简介等可参考shugenyin的博客——海思Hi3518EV200。 cd ko ./load3516a -a -sensor sc3035 -osmem 64 在load脚本中添加sensor的相关配置,这里使用smartsens的SC3035-M的360万像素CMOS sensor。 insert_sns() { case $SNS_TYPE in sc3035) himm 0x200f0050 0x2; # i2c0_scl himm 0x200f0054 0x2; # i2c0_sda himm 0x2003002c 0xB0007 # sensolsr unreset, clk 27MHz, VI 250MHz ;; *) echo "xxxx Invalid sensor type $SNS_TYPE xxxx" report_error ;; esac } 2. sensor的库文件生成(.so) sensor的库文件需要在Linux服务器中的SDK包中编译得到,将生成的.so文件放到SDK包中的stream软件包中的Hi3516A_Stream_xxx/libs目录下。 sc3035_sensor_ctl.c实现sensor的初始化。 void sensor_init() {

freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(三)之Flash控制器指令执行

馋奶兔 提交于 2020-08-05 22:10:23
  前面我们介绍了Flash主要的几个寄存器,如果还有其他的疑问可以再返回去看看或者直接查阅S12系列单片机的手册中相关的内容。这一节我将介绍Flash控制器指令执行的过程,并举出相关的例子,希望能够起到举一反三的效果。   在手册中FCCOB寄存器下面,介绍了Flash寄存器执行指令的过程是这样的:   我们解释下:NVM执行指令时将 通过FCCOB寄存器 向存储控制器提供 一个指令码还有其相关的参数 ,也就是说先根据指令码对FCCOB寄存器进行设置,然后通过对FSTAT寄存器中的CCIF位写入1从而使Flash控制器开始执行FCCOB中的指令(当向CCIF写1后,读取CCIF时其值将为0)。当用户向CCIF中写1后,FCCOB指令寄存器内的内容将被锁定直到此次指令执行结束。如果 该指令码有返回值,则返回信息将会在FCCOB寄存器内 。   我们稍微总结下Flash寄存器执行指令的过程:   1. 先通过调整FCCOBIX寄存器向FCCOB寄存器各个word中写入指令码与相关的参数   2. 向FSTAT的CCIF位中写入1,开始指令执行   3. 读取CCIF的值直到指令执行结束,若指令码有返回值则读取并返回(还有FSTAT中的其他位可能表示了写入过程中的错误信息)   这样就可以让Flashi控制器完成一次指令的执行了。下面我们看一下一个手册中的典型FCCOB寄存器的用法:

BUUCTF--[MRCTF2020]Transform

陌路散爱 提交于 2020-05-04 09:23:42
测试文件: https://lanzous.com/ic33b6f 代码分析 // local variable allocation has failed, the output may be wrong! int __cdecl main( int argc, const char **argv, const char ** envp) { __int64 v3; // rdx __int64 v4; // rdx char v6[ 104 ]; // [rsp+20h] [rbp-70h] int j; // [rsp+88h] [rbp-8h] int i; // [rsp+8Ch] [rbp-4h] sub_402230(argc, argv, envp); puts(argc, (__int64)argv, v3, (__int64) " Give me your code:\n " ); scanf(argc, (__int64)argv, (__int64)v6, (__int64) " %s " ); if ( strlen(*( const char **)&argc) != 33 ) // flag长度为33 { puts(argc, (__int64)argv, v4, (__int64) " Wrong!\n " ); system( *( const

应用安全

橙三吉。 提交于 2020-05-04 05:47:59
SSV-97074 Date 2018 类型 前台任意密码修改 影响范围 前置条件 CVE-2018-20129 Date 2018 类型 前台文件上传 影响范围 前置条件 (1)前台登录 (2)/member/article_add.php可访问 SSV-97087 Date 2018 类型 越权 影响范围 前置条件 (1)有前台登录账号 CVE-2018-9175 Date 2018 类型 影响范围 前置条件 (1)可登录后台 /member/reg_new.php SQL 注入漏洞 /member/buy_action.php SQL 注入漏洞 /member/buy_action.php SQL 注入漏洞 plus/guestbook.php 注入漏洞 /plus/recommend.php SQL 注入漏洞 /tag.php SQL 注入漏洞 /plus/infosearch.php SQL 注入漏洞 /plus/feedback_js.php SQL 注入漏洞 /member/mtypes.php SQL 注入漏洞 /plus/flink_add.php SQL 注入漏洞 member/ajax_membergroup.php SQL 注入漏洞 plus\feedback.php SQL 注入漏洞 plus/search.php SQL 注入漏洞 include

stm32+lwip(五):以太网帧发送测试

亡梦爱人 提交于 2020-05-02 19:41:57
我是卓波,很高兴你来看我的博客。 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32+lwip(四):网页服务器测试 stm32+lwip(五):以太网帧发送测试 很多时候,我们想直接获取以太网帧的数据或者直接发送以太网帧数据。在使用 STM32CubeMX 生成的工程当中,有两个函数就是直接跟以太网通信有关: 1 /* * 2 * This function should do the actual transmission of the packet. The packet is 3 * contained in the pbuf that is passed to the function. This pbuf 4 * might be chained. 5 * 6 * @param netif the lwip network interface structure for this ethernetif 7 * @param p the MAC packet to send (e.g. IP packet including MAC addresses and type) 8 * @return ERR_OK if the packet could be