Add
This commit is contained in:
parent
9661689e48
commit
4797422b10
13
.env.example
13
.env.example
|
|
@ -20,14 +20,15 @@ LOG_STACK=single
|
||||||
LOG_DEPRECATIONS_CHANNEL=null
|
LOG_DEPRECATIONS_CHANNEL=null
|
||||||
LOG_LEVEL=debug
|
LOG_LEVEL=debug
|
||||||
|
|
||||||
DB_CONNECTION=sqlite
|
DB_CONNECTION=mysql
|
||||||
# DB_HOST=127.0.0.1
|
DB_HOST=mariadb
|
||||||
# DB_PORT=3306
|
DB_PORT=3306
|
||||||
# DB_DATABASE=laravel
|
DB_DATABASE=sec_lab
|
||||||
# DB_USERNAME=root
|
DB_USERNAME=lab_user
|
||||||
# DB_PASSWORD=
|
DB_PASSWORD=lab_password
|
||||||
|
|
||||||
SESSION_DRIVER=database
|
SESSION_DRIVER=database
|
||||||
|
|
||||||
SESSION_LIFETIME=120
|
SESSION_LIFETIME=120
|
||||||
SESSION_ENCRYPT=false
|
SESSION_ENCRYPT=false
|
||||||
SESSION_PATH=/
|
SESSION_PATH=/
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,19 @@
|
||||||
services:
|
services:
|
||||||
|
# دیتابیس MariaDB
|
||||||
|
mariadb:
|
||||||
|
image: mariadb:10.11
|
||||||
|
container_name: sec_lab_db
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: root_password
|
||||||
|
MYSQL_DATABASE: sec_lab
|
||||||
|
MYSQL_USER: lab_user
|
||||||
|
MYSQL_PASSWORD: lab_password
|
||||||
|
volumes:
|
||||||
|
- db_data:/var/lib/mysql
|
||||||
|
networks:
|
||||||
|
- lab_net
|
||||||
|
restart: always
|
||||||
|
|
||||||
# وبسرور اپلیکیشن اصلی (Victim)
|
# وبسرور اپلیکیشن اصلی (Victim)
|
||||||
victim-nginx:
|
victim-nginx:
|
||||||
image: nginx:stable-alpine
|
image: nginx:stable-alpine
|
||||||
|
|
@ -27,7 +42,9 @@ services:
|
||||||
- NPM_REGISTRY=http://192.168.1.201:8081/repository/npm-group/
|
- NPM_REGISTRY=http://192.168.1.201:8081/repository/npm-group/
|
||||||
- NODE_REGISTRY=http://192.168.1.201:8081/repository/node-dist
|
- NODE_REGISTRY=http://192.168.1.201:8081/repository/node-dist
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/var/www/html:rw # ولوم اضافی nginx از اینجا حذف شد
|
- ./:/var/www/html:rw
|
||||||
|
depends_on:
|
||||||
|
- mariadb
|
||||||
networks:
|
networks:
|
||||||
- lab_net
|
- lab_net
|
||||||
restart: always
|
restart: always
|
||||||
|
|
@ -46,4 +63,7 @@ services:
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
lab_net:
|
lab_net:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
db_data:
|
||||||
|
|
@ -1,46 +1,59 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Http\Controllers\VulnerabilityController;
|
|
||||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
|
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
|
||||||
|
|
||||||
// صفحه اصلی برای دسترسی سریع به بخشهای مختلف
|
// ۱. مرحله اول: مقداردهی اولیه پایگاه داده (ساخت کاربر قربانی)
|
||||||
Route::get('/', function () {
|
Route::get('/setup-lab', function () {
|
||||||
return view('welcome');
|
$user = User::firstOrCreate(
|
||||||
|
['email' => 'victim@webapp.kr-rezvan.ir'],
|
||||||
|
[
|
||||||
|
'name' => 'کاربر قربانی',
|
||||||
|
'password' => Hash::make('12345678')
|
||||||
|
]
|
||||||
|
);
|
||||||
|
return "آزمایشگاه آماده شد! کاربر هدف (victim@webapp.kr-rezvan.ir) در دیتابیس ساخته شد.";
|
||||||
});
|
});
|
||||||
|
|
||||||
// ۱. روت تست XSS
|
// ۲. شبیهسازی ورود کاربر به سیستم
|
||||||
// پارامتر payload را میگیرد و در صفحه نمایش میدهد
|
Route::get('/login-victim', function () {
|
||||||
Route::get('/xss', [VulnerabilityController::class, 'xss'])->name('vulnerability.xss');
|
if (Auth::attempt(['email' => 'victim@webapp.kr-rezvan.ir', 'password' => '12345678'])) {
|
||||||
|
return "هویت شما تایید شد. کوکی نشست صادر و در دیتابیس ثبت گردید.";
|
||||||
// ۲. روت هدف برای تست حمله CSRF
|
}
|
||||||
// این روت را در فایل bootstrap/app.php از بررسی توکن استثنا کردیم
|
return "خطا در ورود.";
|
||||||
Route::post('/csrf-target', [VulnerabilityController::class, 'csrfTarget'])->name('vulnerability.csrf');
|
});
|
||||||
|
|
||||||
// ۳. روت تست کوکیها (برای مرحله بعدی)
|
|
||||||
Route::get('/set-cookie', function () {
|
|
||||||
// ایجاد یک کوکی بدون HttpOnly برای تست سرقت با XSS
|
|
||||||
return response('Cookie set!')
|
|
||||||
->cookie('secret_token', 'Bypass-12345', 60, null, null, false, false);
|
|
||||||
})->name('vulnerability.cookie');
|
|
||||||
|
|
||||||
|
|
||||||
// روت دریافت اطلاعات سرقت شده (معمولاً در دنیای واقعی روی سرور مهاجم است)
|
|
||||||
Route::get('/stealer', [VulnerabilityController::class, 'logStolenData'])->name('vulnerability.stealer');
|
|
||||||
|
|
||||||
// پنل مشاهده لاگهای سرقت شده
|
|
||||||
Route::get('/hacker-panel', [VulnerabilityController::class, 'viewLogs'])->name('vulnerability.logs');
|
|
||||||
|
|
||||||
|
// ۳. بررسی وضعیت پروفایل (برای بررسی موفقیتآمیز بودن حمله)
|
||||||
|
Route::get('/profile', function () {
|
||||||
|
if (Auth::check()) {
|
||||||
|
return "شما لاگین هستید. ایمیل فعلی شما: <b>" . Auth::user()->email . "</b>";
|
||||||
|
}
|
||||||
|
return "شما لاگین نیستید! (احتمالاً کوکی به درستی ارسال نشده است).";
|
||||||
|
});
|
||||||
|
|
||||||
|
// ۴. نقطه آسیبپذیر (هدف حمله CSRF)
|
||||||
Route::post('/update-email', function (Request $request) {
|
Route::post('/update-email', function (Request $request) {
|
||||||
// در اینجا فرض میکنیم کاربر لاگین است و ایمیلش آپدیت میشود
|
// اگر کوکی معتبر ارسال نشود، لاراول این کاربر را ناشناس میداند
|
||||||
$newEmail = $request->input('email');
|
if (!Auth::check()) {
|
||||||
|
return response()->json(['error' => 'دسترسی غیرمجاز. مرورگر کوکی نشست را ارسال نکرد.'], 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = Auth::user();
|
||||||
|
$oldEmail = $user->email;
|
||||||
|
|
||||||
|
// تغییر در دیتابیس واقعی
|
||||||
|
$user->email = $request->input('email');
|
||||||
|
$user->save();
|
||||||
|
|
||||||
// شبیهسازی عملیات دیتابیس
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => 'success',
|
'status' => 'success',
|
||||||
'message' => "ایمیل شما با موفقیت به $newEmail تغییر یافت!",
|
'message' => 'ایمیل در دیتابیس تغییر یافت!',
|
||||||
'user_session' => session()->getId() // برای تست اینکه آیا کوکی ارسال شده یا نه
|
'old' => $oldEmail,
|
||||||
|
'new' => $user->email,
|
||||||
|
'session_id' => session()->getId()
|
||||||
]);
|
]);
|
||||||
})->withoutMiddleware([VerifyCsrfToken::class]);
|
})->withoutMiddleware([VerifyCsrfToken::class]);
|
||||||
Loading…
Reference in New Issue
Block a user