如何使用字符串在内存中插入空字节

时间:2014-10-11 18:51:29

标签: c shell null byte

我在互联网上做了一些挑战,我需要一些帮助

上下文: 目标是读取目录中.password文件的内容。 在这个目录中有一个二进制文件(和他的源代码可用)。 当我们执行这个二进制文件时,我们获得了超级用户权限(带有ls的位)。

这里是代码:

int main(int argc, char ** argv)
{
        char cmd[256]= "/bin/ls -la ";
        if(argc!=2)
        {
                printf("Usage : %s <nom de dossier>\n",argv[0]);
                return 1;
        }
        if(strlen(argv[1])<9)
        {
                strcat(cmd, argv[1]);
                system(cmd);
        }
        else
        {
                printf("No input larger than 8 char allowed.\n");
        }
        return 0;
}

所以它是基本的我用argv [1]注入一个命令来捕捉像这样的.password

argv[1] = " .| cat .password"

if(strlen(argv[1])<9)阻止了我。 我想我必须注入一个空字节来诱骗strlen。 我对吗 ? 我试过用hexa&gt; String转换器(0x00 - &gt;�?)来做到这一点,但它失败了......

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您的argv[1]长度为17个字符,所以

if(strlen(argv[1])<9)

将失败并转到else部分。

您应该将值9增加到18或更多。

答案 1 :(得分:0)

您应该尝试创建自己的函数,例如mycat包含

#!/bin/sh
/bin/cat /path/to/.password

所以使用argv[1]="| mycat"它应该绕过最大大小条件