FTP နှင့်သက်ဆိုင်သော application များတီထွင်သည့်အခါဝေးလံခေါင်ဖျားသော FTP ဆာဗာပေါ်ရှိလမ်းညွှန်ဖွဲ့စည်းပုံသတင်းအချက်အလက်များကိုကျွန်ုပ်တို့မကြာခဏရယူရန်လိုအပ်ပြီးနောက်ထပ်ခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်လုပ်ဆောင်ရန်လိုအပ်သည်။ PHP တွင် FTP_RAWLIST ၏လုပ်ဆောင်မှုသည် FTP server မှလမ်းညွှန်စာရင်းတစ်ခုရရန်မူလစွမ်းရည်ကိုပေးသည်။ ဤဆောင်းပါးသည် Exploit function ကိုပေါင်းစပ်ပြီး 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 တစ်ခုဖြစ်ပြီးဖိုင်ခွင့်ပြုချက်များ, ဖိုင်များ, ဖိုင်အရွယ်အစား, ဖိုင်အရွယ်အစား,
ကျွန်ုပ်တို့ဂရုစိုက်သည့်ကွက်လပ်များကိုထုတ်ယူနိုင်ရန် (ဖိုင်အမည်, ဖိုင်အရွယ်အစား, ဖိုင်အရွယ်အစား, ဖိုင်အရွယ်အစားစသည်) ကိုထုတ်ယူနိုင်ရန်အတွက် 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 ကို အသုံးပြုခြင်းအတွက်မကိုက်ညီသောနေရာများကြောင့်ပျက်ကွက်မှုများကိုရှောင်ရှားရန်မတူညီသောပုံစံများဖြင့်နေရာအမျိုးမျိုးရှိနေရာများကိုပြောင်းလွယ်ပြင်လွယ်မဖြစ်နိုင်ပါ။
ပြန်လည်အသုံးပြုရန်အတွက်ကျွန်ုပ်တို့သည်ခွဲခြမ်းစိတ်ဖြာမှု၏ယုတ္တိဗေဒကို 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);
ဤနည်းအားဖြင့်ကျွန်ုပ်တို့သည်အလွယ်တကူနောက်ဆက်တွဲယုတ္တိဗေဒလုပ်ငန်းစဉ်သို့မဟုတ်ပြသရန်အတွက်စနစ်တကျလမ်းညွှန်စာရင်းများကိုရရှိသည်။
FTP_RAWLIST ကို exploit (သို့မဟုတ် preg_split ) လုပ်ဆောင်ချက်များကိုပေါင်းစပ်ခြင်းဖြင့် PHP ပရိုဂရမ်မာများသည် FTP server မှအသုံးဝင်သောအဆောက်အအုံများမှပြန်လည်ထုတ်လွှင့်သောလမ်းကြောင်းအချက်အလက်များကိုလျင်မြန်စွာခွဲခြမ်းစိတ်ဖြာနိုင်သည်။ ဤနည်းလမ်းသည်ရိုးရိုးရှင်းရှင်းနှင့်အကျိုးရှိသည်။ FTP လမ်းညွှန် parsing အခြေအနေများအတွက်သင့်တော်သည်။
အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်လုပ်ဆောင်မှုဆိုင်ရာသမာဓိနှင့်သုံးစွဲသူအတွေ့အကြုံများကိုတိုးတက်စေရန်ဖိုင်ပြုပြင်မွမ်းမံခြင်းနှင့်ပတ်သက်သော directory contragion ကိုဝယ်ယူခြင်း,