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_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=sqlite
|
||||
# DB_HOST=127.0.0.1
|
||||
# DB_PORT=3306
|
||||
# DB_DATABASE=laravel
|
||||
# DB_USERNAME=root
|
||||
# DB_PASSWORD=
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=mariadb
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=sec_lab
|
||||
DB_USERNAME=lab_user
|
||||
DB_PASSWORD=lab_password
|
||||
|
||||
SESSION_DRIVER=database
|
||||
|
||||
SESSION_LIFETIME=120
|
||||
SESSION_ENCRYPT=false
|
||||
SESSION_PATH=/
|
||||
|
|
|
|||
|
|
@ -1,4 +1,19 @@
|
|||
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-nginx:
|
||||
image: nginx:stable-alpine
|
||||
|
|
@ -27,7 +42,9 @@ services:
|
|||
- NPM_REGISTRY=http://192.168.1.201:8081/repository/npm-group/
|
||||
- NODE_REGISTRY=http://192.168.1.201:8081/repository/node-dist
|
||||
volumes:
|
||||
- ./:/var/www/html:rw # ولوم اضافی nginx از اینجا حذف شد
|
||||
- ./:/var/www/html:rw
|
||||
depends_on:
|
||||
- mariadb
|
||||
networks:
|
||||
- lab_net
|
||||
restart: always
|
||||
|
|
@ -47,3 +64,6 @@ services:
|
|||
networks:
|
||||
lab_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
db_data:
|
||||
|
|
@ -1,46 +1,59 @@
|
|||
<?php
|
||||
|
||||
use App\Http\Controllers\VulnerabilityController;
|
||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
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 () {
|
||||
return view('welcome');
|
||||
// ۱. مرحله اول: مقداردهی اولیه پایگاه داده (ساخت کاربر قربانی)
|
||||
Route::get('/setup-lab', function () {
|
||||
$user = User::firstOrCreate(
|
||||
['email' => 'victim@webapp.kr-rezvan.ir'],
|
||||
[
|
||||
'name' => 'کاربر قربانی',
|
||||
'password' => Hash::make('12345678')
|
||||
]
|
||||
);
|
||||
return "آزمایشگاه آماده شد! کاربر هدف (victim@webapp.kr-rezvan.ir) در دیتابیس ساخته شد.";
|
||||
});
|
||||
|
||||
// ۱. روت تست XSS
|
||||
// پارامتر payload را میگیرد و در صفحه نمایش میدهد
|
||||
Route::get('/xss', [VulnerabilityController::class, 'xss'])->name('vulnerability.xss');
|
||||
|
||||
// ۲. روت هدف برای تست حمله CSRF
|
||||
// این روت را در فایل bootstrap/app.php از بررسی توکن استثنا کردیم
|
||||
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('/login-victim', function () {
|
||||
if (Auth::attempt(['email' => 'victim@webapp.kr-rezvan.ir', 'password' => '12345678'])) {
|
||||
return "هویت شما تایید شد. کوکی نشست صادر و در دیتابیس ثبت گردید.";
|
||||
}
|
||||
return "خطا در ورود.";
|
||||
});
|
||||
|
||||
// ۳. بررسی وضعیت پروفایل (برای بررسی موفقیتآمیز بودن حمله)
|
||||
Route::get('/profile', function () {
|
||||
if (Auth::check()) {
|
||||
return "شما لاگین هستید. ایمیل فعلی شما: <b>" . Auth::user()->email . "</b>";
|
||||
}
|
||||
return "شما لاگین نیستید! (احتمالاً کوکی به درستی ارسال نشده است).";
|
||||
});
|
||||
|
||||
// ۴. نقطه آسیبپذیر (هدف حمله CSRF)
|
||||
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([
|
||||
'status' => 'success',
|
||||
'message' => "ایمیل شما با موفقیت به $newEmail تغییر یافت!",
|
||||
'user_session' => session()->getId() // برای تست اینکه آیا کوکی ارسال شده یا نه
|
||||
'message' => 'ایمیل در دیتابیس تغییر یافت!',
|
||||
'old' => $oldEmail,
|
||||
'new' => $user->email,
|
||||
'session_id' => session()->getId()
|
||||
]);
|
||||
})->withoutMiddleware([VerifyCsrfToken::class]);
|
||||
Loading…
Reference in New Issue
Block a user