Zry.IO

返回

web

Random? [250]

根据提示 “PS:网不好vim线上改代码真是致命”,可能存在 vim 交换文件泄露。下载 /.random.php.swp 后在目录下执行 vim -r random.php 命令恢复源码

审计发现存在反序列化漏洞,构造 payload 使 public 成为 secret 的引用:

emmm=O:4:"emmm":2:{s:6:"public";N;s:6:"secret";R:2;}
plaintext

提交请求即可获取 flag

Flag: hgame{&_Is_wondeRful!@#}

草莓社区-1 [100]

根据提示,考察 PHP 的 LFI (本地文件包含)漏洞,将参数 mao 的值改为目标 ../flag.php 提交即可返回 base64 编码后的文件内容(Content-Type 被设为 image/png 导致显示为图片),解码即可获取 flag

web_2_1.png

Flag: hgame{#Ma0_pi4n_haO_k4n_ma#}

草莓社区-2 [150]

还是 LFI 漏洞,进行尝试发现可以利用 php://filter 伪协议,构造 payload 提交即可获取 base64 编码后的文件内容,解码即可获取 flag

mao=php://filter/read=convert.base64-encode/resource=../flag.php
plaintext

web_3_1.png

Flag: hgame{!m4o_pi4n_ChaO_hao_kan!}

xss-1 [100]

根据过滤代码,构造 payload:

  1. 过滤了 scriptimage ,可使用 <img> 等标签
  2. 过滤了 (,可对内容进行 Unicode 编码
<img src="♂" onerror="&#38;#97;&#38;#108;&#38;#101;&#38;#114;&#38;#116;&#38;#40;&#38;#49;&#38;#41;">
html

Flag: hgame{#X5s_soo00o_e4sy#}

xss-2 [150]

根据过滤代码,构造 payload:

  1. 注入点在 <input> 标签内,可对其增加 type 属性,如 image
  2. 过滤了 scriptimageimg( ,可对内容进行 Unicode 编码
♂" type="&#38;#105;&#38;#109;&#38;#97;&#38;#103;&#38;#101;" src="♂" onerror="&#38;#97;&#38;#108;&#38;#101;&#38;#114;&#38;#116;&#38;#40;&#38;#49;&#38;#41;" name="♂
html

Flag: hgame{#LuCkY_y0u_a1ert_l#}

最简单的sql题 [50]

SQL 注入送分题,根据提示需要登录 admin 账号,构造 payload 如

username=admin&pwd=123456' or '1'='1
plaintext

提交请求即可获取 flag

Flag: hgame{@s0ng_fen_ti@}

misc

咻咻咻 [200]

ZIP 伪加密 + 音频 LSB。使用十六进制编辑器修改压缩包的加密标志位为 00 00,即可正常解压出一个 WAV 文件(使用 7-zip 等软件可无视伪加密)
然后使用 ragibson/Steganography 即可从音频文件中提取出隐写数据

misc_1_1.png

$ python WavSteg.py -r -s 咻咻咻.wav -o output -n 1 -b 1000 && cat output
aGdhbWV7aDRwcHlfeGl1X1hpdV94eHh4aVVVfQ==
shellsession

经 base64 解码即得 flag

Flag: hgame{h4ppy_xiu_Xiu_xxxxiUU}

White cosmos [170]

使用十六进制编辑器打开 pure.txt,可见其并非全是空格(b’\x09’)组成,而有部分是制表符(b’\x20’)。将制表符替换为 1,空格替换为 0,转换为字符串即得 flag

misc_2_1.png

Flag: hgame{Welc0me_2_WhIte_sp4ce}

easy password [150]

爆破题,使用 ARCHPR 工具即可爆破得到解压密码

misc_3_1.png

Flag: hgame{0pos_You_5ound_m3_HAHA}

mysterious file header [200]

使用十六进制编辑器打开文件,发现文件头 30 40 05 B4 存在异常,可以想到应该是压缩文件的 50 4B 03 04,修改保存后解压可以发现 java 类文件 *.class

misc_4_1.png

使用 jre9 运行程序,点击四个按钮可以得到四个数字,根据提示猜测是 IP 地址。尝试访问各种组合,发现 “http://[REDACTED]/” 挂有一个博客,在文章中可以找到 flag

Flag: hgame{Y0u_Mu5t_know_f1le_header_and_java}

crypto

easy rsa [150]

题中给出 RSA 算法中的数据 N、e、c、h=p+q,在 factordb 查询发现尚未有已知分解

由于给出 p 与 q 之和,展开 (p-1)(q-1) 可以得到 pq-p-q+1,即 N-h+1,将数据代入程序计算即可解得 flag

Flag: hgame{phi_is_important_too!}

The same simple RSA [150]

需要用到 openssl 与 ius/rsatool 工具,首先从公钥文件 pubkey.pem 中提取出模数 N

$ openssl rsa -pubin -in pubkey.pem -text -modulus
# ...[OMITTED]...
Modulus=C2636AE5C3D8E43FFB97AB09028F1AAC6C0BF6CD3D70EBCA281BFFE97FBE30DD
# ...[OMITTED]...
shellsession

在 factorDB 查询即可得到分解质数 p 与 q,通过 rsatool 生成私钥文件

$ python rsatool.py -f PEM -o prvkey.pem -p ... -q ...
shellsession

使用私钥解密文件 flag.enc 即可得到 flag

$ openssl rsautl -decrypt -in flag.enc -inkey prvkey.pem -out flag && cat flag
hgame{Double_ki11!}
shellsession

Flag: hgame{Double_ki11!}

xasr [300]

解析施工中(据说可能存在更优解法),爆破脚本如下:

Flag: hgame{N0w_U_knoW_What_1s_CPA=.=}

Caesar&&Caesar [200]

Vigenère 加密,通过 jameslyons/python_cryptanalysis 的词频分析脚本可以破解出第一句的明文

$ python2 break_vigenere.py
# ...[OMITTED]...
-137.637485699 Vigenere, klen 7 :"ANOTHER", MANYYEARSLATERASHEFACEDTHEFIRINGSQUAD
# ...[OMITTED]...
shellsession

利用搜索引擎即可发现该句来自《百年孤独》,根据提示即可得到 flag

Flag: hgame{One_Hundred_Years_of_Solitude}

violence [200]

经过修改的 Affine 加密,修改 jameslyons/python_cryptanalysis 的脚本,重写加解密算法即可破解出明文

Flag: hgame{sometimes_it_takes_a_bit_of_violence}

HGAME2018 - Week 2 writeup
https://zry.io/zh/ctf/hgame2018-week-2-writeup
作者 zry98
发布于 2018年2月16日