PDA

View Full Version : sql injection



houtanal
یک شنبه 10 اسفند 1382, 17:24 عصر
کد زیر کد یک صفحه php است


<form name="form1" method="get" action="<?=$PHP_SELF?>">
<input type="text" name="text">
<input type="submit" name="Submit" value="Submit">
</form>
<?php
$var=$_GET["text"];
if(isset($var) && empty($var)==false){
$conn=mysql_connect("localhost","root","pass") or die("error");
$db=mysql_select_db("test") or die("error2");
$query="SELECT * FROM test WHERE name LIKE '$var'";
$result=mysql_query($query) or print(mysql_error());
while ($row=mysql_fetch_array($result)){
echo $row[name]."<p>";echo $row[phone]."<p>";echo $row[family]."<p>----<p>";
}
}
?>
اگر من در url خود وارد کنم


http://127.0.0.1/1.php?text=ho%20union select * from test where name='houtan'

باید بوسیله یک sql injection ساده اطلا عات houtan را به من بدهد در حالی که من با error بانک اطلا عاتی مواجه می شوم
چرا؟ :shock:

oxygenws
یک شنبه 10 اسفند 1382, 18:45 عصر
سلام،

بهتر بود این سوال رو در بخش php می پرسیدی.... :)
در php.ini متغیرس داریم به نام magic_quotes_gpc که احتمالا در مکانی که این برنامه رو اجرا کردید ON بوده...
کار این متغیر همونجوری که شاید از نامش معلوم باشه این هستش که علامت های qoute مثل ' و " رو با یک اسلش در ابتدای اون به برنامهء شما پاس می ده یعنی متغیر text در داخل خود برنامه به احتمال زیاد به صورت زیر در خواهد آمد...


text=ho%20union select * from test where name=\'houtan\'


با این تفاسیر.... این query جدید برای بانک ناشناخته خواهد بود و مسلما به شما error بر خواهد گرداند!!!

موفق باشید، امید

houtanal
یک شنبه 10 اسفند 1382, 23:24 عصر
1-با phpinfo() چک کردم off بود
:shock: 2-آیا بجز تغییر در php.ini راهی برای گرفتن اطلاعات به این روش هست؟ :متفکر:

oxygenws
دوشنبه 11 اسفند 1382, 01:11 صبح
تا اونجایی که من می دونم نه....
باز هم قبل از ارسال اون رشته به بانک اون رو پرینت کن ببین دقیقا چه شکلی هستش.
نتیجه رو اینجا بنویس تا یه فکری به حالش بکنیم :) :wink:

موفق باشید، امید

houtanal
دوشنبه 11 اسفند 1382, 01:24 صبح
در url نشان داده شده در address bar هیچ تغییری بجز اضافه شدن %20 به جای فاصله ها نمی بینم
در مقالاتی که می خوانم مثال های جامعی نمی بینم اما با همان روشی که آن ها توضیح داده اند کار می کنم و جواب نمی گیریم
اگر لطف کنید یک مثال ساده برای من بگذار :flower: ید

oxygenws
دوشنبه 11 اسفند 1382, 02:10 صبح
می شه لطف کنی و دقیقا خروجی کدت رو بدی....
البته کدت رو به صورت زیر تغییر بدی بد نیست....
x die("SELECT * FROM test WHERE name LIKE '$var'"); x

موفق باشید، امید