堆溢出问题

以前没怎么弄过堆溢出问题,直到最近看见Google研究团队发布了关于dnsmasq的一系列问题 (需要翻墙)

其中有两个CVE涉及到了Heap Overflow。

其中的基础知识不再赘述,可以直接参考以下链接学习

1.Linux堆内存管理深入分析(上)
2.Linux堆内存管理深入分析(下)
3.Linux堆溢出漏洞利用之unlink

至此,基本的堆溢出原理就已经很明白了。

但是在最新的glibc中unlink的宏已经被修改,如下所示

#define unlink(AV, P, BK, FD)
{
    if (__builtin_expect (chunksize(P) != prev_size (next_chunk(P)), 0))
      malloc_printerr ("corrupted size vs. prev_size");
    FD = P->fd;
    BK = P->bk;
    if (__builtin_expect (FD->bk != P || BK->fd != P, 0))
      malloc_printerr ("corrupted double-linked list");
    else
    {
        FD->bk = BK;
        BK->fd = FD;
        if (!in_smallbin_range (chunksize_nomask (P)) && __builtin_expect (P->fd_nextsize != NULL, 0))
        {
            if (__builtin_expect (P->fd_nextsize->bk_nextsize != P, 0) || __builtin_expect (P->bk_nextsize->fd_nextsize != P, 0))
                   malloc_printerr ("corrupted double-linked list (not small)");
            if (FD->fd_nextsize == NULL)
            {
                if (P->fd_nextsize == P)
                  FD->fd_nextsize = FD->bk_nextsize = FD;
                else
                {
                    FD->fd_nextsize = P->fd_nextsize;
                    FD->bk_nextsize = P->bk_nextsize;
                    P->fd_nextsize->bk_nextsize = FD;
                    P->bk_nextsize->fd_nextsize = FD;
                }
            }
            else
            {
                P->fd_nextsize->bk_nextsize = P->bk_nextsize;
                P->bk_nextsize->fd_nextsize = P->fd_nextsize;
            }
        }
    }
}

其中关键的部分为

if (__builtin_expect (FD->bk != P || BK->fd != P, 0))

这里就要求我们能找到一个ptr指向一个P,而P为堆上的分配的空间。
如何绕过此处,请参考如下链接

4.unlink绕过

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tinyproxy是一款轻量级的HTTP代理服务器,它可以在Linux/Unix系统上运行。在使用Tinyproxy的过程中,我们发现它存在一个溢出漏洞,攻击者可以利用该漏洞进行攻击,本文将介绍该漏洞的复现过程。 漏洞描述 Tinyproxy中存在一个溢出漏洞,攻击者可以通过发送恶意的HTTP请求来触发该漏洞,导致程序崩溃或执行恶意代码。 复现步骤 1. 下载安装Tinyproxy 首先需要下载Tinyproxy,并安装在Linux/Unix系统上。可以通过以下命令进行安装: ``` sudo apt-get update sudo apt-get install tinyproxy ``` 2. 启动Tinyproxy 在安装完成后,可以通过以下命令启动Tinyproxy: ``` sudo service tinyproxy start ``` 3. 准备测试工具 我们需要使用一个测试工具,来发送恶意的HTTP请求。这里我们使用的是Metasploit框架中的`http_chunked`模块。如果你还没有安装Metasploit框架,可以通过以下命令进行安装: ``` sudo apt-get install metasploit-framework ``` 4. 构造恶意HTTP请求 使用`msfconsole`命令打开Metasploit框架,进入交互式界面。然后执行以下命令,构造恶意HTTP请求: ``` use auxiliary/scanner/http/http_chunked set RHOSTS <target_ip> set RPORT 8888 set TARGETURI / run ``` 其中,`<target_ip>`是目标机器的IP地址,`8888`是Tinyproxy的默认端口号。执行完上述命令后,Metasploit框架会发送恶意的HTTP请求到目标机器上。 5. 复现漏洞 当目标机器接收到恶意的HTTP请求时,Tinyproxy会尝试解析该请求。由于请求中的数据长度超出Tinyproxy的缓冲区大小,导致程序发生溢出,从而崩溃或执行恶意代码。 漏洞修复 目前,官方并没有发布该漏洞的修复版本。建议用户不要在生产环境中使用Tinyproxy,或者使用其他替代品。如果必须使用Tinyproxy,建议在防火墙等安全设备上,对Tinyproxy进行限制,避免攻击者利用该漏洞进行攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值