• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کلمات مورد استفاده در sql injection
#1
سلام
بچه آیا ممکنه در یک sql injection که منجر به واکشی اطلاعات میشه، از کلمات union و یا select (حداقل یکی از این دو کلمه) استفاده نشه؟
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط :
#2
فکر کنم باید حتما توش select باشه . واس چی می خوای؟
  پاسخ
تشکر شده توسط : hamid_80386
#3
واسه یه راه کار سریع برای یک سایت برای جلوگیری از injection تا بعداً ورودی هاش درست بشه Wink
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط :
#4
سلام.
99% هکرها رو با بستن select میتونی جلوشونو بگیری، ولی اگه واسه مدت زمان زیاد میخوای ، بهتره بشینی درست حسابی فیلتر کنی.
  پاسخ
تشکر شده توسط : hamid_80386
#5
سلام خدمت جناب عباسی عزیز Angel سخته جلو اساتید اظهار نظر کردن Big Grin

فکر کنم بدون select هم بشه یه حرکاتی زد:
کد:
SELECT * FROM `Users` WHERE username = 'admin'--' AND password = 'password'
یا اینطوری bypass کرد:
کد:
SELECT * FROM `Users` WHERE username = 'admin' # ' AND password = 'password'
وقتی میخواد یوزر و پس رو چک کنه ما بیاییم بخش پسورد رو کامنتش کنیم و بخش لوگین رو دور بزنیم.Huh
میثم محمودی | انجمن کد ایگنایتر فارسی
--------------------------
هرگز نمي توان با آدمهاي کوچک کارهاي بزرگ انجام داد
  پاسخ
تشکر شده توسط : hamid_80386
#6
(۱۳۹۳ فروردین ۱۶, ۱۱:۵۹ ب.ظ)Maysam.m نوشته: سلام خدمت جناب عباسی عزیز Angel سخته جلو اساتید اظهار نظر کردن Big Grin

فکر کنم بدون select هم بشه یه حرکاتی زد:
کد:
SELECT * FROM `Users` WHERE username = 'admin'--' AND password = 'password'
یا اینطوری bypass کرد:
کد:
SELECT * FROM `Users` WHERE username = 'admin' # ' AND password = 'password'
وقتی میخواد یوزر و پس رو چک کنه ما بیاییم بخش پسورد رو کامنتش کنیم و بخش لوگین رو دور بزنیم.Huh
میثم جان این که کوئری رو مثلاً با # خراب کنیم، خب درست، شدنی هست...
اما تو این مثالی که شما زدی پسورد از DB واکشی نمیشه، ما معمولاً پسورد ورودی کاربر (یا هش اون رو) با پسورد داخل دیتابس مقایسه نمیکنیم، با پسوردی که از دیتابیس واکشی کردیم مقایسه میکنیم، اینطوری امن تر هست

یعنی روش شما میگه میگه اگه کوئری رکوردی رو برگردوند، لاگین انجام شه
اما روش صحیح میگه اول یه مقدار از دیتابیس بکش بیرون و بعد اون مقدار رو با مقداری که از کاربر داری مقایسه کن، اگر برابر بود لاگین کن...
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط : Maysam.m nimaee
#7
مثلا از drop اگه استفاده بشه چی ؟ ( میدونم گفتی واکشی اطلاعات، خواستم یادآوری کنم صرفا )
غایب
  پاسخ
تشکر شده توسط :
#8
(۱۳۹۳ فروردین ۱۷, ۰۱:۳۵ ق.ظ)hamid_80386 نوشته:
(۱۳۹۳ فروردین ۱۶, ۱۱:۵۹ ب.ظ)Maysam.m نوشته: سلام خدمت جناب عباسی عزیز Angel سخته جلو اساتید اظهار نظر کردن Big Grin

فکر کنم بدون select هم بشه یه حرکاتی زد:
کد:
SELECT * FROM `Users` WHERE username = 'admin'--' AND password = 'password'
یا اینطوری bypass کرد:
کد:
SELECT * FROM `Users` WHERE username = 'admin' # ' AND password = 'password'
وقتی میخواد یوزر و پس رو چک کنه ما بیاییم بخش پسورد رو کامنتش کنیم و بخش لوگین رو دور بزنیم.Huh
میثم جان این که کوئری رو مثلاً با # خراب کنیم، خب درست، شدنی هست...
اما تو این مثالی که شما زدی پسورد از DB واکشی نمیشه، ما معمولاً پسورد ورودی کاربر (یا هش اون رو) با پسورد داخل دیتابس مقایسه نمیکنیم، با پسوردی که از دیتابیس واکشی کردیم مقایسه میکنیم، اینطوری امن تر هست

یعنی روش شما میگه میگه اگه کوئری رکوردی رو برگردوند، لاگین انجام شه
اما روش صحیح میگه اول یه مقدار از دیتابیس بکش بیرون و بعد اون مقدار رو با مقداری که از کاربر داری مقایسه کن، اگر برابر بود لاگین کن...

درست می فرمایید و ممکنه این ترفند در اینجا کاربردی نداشته باشه اما ممکنه در قسمت های دیگه کاربرد داشته باشه. Rolleyes
معمولا اول کوئری میزنند اگه نتیجه کوئری درست بود و بزرگتر از یک بود یعنی نام کاربری و رمز عبور درسته و من بر اساس این منطق گفتم.
کد پی‌اچ‌پی:
$handle = new mysqli('localhost''root''''test');
$sql "SELECT * FROM `Users` WHERE username = 'admin'--' AND password = 'password'";
$result $handle->query($sql);

if(
$result->num_rows 0): // login successfully
    
$rows $result->fetch_assoc();
    
$_SESSION['username']= $rows['username'];
    
$_SESSION['user_id']= $rows['user_id'];
endif; 


یا حتی مثلا بشه یه رکورد جدید به جدول وارد کرد:
کد:
SELECT * FROM `Users` WHERE username = 'admin';insert into `user` values('newuser','newpass');#' AND password = 'password'";
و همچنین رکورد رو آپدیت یا حذف کرد
میثم محمودی | انجمن کد ایگنایتر فارسی
--------------------------
هرگز نمي توان با آدمهاي کوچک کارهاي بزرگ انجام داد
  پاسخ
تشکر شده توسط :
#9
در ضمن شاید بشه کلمه های select و union رو هم دور زد:
کد:
SEL/**/ECT
UNI/**/ON
میثم محمودی | انجمن کد ایگنایتر فارسی
--------------------------
هرگز نمي توان با آدمهاي کوچک کارهاي بزرگ انجام داد
  پاسخ
تشکر شده توسط :
#10
(۱۳۹۳ فروردین ۱۷, ۰۳:۴۶ ب.ظ)Maysam.m نوشته: در ضمن شاید بشه کلمه های select و union رو هم دور زد:
کد:
SEL/**/ECT
UNI/**/ON

متوجه منظورتون نمیشم، یعنی رو تو sql command بزنن؟
یعنی همچین چیزی:
کد:
SEL/**/ECT  ID FROM admin

این که نشدنی هست HuhHuh

(۱۳۹۳ فروردین ۱۷, ۰۱:۵۴ ق.ظ)Alaa نوشته: مثلا از drop اگه استفاده بشه چی ؟ ( میدونم گفتی واکشی اطلاعات، خواستم یادآوری کنم صرفا )
میشه اون اکانت اس.کیو.ال رو که برای مشاهده کاربر استفاده میشه محدود به عملیات خاصی مثل select , update و اینها کرد و یا اینکه خود drop رو هم فیلتر کرد...
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط : Alaa Maysam.m


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان