_environ与ssp攻击

本文详细介绍了在Linux C环境中,如何通过栈溢出漏洞利用environ变量,展示了一个涉及fork函数、__stack_chk_fail和__libc_argv[0]的攻击过程,包括找到puts函数地址、libc基址和环境变量地址,最终实现flag的泄露。

_environ

在Linux C中,environ是一个全局变量,它储存着系统的环境变量。

它储存在libc中

因此environ是沟通libc地址与栈地址的桥梁。

如图:即为一个程序中environ的具体信息:

1

environ利用

通过libc找到environ地址后,泄露environ地址处的值,可以得到环境变量地址,环境变量保存在栈中,通过偏移可以得到栈上任意变量的地址。

ssp攻击

canary的各种利用方式中,有一种是通过 __stack_chk_fail函数打印报错信息来实现。

__stack_chk_fail源码:

void __attribute__ ((noreturn)) __stack_chk_fail (void)
{
   
   
  __fortify_fail ("stack smashing detected");
}
void __attribute__ ((noreturn)) internal_function __fortify_fail (const char *msg)
{
   
   
  /* The loop is added only to keep gcc happy.  */
  while (1)
    __libc_message (2, "*** %s ***: %s terminatedn",
                    msg, __libc_argv[0] ?: "<unknown>");
}

据源码可见,报错信息中会打印出libc_argv[0]的值,而libc_argv[0]指向的则是程序名。

若我们能够栈溢出足够的长度,覆盖到__libc_argv[0]的位置,那我们就能让程序打印出任意地址的数据,造成任意地址数据泄露。这就是ssp攻击。

实例分析

wdb2018_guess

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值