加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 服务器 > 安全 > 正文

深入考察解释型语言幕后隐藏的攻击面

发布时间:2022-09-02 10:01:02 所属栏目:安全 来源:互联网
导读:通常情况下,在高级语言的内存管理功能的实现代码中,往往存在着相对脆弱的基于C/C++的攻击面。这种问题可能存在于语言本身的核心实现中,也可能存在于将向高级语言提供基于C/C++的库的第三方语言生态系统中。本上一篇文章中,我们为读者介绍了与此紧密相关
  通常情况下,在高级语言的内存管理功能的实现代码中,往往存在着相对脆弱的基于C/C++的攻击面。这种问题可能存在于语言本身的核心实现中,也可能存在于将向高级语言提供基于C/C++的库的第三方语言生态系统中。本上一篇文章中,我们为读者介绍了与此紧密相关的C格式字符串漏洞方面的知识,在本文中,我们将为读者介绍这些底层实现是如何影响解释型语言的安全性的。

  事实证明,攻击者确实可以通过Perl_sv_vcatpvfn中的格式化支持的C级实现来利用基于Perl的格式字符串漏洞。
 
  Perl格式字符串的参数存储在参数结构指针数组(称为svargs)中,并为格式说明符(例如%1$n)提供准确的格式索引,以使用该索引从参数数组检索适当的参数结构指针。当从数组中检索关联的参数结构指针时,Perl将根据格式字符串可用的参数数量,确保所提供的索引不超过数组的上限。这里的参数计数实际上保存一个带符号的整型变量中,即svmax。也就是说,如果将格式字符串传递了1个参数,则svmax的值为1,并且检查精确格式索引值不超过1。如果攻击者提供了格式字符串,则不存在任何参数,这时svmax的值为0。
 
  但是,精确格式索引也是带符号的32位整数,并且其值完全由攻击者提供的格式字符串控制。这意味着您可以将此参数数组索引设置为负值,这样也可以通过针对svmax的带符号上限检查。
 
  了解这一点后,漏洞的利用就变得相当简单了。人们可以直接通过svargs数组索引指向任何指向攻击者控制的数据的指针。这种受攻击者控制的数据将被解释为参数结构,其中包含指向值字段的指针。与熟悉的%n格式说明符相结合,攻击者就能够对受控位置执行受控写入操作。使用这样的写原语,就可以覆盖任何可写进程内存的内容,而这些内容可以通过各种方式用于完整的过程控制中。
 
  这是一个很好的例子,它为我们展示了Perl格式化实现的bug是如何转化为安全漏洞的。结合Webmin中的格式字符串漏洞,攻击者就能够对Webmin发动远程代码执行(RCE)攻击。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读