第一题

首先我们进入服务器,然后通过服务器进入内网服务器,这里只需要ssh。

进入之后使用sftp将文件下载到我们自己的服务器上。或者使用sz传输等。

之后根据提示,文件名叫strings_attached,我们用strings查看二进制文件里的字符串

1
strings strings_attached

得到以下结果

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
$ wk6_re strings strings_attached
/usr/libexec/ld.so
OpenBSD
_csu_finish
exit
_Jv_RegisterClasses
atexit
puts
_end
libc.so.96.0
A string that pulled me Out of all the wrong arms, right into that dive bar
Something wrapped all of my past mistakes in barbed wire
Chains around my demons
Wool to brave the seasons
One single thread of gold
Tied me to you.
H4sICP7wXWAAA2ZsYWdfMS50eHQAS8tJTK/OzCszLDZMyjGOLy4pMsxLL45PzEuJTzcwSIlPzkjMLUhMz0ut5QIAt/hnzCsAAAA=
AWAVAUATSH
tKE1
t?E1
ASAWAVAT
t A\A^A_A[]L3
A\A^A_A[]
ASAWAVP
A^A_A[]L3
A[]L3
Linker: LLD 10.0.1
.interp
.note.openbsd.ident
.dynsym
.gnu.hash
.hash
.dynstr
.rela.dyn
.rela.plt
.rodata
.eh_frame_hdr
.eh_frame
.text
.init
.fini
.plt
.openbsd.randomdata
.jcr
.ctors
.dtors
.dynamic
.got
.got.plt
.bss
.comment
.symtab
.shstrtab
.strtab
crt0.c
___start
crtbegin.c
__CTOR_LIST__
__DTOR_LIST__
__EH_FRAME_BEGIN__
__JCR_LIST__
__do_fini
__do_fini.finalized
__do_init
__do_init.initialized
__do_init.object
strings_attached.c
crtend.c
__csu_do_fini_array
__init
__init_array_end
__init_array_start
__llvm_retpoline_r11
__preinit_array_end
__preinit_array_start
__retguard_1205
__start
_csu_finish
_start
exit
main
_Jv_RegisterClasses
__dso_handle
__fini
__fini_array_end
__fini_array_start
__guard_local
__register_frame_info
__retguard_1471
__retguard_1773
__retguard_2473
atexit
__retguard_1164
puts
_end
_DYNAMIC

我们发现可以字符串

1
H4sICP7wXWAAA2ZsYWdfMS50eHQAS8tJTK/OzCszLDZMyjGOLy4pMsxLL45PzEuJTzcwSIlPzkjMLUhMz0ut5QIAt/hnzCsAAAA=

类似base64,所以我们用base64解密

1
echo "H4sICP7wXWAAA2ZsYWdfMS50eHQAS8tJTK/OzCszLDZMyjGOLy4pMsxLL45PzEuJTzcwSIlPzkjMLUhMz0ut5QIAt/hnzCsAAAA=" | base64 -d

解密之后发现

1
??]`flag_1.txtK?IL???+3,6L?1?/.)2?K/?O?K?O70H?O?H?-HL?K????g?+%

是压缩字符串格式。所以需要解压缩,我们用gzip -d

1
echo "??]`flag_1.txtK?IL???+3,6L?1?/.)2?K/?O?K?O70H?O?H?-HL?K????g?+%" | gzip -d

即可获得flag。

第二题

前几问其实非常简单,我们首先执行函数用gdb+文件名开始调试,然后我们使用run执行,发现会卡住,因为有无限循环命令,我们此时backtrace进行跟踪,查看当前的使其无限循环的函数即可。最后一问有待解决。

第三题

使用binwalk提取文件,我们得到如下结果

image-20230402010715633

这里注意,我们要了解一下固件的文件系统形式,这里都是固件的文件系统,我们可以查看里面的敏感文件etc/shadow

image-20230402013539413

获得其root用户加密的密码。这一行的意思如下:

1
2
3
4
5
6
7
用户名:root
加密后的密码:$6$f4dChESxdX4WMBN2$iHJC7wRDQdhB9h2PxSfxum02SibHK1Vg0LncflxNYq2BQic/PedQYJJpor9fzN.Jc5w5ieWDwXGfAq8UrBr6n0,这里使用的是SHA-512算法,$6$表示使用的是SHA-512加密方式,f4dChESxdX4WMBN2是盐(salt),iHJC7wRDQdhB9h2PxSfxum02SibHK1Vg0LncflxNYq2BQic/PedQYJJpor9fzN.Jc5w5ieWDwXGfAq8UrBr6n0是加密后的密码。
最后一次修改密码的时间(从1970年1月1日到修改时的天数):19397
密码过期前的天数,0表示密码不会过期
密码需要变更的天数(密码过期后多少天后需要变更密码),99999表示密码不需要变更
帐号过期时间,7表示帐号在密码过期7天后失效
保留字段,留作以后扩展。

提交即可。再来看下一问:

根据 shadow 文件中的内容,我们可以看到具有 shell 配置的用户是 root。因此,答案为:

1
flag{root等等}

我们下面来寻找证书相关的文件

使用如下命令快速搜寻

1
grep -r -- '-----BEGIN CERTIFICATE-----' .

得到如下结果

1
./pem/certSrv.crt:-----BEGIN CERTIFICATE-----

我们找到证书序列号用如下命令:

1
2
openssl x509 -in ./pem/certSrv.crt -serial -noout
serial=9619AB361F1F2A1D

这里的x.509是指X.509是一种公共密钥基础结构(PKI)标准,用于数字证书的格式。数字证书是用于在公共网络中验证通信方身份的一种安全技术。X.509文件是数字证书的一种格式,包含公共密钥、标识信息以及证书授权机构签名等信息。在SSL/TLS、VPN和其他安全协议中广泛使用。

接下来我们查看过期时间

1
2
openssl x509 -in ./pem/certSrv.crt -enddate -noout
notAfter=Sep 25 03:00:24 2030 GMT

我们可以用一下命令给出epoch timestamp格式

1
date -d "$(openssl x509 -in ./pem/certSrv.crt -enddate -noout | cut -d= -f 2)" +%s

可以得到

1
1916535624

最后一问我们只需要搜寻即可!

image-20230402015749307