我在互联网上做了一些挑战,我需要一些帮助
上下文: 目标是读取目录中.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;�?)来做到这一点,但它失败了......
感谢您的帮助。
答案 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"
它应该绕过最大大小条件