یک نکته ی جالب ( آموزش )

parsiteam

Member
سلام . یک چیز جالب دیدم گفتم به دوستانم هم بگم در جریان باشن ( البته واسه من خیلی جالب و بود حال کردم :D )


تا حالا تمامی ورودی های GET یا POST رو با ['']GET_$ یا ['']POST_$ میگرفتم . یک تابع جالب دیدم که واقعا باحال بود . و اون این بود که میاد ورودی ها رو بنام خودشون متغیر میسازه . مثال میزنم :

یک صفحه داریم با ورودی از نوع GET به شکل زیر :

کد:
example.php?sasan=nobakht&ali=yes


همینطور که همه میدونیم ورودی ها اینطوری هستن :


PHP:
$_GET['sasan'] ============> nobakht
$_GET['ali'] ============> yes



اگر تابع extract() رو روی ورودی اعمال کنیم علاوه بر این , یک متغیر بنام ورودی ها ساخته میشه با همون مقدارش . یعنی :


PHP:
extract($_GET);


$sasan ============> nobakht
$ali ============> yes


مفید بود ؟
 
آخرین ویرایش:
extract در موارد دیگه ای هم کاربرد داره:
PHP:
$sql = mysql_query("select `id`,`fild` from table");
$Result = mysql_fetch_array($sql);
extract($Result);
echo $id;
echo $fild;
و یه چیزی این که ما بیایم $_GET یا $_POST رو extract کنیم کاری شبیه به register_globals وقتی که on باشه انجام میدیم که از لحاظ امنیتی توصیه نمیشه
 

parsiteam

Member
و یه چیزی این که ما بیایم $_GET یا $_POST رو extract کنیم کاری شبیه به register_globals انجام میدیم که از لحاظ امنیتی توصیه نمیشه


کاملا مخالفم . این طفلکی فقط میاد کلا در آرایه ها یک متغیر به نام کلید آرایه و مقدار درون کلید میسازه . خوشم اومده ازش :دی :lol:
 

Allahparast

Member
PHP:
<form method="POST">
<input type="text" name="this" value="salam"><input type="submit">
</form>
<?php
echo extract($_POST),$this;
?>
HTML:
$this ----> 1salam
منظور از 1 آرایه بیشتر وجود نداره اما اگه بخوایم به صورت آرایه خروجی بگیریم چی ؟
 
آخرین ویرایش:

parsiteam

Member
PHP:
<form method="POST">
<input type="text" name="this" value="salam"><input type="submit">
</form>
<?php
$test=extract($_POST);
echo $this;

?>

HTML:
$this ----> salam
عزیزم نیازی نیست خروجی تابع رو داخل متغیر بریزی . یعنی :

PHP:
$test=extract($_POST);

همینطور خالی صداش بزنی کافیه . یعنی اینجوری :

PHP:
<?php
$extract($_POST);
echo $this;

?>


در مورد سوال هم باید عرض کنم که اینو اجرا کنی متوجه میشی داداش گلم :


PHP:
<form method="POST">
<input type="text" name="this1" value="salam1">
<input type="text" name="this2" value="salam2">
<input type="submit">
</form>
<?php
extract($_POST),
echo $this1;
echo $this2;
?>
 
آخرین ویرایش:
داش ساسان بر فرض ما یه سیستم داشته باشیم تویه نت هم پخش شده باشه امنیتش هم ضریب 100 باشه.فقط بیاد
PHP:
extract($_GET)
یا
extract($_POST)
کنه. خب با هم مرور میکنیم قسمت لوگین رو :

PHP:
$Password = mysql_result($sql,1,'Password');
$Username = mysql_result($sql,1,'Username');

extract($_POST);

if($Usernamefild == $Username and $Passwordfild == $Password){
کد هاي مربوط به ورود
}

خب طرفی که این سیستم رو داره(قبلا تو نت دانلود کرد) میتونه با cURL یه Username و Password هم ارسال کنه.
خب در این صورت هر چیزی اون بزنه پسورد همون میشه به همین سادگی به مدیریت سیتسم نفوذ کرد .
 
با extract($_POST); و extract($_GET); بطور 100% مخالفم دلیل هم اوردم در پست بالایی:)
یه مدت پیگیر هک پی اچ پی شدم:paint:و extract($_POST); و extract($_GET); رو یه باگ اساسی حساب میکردن:shock:
 
آخرین ویرایش:

jigartalaa

Member
اصلاً به نظر من فایده نداره ! اگه مقادیر رو با همونا بفرستی بهتره به نظر من ! extract اگر خوب بود قبل ما این برنامه نویسای خارجی باهاش کار میکردن !
 

Allahparast

Member
PHP:
<?php
$stack = array();
foreach ($_POST as $key => $value) {
array_push($stack, $key, $value);
}
$block = implode(" ",$stack);

$query = "INSERT INTO `sometable` VALUES('".$seluser."','".addslashes($block)."');";
$result = mysql_query($query) or die("Query failed for block insert: " . mysql_error());

?>
 

parsiteam

Member
اگر خوب بود قبل ما این برنامه نویسای خارجی باهاش کار میکردن !

با این ایده مخالفم .




داش ساسان بر فرض ما یه سیستم داشته باشیم تویه نت هم پخش شده باشه امنیتش هم ضریب 100 باشه.فقط بیاد
PHP:
extract($_GET)
یا
extract($_POST)
کنه. خب با هم مرور میکنیم قسمت لوگین رو :

PHP:
$Password = mysql_result($sql,1,'Password');
$Username = mysql_result($sql,1,'Username');

extract($_POST);

if($Usernamefild == $Username and $Passwordfild == $Password){
کد هاي مربوط به ورود
}

خب طرفی که این سیستم رو داره(قبلا تو نت دانلود کرد) میتونه با cURL یه Username و Password هم ارسال کنه.
خب در این صورت هر چیزی اون بزنه پسورد همون میشه به همین سادگی به مدیریت سیتسم نفوذ کرد .



ببین اصلا با اجرای این دستور داریم :

PHP:
$_GET['sasan'] =======> $sasan


حالا چه فرقی میکنه بابا . طرف $sasan رو بفرسه یا با فرم $_GET['sasan'] رو بفرسه . بعدشن 100 بار بفرسه . وقتی اشتباهه که وارد نمیشه .
 
آخرین ویرایش:

D.A.V.O.O.D

Member
نه مسعود جان
داری اشتباه می کنی ، این extract همون $_POST و $_GET هستش ، هیچ فرقی با اونا نداره ، با این تفاوت که extract بهینه تر می کنه کد هارو ، اگه اشتباه نکنم وردپرس هم همینطوری ورودی ها رو می گیره !
 
داش ساسان از extract($_POST); و extract($_GET); به هیچ وجه در کارات استفاده نکن.خب فرقشون اینه که اگر طرف اینو بزنه ?Username=masoud&Password=masoud یوزر نیم و پسورد اصلی سایت میشه masoud به همین سادگی بدون هیچ دردسری.
اگه من توضیح کامل بدم میشه آموزش هک سایتی که از این روش استفاده میکنه:D
راستی داوود یه لحظه انلاین شو یه کاره واجب بهت دارم در مورد سیستمی هست که نوشتی
 
آخرین ویرایش:

Allahparast

Member
داش ساسان از extract($_POST); و extract($_GET); به هیچ وجه در کارات استفاده نکن.خب فرقشون اینه که اگر طرف اینو بزنه ?Username=masoud&Password=masoud یوزر نیم و پسورد اصلی سایت میشه masoud به همین سادگی بدون هیچ دردسری.
اگه من توضیح کامل بدم میشه آموزش هک سایتی که از این روش استفاده میکنه:D
راستی داوود یه لحظه انلاین شو یه کاره واجب بهت دارم در مورد سیستمی هست که نوشتی
یعنی چی ! :shock:
 
بر فرض ما یه سیستم داشته باشیم تویه نت هم پخش شده باشه امنیتش هم ضریب 100 باشه.فقط بیاد
PHP:
extract($_GET)
یا
extract($_POST)
استفاده کنه. خب با هم مرور میکنیم قسمت لوگین رو :

PHP:
$Password = mysql_result($sql,1,'Password');
$Username = mysql_result($sql,1,'Username');

extract($_POST);

if($Usernamefild == $Username and $Passwordfild == $Password){
کد هاي مربوط به ورود
}else{
<form action="" method="post">
<input name=Passwordfild">
<input name=Usernamefild">
<input type=submit value=submit>
</form>
}
خب شخص هکر بجای استفاده از فرم میاد از cURL استفاده میکنه به این صورت:
PHP:
cURL("http://site.name","Username=masoud&Password=masoud&Passwordfild=masoud&Usernamefild=masoud");
به همین سادگی به مدیریت سیستم وارد شدیم.
کد نهایی به این صورت میشه:
PHP:
<?
$Password = mysql_result($sql,1,'Password');
$Username = mysql_result($sql,1,'Username');

extract($_POST);
$Password = 'masoud';
$Username = 'masoud';
$Usernamefild = 'masoud';
$Passwordfild = 'masoud';
if($Usernamefild == $Username and $Passwordfild == $Password){
کد هاي مربوط به ورود
}else{
<form action="" method="post">
<input name=Passwordfild">
<input name=Usernamefild">
<input type=submit value=submit>
</form>
}
 
آخرین ویرایش:

parsiteam

Member
بر فرض ما یه سیستم داشته باشیم تویه نت هم پخش شده باشه امنیتش هم ضریب 100 باشه.فقط بیاد
PHP:
extract($_GET)
یا
extract($_POST)
استفاده کنه. خب با هم مرور میکنیم قسمت لوگین رو :

PHP:
$Password = mysql_result($sql,1,'Password');
$Username = mysql_result($sql,1,'Username');

extract($_POST);

if($Usernamefild == $Username and $Passwordfild == $Password){
کد هاي مربوط به ورود
}else{
<form action="" method="post">
<input name=Passwordfild">
<input name=Usernamefild">
<input type=submit value=submit>
</form>
}
خب شخص هکر بجای استفاده از فرم میاد از cURL استفاده میکنه به این صورت:
PHP:
cURL("http://site.name","Username=masoud&Password=masoud&Passwordfild=masoud&Usernamefild=masoud");
به همین سادگی به مدیریت سیستم وارد شدیم.
کد نهایی به این صورت میشه:
PHP:
<?
$Password = mysql_result($sql,1,'Password');
$Username = mysql_result($sql,1,'Username');

extract($_POST);
$Password = 'masoud';
$Username = 'masoud';
$Usernamefild = 'masoud';
$Passwordfild = 'masoud';
if($Usernamefild == $Username and $Passwordfild == $Password){
کد هاي مربوط به ورود
}else{
<form action="" method="post">
<input name=Passwordfild">
<input name=Usernamefild">
<input type=submit value=submit>
</form>
}



الان که میبینم واقعا غصه میخورم . شما همه ی برنامه ها تو اینطوری مینویسی مسعود جان ؟ این چیه ؟

PHP:
if($Usernamefild == $Username and $Passwordfild == $Password){

خودت بشین فکر کن این چه طرز چک کردنه یوزره ؟

اگر اینطوری باشه که بدون extract هم وارد پنل میشیم. اینطوری :

PHP:
cURL("http://site.name","Username['Username']=masoud&Password['Password']=masoud&Passwordfild=masoud&Usernamefild=masoud");


خدا رو شکر که امنیت خوندی :دی

به جای این مثال زدن فقط بشین به مفهوم تابع فکر کن . تابع فقط میاد یک کم کار رو برای آرایه های بزرگ ساده میکنه . مثلا آرایه ای که 100 تا کلید داره میتونی مستقیم نامشون رو ببری که کارت ساده تر باشه . همین .

موفق باشی .
 
من نگفتم این روش برنامه نویسه منه:D
گفتم این راه هک این روش هست که اگه زمانی به این سبک استفاده بشه. وگرنه روشهایی هم ضد این کار هست.
کافیه extract رو در بالای کد استفاده بشه و بعد متغییر ها مقدار داده بشن دیگه راه نفوذی در کار نیست.

 

jigartalaa

Member
سلام . مسعود درست میگه ! من خودم هم تست کردم شما هم برید تست کنید ! Flash Chat v4 از این روش استفاده کرده ! الآن شما حتی میتونید بدون ساختن یوزر وارد مدیریتش بشید و یا اینکه خودتو مدیر معرفی کنی !

سری که درد نمیکنه نباید دستمال بست !
 
بذاز یه توضیح ساده بدم از extract

PHP:
$array = array('user'=>'123456','Pass'=>'789');

echo $array['user'];

دقيقا پست و گت هم همينطور هستن

$_POST = array('user'=>'123456','Pass'=>'789');

echo $_POST['user'];

خب extract مياد هر قسمت رو تويه متغييري با مقدار اول آرايه يا همون Kay ميريزه که دسترسی بهش ساده تر باشه

کاره اکسترت در مورد آرايه همين هست و در يک مورد هم تعداد مقدار هاي ارايه رو ميگه
 

D.A.V.O.O.D

Member
سلام . مسعود درست میگه ! من خودم هم تست کردم شما هم برید تست کنید ! Flash Chat v4 از این روش استفاده کرده ! الآن شما حتی میتونید بدون ساختن یوزر وارد مدیریتش بشید و یا اینکه خودتو مدیر معرفی کنی !

سری که درد نمیکنه نباید دستمال بست !

احسان جان ، هر تابعی واسه خودش باگی داره ، اگه ازش درست استفاده بشه ، باگش گرفته میشه ، این کدی که مسعود واسه لاگین گذاشته ، نمی گم اشتباهه ، نه ! اما خوب اگه بخوایم از این extract استفاده کنیم توی این برنامه ، دچار باگ میشه ...

متوجه متظورم میشید ؟
 

P.H.P

Member
کاملا با mihantools موافقم

این کار اصلا صحیح نیست

از extract بهتر از این ها هم میشه استفاده کرد

شما یه متغیر داری به اسم رضا

حالا اگه رضا عمل GET رو انجام بده ........

پس کاملا اشتباست

PHP:
// URL: file.php?reza=Hijacking

$reza = "test";

extract($_GET);

echo $reza;

موفق
 

جدیدترین ارسال ها

بالا