PDA

View Full Version : گرفتن html یک سایت



H:Shojaei
سه شنبه 25 فروردین 1394, 16:33 عصر
سلام دوستان
به نظر شما میشه اطلاعات این سایت رو که به صورت پویاست و تا سرچ نکنی چیزی نشون داده نیمشه و آدرس هم کد شده هست رو درآورد؟
http://www.ktc24.ir/Systems/Login.aspx?qry=SUDyQdLFmS2fcFrnmtPh1aVEZOWxo7o7Ouo AR8NaSkg=
و این که چطور کاری میکنن وقتی از آدرس سایت استفاده میکنیم و فایلشو میخوایم بگیریم یه لینک نشون میده که به سایت مرجع ارسال میکنه!

-سیّد-
سه شنبه 25 فروردین 1394, 19:47 عصر
خوب اول از همه مسئله اینه که این سایت لاگین می‌خواد و کپچا هم داره. برای همین شما نمی‌تونید با یه برنامه‌ی ساده اطلاعات رو ازش بگیرید. مگر این که کپچاش رو دیکود کنید.
اگه می‌شه یه مقدار دقیق‌تر سؤالتون رو بپرسید. من الان همین لینکی که دادید رو با PHP با تابع file_get_contents گرفتم، همون صفحه‌ی لاگین رو بهم برگردوند.

H:Shojaei
سه شنبه 25 فروردین 1394, 23:19 عصر
بله لاگین رو برمیگردونه...
بعد از لاگین صفحه ای که میاد باید سرچ کنید چیزی که میخواید رو بدست بیارید من میگم نمیشه طوری ازین لاگینه رد شد و به اون اطلاعات سرچه با تمام حالات سرچش دسترسی داشت؟

MohammadReza1994
سه شنبه 25 فروردین 1394, 23:52 عصر
اگه سرچ اون سایت اجکس باشه فکر نکنم اطلاعاتش قابل دسترس باشه. یعنی میشه ولی به سختی. باید صفحه رو همین جوری ذخیره کنی بعد بری تو فایلای جاوا اسکریپتش بگردی ببینی با اجکس چه اطلاعاتی ارسال و دریافت میکنه برای سرچ. کلا اگه اینجوری باشه که من فکر میکنم مکافات میشه.

Mohammadsgh
چهارشنبه 26 فروردین 1394, 02:33 صبح
جستجوش ای جکسی نیست.میشه اینکارو کرد.باhttp://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB4QFjAA&url=http%3A%2F%2Fsimplehtmldom.sourceforge.net%2F&ei=1pgtVbr0IMiQsgH054H4DQ&usg=AFQjCNEj25gYEBl4te-VvReRxFLr8EHXMA&sig2=6VbPf5HA-1NbTyYH-IUpsw&bvm=bv.90790515,d.bGg انجام بدید ببینید میشه؟

-سیّد-
چهارشنبه 26 فروردین 1394, 09:05 صبح
اگه سرچ اون سایت اجکس باشه فکر نکنم اطلاعاتش قابل دسترس باشه. یعنی میشه ولی به سختی. باید صفحه رو همین جوری ذخیره کنی بعد بری تو فایلای جاوا اسکریپتش بگردی ببینی با اجکس چه اطلاعاتی ارسال و دریافت میکنه برای سرچ. کلا اگه اینجوری باشه که من فکر میکنم مکافات میشه.
البته اگه ajax باشه انقدا هم مشکل نیست! اتفاقاً بعضی وقتها استخراج اطلاعات از سایت‌هایی که با ajax کار می‌کنن راحت‌تره، چون توی جوابی که از سرور میاد، به جای یه HTML گنده و شلوغ، با یه xml یا json ساده طرف هستید.


جستجوش ای جکسی نیست.میشه اینکارو کرد.باhttp://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB4QFjAA&url=http%3A%2F%2Fsimplehtmldom.sourceforge.net%2F&ei=1pgtVbr0IMiQsgH054H4DQ&usg=AFQjCNEj25gYEBl4te-VvReRxFLr8EHXMA&sig2=6VbPf5HA-1NbTyYH-IUpsw&bvm=bv.90790515,d.bGg انجام بدید ببینید میشه؟
مشکلشون این نیست که نتونن اطلاعات رو استخراج کنن. مشکل اینه که با یه لاگین مواجه می‌شن که کپچا داره.


بله لاگین رو برمیگردونه...
بعد از لاگین صفحه ای که میاد باید سرچ کنید چیزی که میخواید رو بدست بیارید من میگم نمیشه طوری ازین لاگینه رد شد و به اون اطلاعات سرچه با تمام حالات سرچش دسترسی داشت؟
خوب اینجا ۲ تا مسئله مطرحه.

۱. چطوری از لاگین رد بشیم؟ ۲ تا روش وجود داره:
یکی این که توی کد، کپچا رو دیکود کنید، که این کار، کار هر کسی نیست. مستلزم image processing هست (البته بستگی به کپچاش داره، ممکنه خیلی پیچیده نباشه و بشه دیکودش کرد. همچنین ممکنه با استفاده از کتابخونه‌های موجود بتونید دیکودش کنید) که در صورت انجام این کار، کل پروسه اتوماتیک می‌شه.
دوم این که توی مرورگرتون لاگین کنید، بعد کوکی‌هایی که بهتون می‌ده رو توی کد استفاده کنید. چون پروسه‌ی لاگین کلاً مبتنی بر کوکی هست. یعنی تنها چیزی که به سیستم می‌فهمونه فلانی لاگین کرده، کوکی هست (البته بعضی وقت‌ها با استفاده از پارامترهایی که توی GET می‌فرستن این کارو می‌کنن).

۲. چطوری اطلاعات رو از سایت استخراج کنیم؟ باز هم ۲ تا روش وجود داره:
یکی این که کل اطلاعات رو یه جا به دست بیاریم. یعنی پایگاه داده‌شون رو با جاش بیاریم پیش خودمون! راهش چیه؟! هک کردن!!! :)
دوم این که حالا که به پایگاه داده‌شون دسترسی نداریم، مجبوریم دونه دونه جستجو کنیم. البته این رو هم می‌شه به صورت خودکار توی کد انجام داد. یعنی می‌تونید با بررسی سایت، تمام حالت‌هایی که جستجو انجام می‌شه رو استخراج کنید و کد رو اتوماتیک کنید. یعنی کدتون اون فرم مربوطه رو با تمام حالت‌های drop-down box ها ارسال کنه. البته مراقب باشید که این کار رو خیلی تند و تند انجام ندید. چون ممکنه سایت بترکه! یا از اون طرف ممکنه شما رو به عنوان روبات بلاک کنه.

در نهایت هم بگم مراقب باشید کاری نکنید که بر خلاف قانون باشه. ممکنه اون سایت در صورتی که بفهمه شما دارید اطلاعاتش رو استخراج می‌کنید، پیگرد قانونی کنه.

H:Shojaei
چهارشنبه 26 فروردین 1394, 10:41 صبح
خوب اینجا ۲ تا مسئله مطرحه.

۱. چطوری از لاگین رد بشیم؟

مهم همینه که میگید image processing میخواد واسه رد شدن از کپچا که کار من هم نیست راه دیگه نداره ؟!



2. چطوری اطلاعات رو از سایت استخراج کنیم؟

استخراجش مشکلی نیست یه طوری بالاخره میشه انجان داد...


در نهایت هم بگم مراقب باشید کاری نکنید که بر خلاف قانون باشه. ممکنه اون سایت در صورتی که بفهمه شما دارید اطلاعاتش رو استخراج می‌کنید، پیگرد قانونی کنه.
نه در اون حد نمیخوام پیش برم سوالی ازم شده بود به همون دلیل واسه خودم هم سوال شد که اول چطور این کار که وقتی پیجی ازش رو میگیریم چطور اون صفحه رو نشون نمیده و صفحه دیگه ای نشون میده و دوم این که چطور میشه کاری کرد که یا از کپچا رد شد یا یه طوری لاگین کرد که به صفحه بعدی دسترسی داشت...

-سیّد-
چهارشنبه 26 فروردین 1394, 12:39 عصر
مهم همینه که میگید image processing میخواد واسه رد شدن از کپچا که کار من هم نیست راه دیگه نداره ؟!

گفتم که، یه راه دیگه اینه که با مرورگر لاگین کنید، بعد کوکی‌ها رو منتقل کنید به کد.
در ضمن احتمالاً اگر بگردید، کتابخونه‌هایی برای دیکود کردن captcha پیدا خواهید کرد.



نه در اون حد نمیخوام پیش برم سوالی ازم شده بود به همون دلیل واسه خودم هم سوال شد که اول چطور این کار که وقتی پیجی ازش رو میگیریم چطور اون صفحه رو نشون نمیده و صفحه دیگه ای نشون میده و دوم این که چطور میشه کاری کرد که یا از کپچا رد شد یا یه طوری لاگین کرد که به صفحه بعدی دسترسی داشت...
خوب مشکل حل شد؟ اگه لازمه بگید بیشتر توضیح بدم.

H:Shojaei
چهارشنبه 26 فروردین 1394, 14:00 عصر
لاگین با مرورگر که نمیشه چون من میخوام بدون دخالت دست این کارو انجام بدم واسه همین هم تو توضیحات قبلیم نادیدش گرفتم...
حالا فرضا من کپچا رو شکستم باز چطور مقادیر رو ارسال کنم از طریق برنامه نویسی بدون دخالت کاربر؟! که کوکی واسم تو این سیستم رزرو بشه و بتونم باقیه کارا رو انجام بدم و سیستم صفحه لاگین رو بهم نشون نده؟!
و این که چطور همچین کاری میکنن که مثلا میاد به جای محتوای اصلی یه صفحه دیگه نشون داده میشه هنوز هم واسم نامفهومه! البته حدس میزنم که با لاگین یک کوکی ست میشه که وقتی ما صفحه ای رو میخوایم با کد بگیریم هیچ کوکی ست نشده پس باید صفحه لاگین رو نشون بده یا هر صفحه دیگه که خودش دوست داشته باشه درسته این حدس؟!

-سیّد-
چهارشنبه 26 فروردین 1394, 14:28 عصر
حالا فرضا من کپچا رو شکستم باز چطور مقادیر رو ارسال کنم از طریق برنامه نویسی بدون دخالت کاربر؟! که کوکی واسم تو این سیستم رزرو بشه و بتونم باقیه کارا رو انجام بدم و سیستم صفحه لاگین رو بهم نشون نده؟!

از طریق کتابخونه‌ی curl می‌تونید با کوکی‌ها کار کنید:
http://php.net/manual/en/function.curl-setopt.php
بخش‌های CURLOPT_COOKIE و CURLOPT_COOKIEFILE و CURLOPT_COOKIEJAR:




CURLOPT_COOKIE
The contents of the "Cookie: " header to be used in the HTTP request. Note that multiple cookies are separated with a semicolon followed by a space (e.g., "fruit=apple; colour=red")




CURLOPT_COOKIEFILE
The name of the file containing the cookie data. The cookie file can be in Netscape format, or just plain HTTP-style headers dumped into a file. If the name is an empty string, no cookies are loaded, but cookie handling is still enabled.




CURLOPT_COOKIEJAR

The name of a file to save all internal cookies to when the handle is closed, e.g. after a call to curl_close.



با استفاده از این روش، می‌تونید توی هر درخواست مقادیر کوکی رو توی یه فایل ذخیره کنید تا توی درخواست‌های بعدی از اون فایل خونده بشن.
یا این که کوکی مورد نظر رو که از سرور گرفتید، خودتون پردازشش کنید و با CURLOPT_COOKIE به صورت دستی بفرستید.



و این که چطور همچین کاری میکنن که مثلا میاد به جای محتوای اصلی یه صفحه دیگه نشون داده میشه هنوز هم واسم نامفهومه! البته حدس میزنم که با لاگین یک کوکی ست میشه که وقتی ما صفحه ای رو میخوایم با کد بگیریم هیچ کوکی ست نشده پس باید صفحه لاگین رو نشون بده یا هر صفحه دیگه که خودش دوست داشته باشه درسته این حدس؟!

بله درسته.
وقتی شما یه درخواست برای سرور می‌فرستید، اول چک می‌کنه که کوکی مورد نظرش توش هست یا نه (مثلاً کوکی id). اگه نباشه، به شما صفحه‌ی لاگین رو نشون می‌ده. وقتی که لاگین می‌کنید، براتون کوکی مورد نظر رو می‌فرسته. مرورگر وقتی یه کوکی از سرور دریافت می‌کنه، اون رو ذخیره می‌کنه و توی تمام درخواست‌های بعدیش به اون سرور، اون کوکی رو هم براش می‌فرسته. برای همین دیگه صفحه‌ی لاگین بهتون نشون نمی‌ده.
پروتوکل HTTP یه پروتوکل state-less هست. یعنی بین شما و سرور هیچ چیزی ذخیره نمی‌شه. یعنی این که هر بار که به سرور یه درخواست می‌دید، همه چیز از اول شروع می‌شه. خوب حالا اگه بخواین به سرور بگین که من همون قبلیه هستم که کپچا رو وارد کردم، باید یه جوری توی درخواستی که براش می‌فرستید این رو بهش بفهمونید، که معمولاً روشش استفاده از کوکی هست.
پس اینطوری می‌شه:
درخواست ۱ (بدون کوکی) => سرور می‌بینه خبری از کوکی نیست، صفحه‌ی لاگین رو نشون می‌ده.
شما فرم لاگین رو پر می‌کنید و می‌فرستید ==> درخواست ۲ (هنوز بدون کوکی مورد نظر، ولی شامل کپچا) => سرور می‌بینه که کپچا رو درست وارد کردید، شما رو redirect می‌کنه به صفحه‌ی بعد، یه کوکی هم براتون می‌فرسته. مرورگر این کوکی رو ذخیره می‌کنه.
redirect که می‌شید به صفحه‌ی بعد، این می‌شه درخواست ۳ (شامل کوکی مورد نظر) => سرور می‌بینه درخواست شما شامل کوکی هست، کوکی‌اش هم valid هست، برای همین صفحه رو به شما نشون می‌ده.
شما توی صفحه‌ی بعد یه جستجو می‌کنید ==> درخواست ۴ (شامل کوکی مورد نظر) => سرور باز می‌بینه که درخواست شما یه کوکی valid داره، پس جستجو رو براتون انجام می‌ده.
...
وقتی logout می‌کنید، می‌شه درخواست n (شامل کوکی) => سرور اول می‌بینه که درخواستتون کوکی داره، پس می‌گه اوکی. بعد می‌بینه گفتید logout. در نتیجه شما رو redirect می‌کنه به صفحه‌ی اول و براتون یه جواب می‌فرسته که توش گفته کوکی رو پاک کن. مرورگر کوکی رو پاک می‌کنه.
همه چیز برگشت به حالت اول.

خوب شما باید اون درخواست‌های ۴ به بعد (جستجو) رو با اسکریپت شبیه‌سازی کنید. یعنی مهم اینه که توی درخواست‌هاتون، اون کوکی رو بفرستید (به هر روشی که به دست اومده باشه).

H:Shojaei
چهارشنبه 26 فروردین 1394, 23:05 عصر
ممنون توضیحات خوبی بود...
الآن فهمیدم که البته فکر کنم سایت از سشن استفاده میکنه سشن رو که سمت سرور هست کاریش نمیشه کرد چی!
یه سوال کلی چطور فرم رو بدون دخالت کاربر ارسال کنیم؟! فکر کنم قبلا شنیدم که با curl میشه همچین کاری واسه این فرم همین کار رو میشه کرد؟!

bagherok
پنج شنبه 27 فروردین 1394, 00:25 صبح
ممنون توضیحات خوبی بود...
الآن فهمیدم که البته فکر کنم سایت از سشن استفاده میکنه سشن رو که سمت سرور هست کاریش نمیشه کرد چی!
یه سوال کلی چطور فرم رو بدون دخالت کاربر ارسال کنیم؟! فکر کنم قبلا شنیدم که با curl میشه همچین کاری واسه این فرم همین کار رو میشه کرد؟!
ASP.NET_SessionId کوکی هست سمت کلاینت برای شناسای سشن سمت سرور
درواقع هرکسی میتونه با داشتن این کوکی بدون اینکه لاگین کرده باشه هویتش احراز شده باشه(البته نه همیشه.)و وارد سایت بشه.

j_naroogha@yahoo.com
پنج شنبه 27 فروردین 1394, 08:07 صبح
ممنون توضیحات خوبی بود...
الآن فهمیدم که البته فکر کنم سایت از سشن استفاده میکنه سشن رو که سمت سرور هست کاریش نمیشه کرد چی!
یه سوال کلی چطور فرم رو بدون دخالت کاربر ارسال کنیم؟! فکر کنم قبلا شنیدم که با curl میشه همچین کاری واسه این فرم همین کار رو میشه کرد؟!

چند تا کتابخونه خوب هم هست براش. مثل requests, unirest ,...

-سیّد-
پنج شنبه 27 فروردین 1394, 11:41 صبح
ممنون توضیحات خوبی بود...
الآن فهمیدم که البته فکر کنم سایت از سشن استفاده میکنه سشن رو که سمت سرور هست کاریش نمیشه کرد چی!

همونطور که دوستان گفتن، هر session که سمت سرور ساخته می‌شه، باید یه راهی برای شناسوندنش به کاربر وجود داشته باشه (رجوع کنید به توضیحم درباره‌ی stateless بودن HTTP). یعنی شما چطوری توی درخواست بعدی می‌خواین به سرور بفهمونین که من همونی هستم که لاگین کردم و برام یه session ساختی؟ باید یه ID بهش بدید. این ID معمولاً از طریق کوکی رد و بدل می‌شه.
بنابراین مسئله فرقی نکرد. باز هم با کوکی درگیر هستید (یعنی شما نمی‌تونید به اطلاعات session دسترسی پیدا کنید چون سمت سرور ذخیره شدن. ولی می‌تونید کوکی رو برای سرور ارسال کنید که بهش بگید برای درخواست من از فلان session استفاده کن).
کوکی متناظر با session id هم بستگی به سایت و زبان برنامه‌نویسی و فریم‌ورک‌های استفاده شده توی سایت داره. همونطور که دوستمون گفتن، مثلاً ممکنه برای ASP:

ASP.NET_SessionId کوکی هست سمت کلاینت برای شناسای سشن سمت سرور
یا مثلاً برای PHP ممکنه کوکی PHPSESSID باشه (این «ممکنه» که می‌گم برای اینه که می‌شه اینا رو عوض کرد):
https://en.wikipedia.org/wiki/Session_ID

همینجا می‌تونید متوجه بشید که مسائلی مثل session hijacking از کجا ناشی می‌شن! اگه امنیت سرور ضعیف باشه، شما کافیه یه برنامه بنویسید و در یک حلقه از یک تا ۱۰۰ میلیون(!) خودتون رو به عنوان کاربر با session شماره‌ی متناظر معرفی کنید، و در نتیجه به عنوان تمام کاربرانی که در حال حاضر توی اون سایت لاگین کردن می‌تونین کار کنین! (گفتم اگه سرور امنیتش ضعیف باشه ها! وگرنه راههای جلوگیری داره)



یه سوال کلی چطور فرم رو بدون دخالت کاربر ارسال کنیم؟! فکر کنم قبلا شنیدم که با curl میشه همچین کاری واسه این فرم همین کار رو میشه کرد؟!
من با اون کتابخونه‌هایی که دوستمون گفتن کار نکردم:

چند تا کتابخونه خوب هم هست براش. مثل requests, unirest ,...
ولی به طور کلی، فرم و غیر فرم فرق خاصی ندارن. ببینید شما کافیه مبانی وب رو در نظر داشته باشید، همه‌ی اینا حل می‌شه.
مبنای کار یه وب‌سایت چیه؟ پروتوکل HTTP - درخواست و پاسخ (request - response) - زبان HTML - ...
خوب پس وقتی که یه نفر یه فرم رو submit می‌کنه، فرق خیلی زیادی نداره با این که یه لینک رو کلیک می‌کنه، یا این که یه Tab جدید باز می‌کنه و آدرس یه سایت رو تایپ می‌کنه و enter می‌زنه. همه‌ی اینا تهش می‌رسه به همون HTTP و متد GET و POST.
فرض کنید یه فرم این شکلی توی سایت test.ir داریم:


<form action="test.php" method="GET">
x: <input name="x" /><br />
y: <input name="y" />
<input type="submit" name="z" value="Send" />
</form>

کاربر توی فیلد x می‌نویسه a و توی فیلد y می‌نویسه b و دکمه‌ی Send رو فشار می‌ده. چه اتفاقی می‌افته؟ مرورگر یه درخواست می‌ده به این آدرس:
http://test.ir/test.php?x=a&y=b&z=Send
حالا این اتفاق، تقریباً هییییییییییچ فرقی نداره با این که شما این آدرس رو برداری کپی-پیست کنی توی یه Tab جدید بنویسی. یا این که یه لینک درست کنی به این صورت:

<a href="http://test.ir/test.php?x=a&y=b&z=Send">Click!</a>
و روش کلیک کنی. همه‌ی اینها منجر می‌شن به فرستاده شدن یه درخواست به آدرس متناظر (اون «تقریباً» که گفتم برای این که هیچ فرقی نمی‌کنه، برای اینه که یه ذره فرق می‌کنه ولی معمولاً مهم نیست. مثلاً در حالتی که فرم submit می‌شه یا لینک کلیک می‌شه، مرورگر یه header می‌فرسته به نام Referer که مشخص می‌کنه آدرس صفحه‌ای که ازش این درخواست داره فرستاده می‌کنه چی بوده).

در حالت فرم لاگین، معمولاً method فرم POST هست و نه GET. برای همین باید شما بری ببینی اولاً اون فرم متدش GET هست یا POST (اگه چیزی توی تگش ننوشته، پیش‌فرض GET هست)، ثانیاً چه فیلدهایی داره، و همون رو شبیه‌سازی کنی.
برای استفاده از POST توی curl:
http://www.yooz.ir/?q=curl+php+post

Vahid2016
جمعه 28 فروردین 1394, 11:02 صبح
شما فرم لاگین رو پر می‌کنید و می‌فرستید ==> درخواست ۲ (هنوز بدون کوکی مورد نظر، ولی شامل کپچا) => سرور می‌بینه که کپچا رو درست وارد کردید، شما رو redirect می‌کنه به صفحه‌ی بعد، یه کوکی هم براتون می‌فرسته. مرورگر این کوکی رو ذخیره می‌کنه.

با سلام ، فرض کنیم وبسایت پس از تشخیص هویت و صحت کپچا ، یک کد رندمی رو ایجاد بکنه و اون رو در کوکی که ایجاد میکنه هم به نوعی وارد بکنه و درموقع ریدایرکت این کد رندوم به صورت کوئری همراه با آدرسی که میخواد به اون ریدایرکت بکنه ارسال بکنه و در صفحه مقصد اعتبار اون کوئری رو چک بکنه ، در این صورت ما باید بدونیم که به چه آدرسی باید بریم ، اون وقت تکلیف چی هست ؟ فرض کنید این ریدایرکتی هم که انجام میشه نه با ارسال هدر از سرور بلکه با ارسال یک کد جاوااسکریپت مبهم شده صورت بگیره.
با تشکر

-سیّد-
شنبه 29 فروردین 1394, 15:00 عصر
با سلام ، فرض کنیم وبسایت پس از تشخیص هویت و صحت کپچا ، یک کد رندمی رو ایجاد بکنه و اون رو در کوکی که ایجاد میکنه هم به نوعی وارد بکنه و درموقع ریدایرکت این کد رندوم به صورت کوئری همراه با آدرسی که میخواد به اون ریدایرکت بکنه ارسال بکنه و در صفحه مقصد اعتبار اون کوئری رو چک بکنه ، در این صورت ما باید بدونیم که به چه آدرسی باید بریم ، اون وقت تکلیف چی هست ؟ فرض کنید این ریدایرکتی هم که انجام میشه نه با ارسال هدر از سرور بلکه با ارسال یک کد جاوااسکریپت مبهم شده صورت بگیره.
با تشکر
سلام
این معمول نیست که کدی که توی کوکی فرستاده می‌شه، توی آدرس صفحه هم فرستاده بشه. چون وقتی سایت داره اون کد رو توی کوکی به مرورگر می‌ده، مرورگر خود به خود اون کد رو به صفحه‌ی بعدی (که بهش redirect شده) می‌فرسته. پس نیازی نیست که اون کد توی آدرس صفحه باشه.
اما چون گفتید «فرض کنیم اینطوری باشه»، فرض می‌کنیم!
یعنی این (ببینید منظورتون رو درست فهمیدم؟):
(۱) شما داخل صفحه‌ی لاگین می‌رین:
http://test.com/login.php
(۲) فرم رو پر می‌کنید و می‌فرستید به:
http://test.com/check.php
(البته خیلی وقتها این صفحه، همون صفحه‌ی لاگین هست)
سرور چک می‌کنه که اوکی هست، یه کوکی به شما می‌ده شامل id=100 و چنین جوابی به شما می‌ده (بدون redirect، با کد ۲۰۰):

<script>window.location = 'home.php?id=100';</script>
که البته به فرموده‌ی شما مبهم‌سازی شده و به این تابلویی نیست!
(۳) در نتیجه مرورگر خود به خود درخواست بعدی رو می‌فرسته:
http://test.com/check2.php?id=100
و اینجا سرور چک می‌کنه که id داده شده درست هست یا نه. اگه نباشه جواب درست نمی‌ده (چه جوابی می‌ده؟)، اگه باشه، جواب می‌ده. حالا ممکنه جواب رو همینجا بده، یا دوباره redirect کنه به یه صفحه‌ی دیگه. اگه redirect کنه به یه صفحه‌ی دیگه، خوب چه فرقی کرد؟! از اول redirect می‌کرد به اون صفحه‌ی دیگه. <== حالا این رو بعداً اگه بخواین بیشتر و دقیق‌تر درباره‌اش صحبت می‌کنیم (در واقع نکته اینجاس که احساس می‌کنم این کار چیز خاصی به امنیت اون سایت اضافه نمی‌کنه، فقط ممکنه یه کم کار برنامه‌نویس رو سخت کنه، یا جلوی بات‌ها رو بگیره. اون تیکه که بولد کردم «چه جوابی می‌ده؟» هم اینجا مهمه، یعنی سرور در صورتی که آدرس درست باشه یا نباشه، دقیقاً می‌خواد چی کار کنه؟).

خوب حالا مشکل شما کجاس؟ درخواست (۱) که هیچی. (۲) هم که هیچی. می‌مونه (۳)، یعنی شما دنبال check2.php?id=100 هستید. خوب اگه برای یه سایت خاص می‌خواین این کارو بکنین، کافیه با یه ابزاری مثل firebug ببینید درخواست سوم بعد از لاگین، به چه آدرسی فرستاده می‌شه و شما هم درخواست رو به همون آدرس بفرستید. id رو هم که توی کوکی دارید.

Vahid2016
شنبه 29 فروردین 1394, 16:43 عصر
سلام ،
ببنید من منظورم رو از کد رندم خودب نرسوندم منظورم از این کد افزودن یک کوئری مثل id=100? نبود این بیش تر شبیه userid کاربر هست ،
منظور من کدی بود که مثلا می تونه از انکریپت زمان تکمیل فرم و مشخصات دیگه حاصل بشه ، که از جعل کوکی که شما در بالا بهش اشاره کردین:

دوم این که توی مرورگرتون لاگین کنید، بعد کوکی‌هایی که بهتون می‌ده رو توی کد استفاده کنید.
درواقع نذاریم این کوکی رو دیگه همیشه و روی هر سیستمی ازش استفاده کرد و یه نفر نتونه با داشتن کوکی و اینکه حالا id من 100 هست بتونه وارد CP بشه ، بنابراین آدرسی که فرم صفحه لاگین بهمون میده یه چیزی شبیه این میشه
http://test.com/cp.php?id=100&s=f899139df5e1059 خوب این باعث میشه ما نتونیم کوکی یا کوئریمون رو مستقیم ارسال بکنیم به cp.php و یک redirect ای هم باید این وسط رخ بده ، این آدرس صفحه هم برای هر کاربر و در زمان و شرایط گوناگون فرق میکنه ، چون این یک رشته ثابت نیست و بنابراین فک نمی کنم اینجا firebug به دردمون بخوره، اگه اشتباه میکنم تصحیح بکنید حالا اینجا مجبوریم کد جاوا اسکریپت رو تفسیر بکنیم.. یعنی یا باید از مرورگر استفاده کنیم یا اینکه باید خودمون بتونیم یکی بنویسیم!

Vahid2016
شنبه 29 فروردین 1394, 17:13 عصر
حالا این چیزا تازه بعد از این هست که بتونیم کپچا رو بخونیم!

-سیّد-
شنبه 29 فروردین 1394, 17:55 عصر
سلام ،
ببنید من منظورم رو از کد رندم خودب نرسوندم منظورم از این کد افزودن یک کوئری مثل id=100? نبود این بیش تر شبیه userid کاربر هست ،
منظور من کدی بود که مثلا می تونه از انکریپت زمان تکمیل فرم و مشخصات دیگه حاصل بشه ، که از جعل کوکی که شما در بالا بهش اشاره کردین:

درواقع نذاریم این کوکی رو دیگه همیشه و روی هر سیستمی ازش استفاده کرد و یه نفر نتونه با داشتن کوکی و اینکه حالا id من 100 هست بتونه وارد CP بشه ، بنابراین آدرسی که فرم صفحه لاگین بهمون میده یه چیزی شبیه این میشه
http://test.com/cp.php?id=100&s=f899139df5e1059 خوب این باعث میشه ما نتونیم کوکی یا کوئریمون رو مستقیم ارسال بکنیم به cp.php و یک redirect ای هم باید این وسط رخ بده ، این آدرس صفحه هم برای هر کاربر و در زمان و شرایط گوناگون فرق میکنه ، چون این یک رشته ثابت نیست و می تونه از طریق post باشه یا یک session باشه یا حتی با همون کد نویسی یه درخواست get یا post به اون صفحه (یعنی از login.php به cp.php) صورت بگیره ، بنابراین فک نمی کنم اینجا firebug به دردمون بخوره، اگه اشتباه میکنم تصحیح بکنید حالا اینجا مجبوریم کد جاوا اسکریپت رو تفسیر بکنیم.. یعنی یا باید از مرورگر استفاده کنیم یا اینکه باید خودمون بتونیم یکی بنویسیم!
در این صورتی که گفتید، بله، به این راحتی که من گفتم نمی‌شه سیستم رو با کد رد کرد.

۳ تا روش اینجا به نظرم می‌رسه:
۱. (سخت‌ترین روش!) ممکنه بتونید با بررسی چند مورد از این کدهای encrypt شده، روش encryption رو استخراج کنید. مثلاً ممکنه طرف ID رو MD5 کنه، بعد sha128 بزنه، بعد timestamp بندازه پشتش، بده به شما. البته ممکن هم هست به این راحتی نباشه و نشه با یه نگاه فهمید! اینجا یه نفر که متخصص مباحث رمزنگاری باشه ممکنه بتونه یه حرکتایی بزنه.
۲. همونطور که گفتید، کد جاوا اسکریپت رو تفسیر کنید. در واقع اول باید de-obfuscate اش کنید، بعد تفسیرش کنید. میزان سختیش بستگی به این داره که چقدر پیچونده باشنش!
۳. می‌تونید توسط کد (PHP یا زبان‌های دیگه)، کد جاوا اسکریپت رو اجرا کنید. اگه این کار رو بکنید، می‌تونید تابع متناظر رو توی کدتون فراخوانی کنید و خروجی مورد نظر رو ازش بگیرید. البته اینجا هم ممکنه کد جاوا اسکریپت یه کارایی کرده باشه که به راحتی نشه این کارو کرد!
و البته یه راه دیگه هم هست: یه مرورگر رو شبیه‌سازی کنید و لینک مورد نظر رو از توش استخراج کنید. برای این کار، هم می‌شه از نرم‌افزارهای مخصوص استفاده کرد، هم از کتابخانه‌های مخصوص این کار.


حالا این چیزا تازه بعد از این هست که بتونیم کپچا رو بخونیم!
‫بالاخره نوشتن همچین چیزایی دردسر داره! :چشمک:

Vahid2016
شنبه 29 فروردین 1394, 19:15 عصر
در این صورتی که گفتید، بله، به این راحتی که من گفتم نمی‌شه سیستم رو با کد رد کرد.

۳ تا روش اینجا به نظرم می‌رسه:
۱. (سخت‌ترین روش!) ممکنه بتونید با بررسی چند مورد از این کدهای encrypt شده، روش encryption رو استخراج کنید. مثلاً ممکنه طرف ID رو MD5 کنه، بعد sha128 بزنه، بعد timestamp بندازه پشتش، بده به شما. البته ممکن هم هست به این راحتی نباشه و نشه با یه نگاه فهمید! اینجا یه نفر که متخصص مباحث رمزنگاری باشه ممکنه بتونه یه حرکتایی بزنه.
۲. همونطور که گفتید، کد جاوا اسکریپت رو تفسیر کنید. در واقع اول باید de-obfuscate اش کنید، بعد تفسیرش کنید. میزان سختیش بستگی به این داره که چقدر پیچونده باشنش!
۳. می‌تونید توسط کد (PHP یا زبان‌های دیگه)، کد جاوا اسکریپت رو اجرا کنید. اگه این کار رو بکنید، می‌تونید تابع متناظر رو توی کدتون فراخوانی کنید و خروجی مورد نظر رو ازش بگیرید. البته اینجا هم ممکنه کد جاوا اسکریپت یه کارایی کرده باشه که به راحتی نشه این کارو کرد!
و البته یه راه دیگه هم هست: یه مرورگر رو شبیه‌سازی کنید و لینک مورد نظر رو از توش استخراج کنید. برای این کار، هم می‌شه از نرم‌افزارهای مخصوص استفاده کرد، هم از کتابخانه‌های مخصوص این کار.


‫بالاخره نوشتن همچین چیزایی دردسر داره! :چشمک:


۳. می‌تونید توسط کد (PHP یا زبان‌های دیگه)، کد جاوا اسکریپت رو اجرا کنید. اگه این کار رو بکنید، می‌تونید تابع متناظر رو توی کدتون فراخوانی کنید و خروجی مورد نظر رو ازش بگیرید.

این گزینه آخرو متوجه نشدم ،یعنی چیکار بکنیم؟ منظور از خروجی چیه؟
باتشکر

-سیّد-
شنبه 29 فروردین 1394, 20:31 عصر
این گزینه آخرو متوجه نشدم ،یعنی چیکار بکنیم؟ منظور از خروجی چیه؟
باتشکر
می‌تونید از JavaScript Engine ها برای اجرای کد مورد نظر استفاده کنید.
من تا به حال در این مورد این کار رو نکردم. حالتی که من قبلاً آزمایش کردم، این بوده که یه کد جاوا اسکریپت رو اجرا کردم (از داخل کد زبان دیگه (در این مورد جاوا)) و بعد ازش مقدار یه متغیر رو بعد از اجرای کد جاوا اسکریپت پرسیدم.
اما اینجا باید ازش Url ای که داره بهش می‌ره رو بپرسید. شاید اگه ازش مقدار متغیر window.location رو بپرسید به نتیجه‌ی دلخواه برسید.