第一题
首先我们进入服务器,然后通过服务器进入内网服务器,这里只需要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提取文件,我们得到如下结果

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

获得其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
| 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
|
可以得到
最后一问我们只需要搜寻即可!
