实验环境
推荐使用的环境 | 备注 | |
---|---|---|
操作系统 | Ubuntu | |
虚拟机 | Vmware | |
调试器 | ||
反汇编器 | ||
漏洞软件 | sudo |
静态分析
void
sudo_debug(int level, const char *fmt, ...)
{
va_list ap;
char *fmt2;
if (level > debug_level)
return;
/* Backet fmt with program name and a newline to make it a single write */
easprintf(&fmt2, "%s: %s\n", getprogname(), fmt);
va_start(ap, fmt);
vfprintf(stderr, fmt2, ap);
va_end(ap);
efree(fmt2);
}
描述
Here getprogname() is argv[0] and by this user controlled. So argv[0] goes to fmt2 which then gets vfprintf()ed to stderr. The result is a Format String vulnerability.
因此如果控制getprogname(如将其传入的程序名设置为%n)就会导致任意地址写入。
动态分析
执行完vfprintf后fmt2变成了%n settings: %s=%s\n
好像被系统的检测直接拦了。。。
本来还想看看多几个%s影响的是不是va指向地址的偏移,还是直接就是va指针本身地址的偏移,看来没啥希望了。
文章评论