လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> FTP_RAWLIST သည် directory data data download download ကိုဖြိုဖျက်ရန်စူးစမ်းလေ့လာသည်

FTP_RAWLIST သည် directory data data download download ကိုဖြိုဖျက်ရန်စူးစမ်းလေ့လာသည်

gitbox 2025-05-29

FTP နှင့်သက်ဆိုင်သော application များတီထွင်သည့်အခါဝေးလံခေါင်ဖျားသော FTP ဆာဗာပေါ်ရှိလမ်းညွှန်ဖွဲ့စည်းပုံသတင်းအချက်အလက်များကိုကျွန်ုပ်တို့မကြာခဏရယူရန်လိုအပ်ပြီးနောက်ထပ်ခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်လုပ်ဆောင်ရန်လိုအပ်သည်။ PHP တွင် FTP_RAWLIST ၏လုပ်ဆောင်မှုသည် FTP server မှလမ်းညွှန်စာရင်းတစ်ခုရရန်မူလစွမ်းရည်ကိုပေးသည်။ ဤဆောင်းပါးသည် Exploit function ကိုပေါင်းစပ်ပြီး FTP_RAWLIST ၏ပြန်လည်ပြုပြင်ခြင်းရလဒ်ကိုလျင်မြန်စွာဖြည့်ဆည်းပေးနိုင်သည်။

1 ။ FTP_RAWLIST ဆိုတာဘာလဲ

FTP_RAWLIST သည် PHP တွင် FTP စစ်ဆင်ရေးအတွက် function တစ်ခုဖြစ်သည်။ ၎င်း၏လုပ်ဆောင်ချက်မှာ FTP server သို့ စာရင်း command ကိုပေးပို့ပြီး Returned directory သို့မဟုတ် file information ကိုခင်းကျင်းစွာပြန်ပို့ပါ။ Array Element တစ်ခုစီသည် FTP လမ်းညွှန်ပစ္စည်းအချက်အလက်ဖြစ်သည်။

နမူနာကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 $conn = ftp_connect("gitbox.net");
ftp_login($conn, "username", "password");

$list = ftp_rawlist($conn, "/path/to/directory");
ftp_close($conn);

print_r($list);

ဤကုဒ်သည် FTP server gitbox.net နှင့်ချိတ်ဆက်ရန်သတ်မှတ်ထားသော directory တွင်ဖိုင်များနှင့် subdirectories အသစ်များစာရင်းကိုရယူရန်။

ပြန်လာသော $ စာရင်း array သည်အောက်ပါအတိုင်းဖြစ်နိုင်သည် -

 Array
(
    [0] => drwxr-xr-x   2 user group       4096 May 20 14:34 folder1
    [1] => -rw-r--r--   1 user group       1234 May 20 14:35 file1.txt
)

လိုင်းတစ်ခုစီသည်အာကာသခွဲခြားထားသော string တစ်ခုဖြစ်ပြီးဖိုင်ခွင့်ပြုချက်များ, ဖိုင်များ, ဖိုင်အရွယ်အစား, ဖိုင်အရွယ်အစား,

2 ။ exploit function ကိုသုံးပါ

ကျွန်ုပ်တို့ဂရုစိုက်သည့်ကွက်လပ်များကိုထုတ်ယူနိုင်ရန် (ဖိုင်အမည်, ဖိုင်အရွယ်အစား, ဖိုင်အရွယ်အစား, ဖိုင်အရွယ်အစားစသည်) ကိုထုတ်ယူနိုင်ရန်အတွက် item exploit function ကို အသုံးပြု. ပစ္စည်းတစ်ခုစီကိုဖြုတ်ချနိုင်သည်။

နမူနာကုဒ်:

 foreach ($list as $item) {
    $parts = preg_split("/\s+/", $item, 9); // အများဆုံးဝေစု9အစိတ်အပိုင်းတစ်ခု,ဖိုင်အမည်များအတွက်နေရာများကို truncating ရှောင်ကြဉ်ပါ
    $type = $parts[0][0] === 'd' ? 'directory' : 'file';
    $size = $parts[4];
    $name = $parts[8];

    echo "Type: $type, Size: $size, Name: $name\n";
}

preg_split ကို ပုံမှန်ပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်သာမန် exploit ကို အသုံးပြုခြင်းအတွက်မကိုက်ညီသောနေရာများကြောင့်ပျက်ကွက်မှုများကိုရှောင်ရှားရန်မတူညီသောပုံစံများဖြင့်နေရာအမျိုးမျိုးရှိနေရာများကိုပြောင်းလွယ်ပြင်လွယ်မဖြစ်နိုင်ပါ။

3 ။ ပြန်လည်ထူထောင်မှုတိုးတက်စေရန်လုပ်ဆောင်ချက်များကိုသို့ encapsulated

ပြန်လည်အသုံးပြုရန်အတွက်ကျွန်ုပ်တို့သည်ခွဲခြမ်းစိတ်ဖြာမှု၏ယုတ္တိဗေဒကို function တစ်ခုအဖြစ် encapsate လုပ်နိုင်သည်။

 function parseFtpRawList($rawList) {
    $result = [];
    foreach ($rawList as $item) {
        $parts = preg_split("/\s+/", $item, 9);
        $result[] = [
            'type' => $parts[0][0] === 'd' ? 'directory' : 'file',
            'size' => $parts[4],
            'name' => $parts[8],
        ];
    }
    return $result;
}

// အသုံးပြုမှုဥပမာ
$conn = ftp_connect("gitbox.net");
ftp_login($conn, "username", "password");
$rawList = ftp_rawlist($conn, "/");
$parsed = parseFtpRawList($rawList);
ftp_close($conn);

print_r($parsed);

ဤနည်းအားဖြင့်ကျွန်ုပ်တို့သည်အလွယ်တကူနောက်ဆက်တွဲယုတ္တိဗေဒလုပ်ငန်းစဉ်သို့မဟုတ်ပြသရန်အတွက်စနစ်တကျလမ်းညွှန်စာရင်းများကိုရရှိသည်။

4 ။ အကျဉ်းချုပ်

FTP_RAWLIST ကို exploit (သို့မဟုတ် preg_split ) လုပ်ဆောင်ချက်များကိုပေါင်းစပ်ခြင်းဖြင့် PHP ပရိုဂရမ်မာများသည် FTP server မှအသုံးဝင်သောအဆောက်အအုံများမှပြန်လည်ထုတ်လွှင့်သောလမ်းကြောင်းအချက်အလက်များကိုလျင်မြန်စွာခွဲခြမ်းစိတ်ဖြာနိုင်သည်။ ဤနည်းလမ်းသည်ရိုးရိုးရှင်းရှင်းနှင့်အကျိုးရှိသည်။ FTP လမ်းညွှန် parsing အခြေအနေများအတွက်သင့်တော်သည်။

အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်လုပ်ဆောင်မှုဆိုင်ရာသမာဓိနှင့်သုံးစွဲသူအတွေ့အကြုံများကိုတိုးတက်စေရန်ဖိုင်ပြုပြင်မွမ်းမံခြင်းနှင့်ပတ်သက်သော directory contragion ကိုဝယ်ယူခြင်း,