Zry.IO

返回

web

又双叒叕是SQLI [300]

根据提示,扫描一下备份文件,可以得到 /index.php~。阅读源码可知考查 MySQL 宽字节注入与 WAF 绕过,通过构造形如 ?user=admin2%bf%27... 的宽字节注入 payload 即可使单引号逃逸,进行注入

Flag: hgame{like!injection!so!g00d##}

散落的flag [200]

本周 web 签到题。测试一下站点发现主要有 login.php、register.php、user_info.php、change_pwd.php 等页面

首先进行注册,这里随便注册一个账号就可以登录后跳转至个人页面 user_info.php 获取第一段 flag。注意注册账号时的手机验证码并不会真的发短信,直接查看 HTTP 请求的返回数据即可获取验证码

修改 username 参数为 admin,再次请求 user_info.php 可以获取第二段 flag

然后通过修改密码功能,修改请求中的 username 参数为 admin,即可修改 admin 账号的密码,登录即可获取第三段 flag

Flag: hgame{0102940de110c546b2cf6898924acfce}

奇怪的SQLi [600]

SSRF 漏洞。首先注册账号并登录,此处没有可利用的漏洞,随意即可

登录来到主要页面 /index.html,测试一下文本框发现可以使用 file:// 协议读取文件,猜测存在 SSRF 漏洞,可以利用 gopher:// 协议与 MySQL 进行通讯,但这需要进行登录,而 MySQL 的信息未知

对站点进行一下扫描,发现存在 /.git/ 目录,可能存在源码泄露。使用 kost/dvcs-ripper 恢复仓库。

$ rip-git.pl -o ./src -v -u http://[REDACTED]/.git/
shellsession

查看仓库提交历史,进行版本回退,恢复 config.php 文件

查看 config.php 文件,获取 MySQL 主机名、用户名与密码(空)

$db_host = 'mysql';
$db_name = 'users';
$db_user = 'week4';
$db_pwd = '';
php

构造 payload 进行尝试,payload 的生成脚本可以参考 undefinedd/extract0r-

gopher://172.17.0.2:3306/A%2C%00%00%01O%B7%00%00%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00week4%00%00flag%00%0D%00%00%00%03select%20now%28%29%00%00%00%00
plaintext

成功返回当前时间,漏洞利用成功

web_3_1.png

之后查表即可获取 flag

Flag: hgame{Th1s_Flaggggggggggg}

misc

ngc’s wifi [200]

根据提示,密码是潍坊的手机号。采集一下 http://www.bixinshui.com/city/12 的号段列表,编写如下 python 脚本生成字典

之后使用 Aircrack-ng 工具即可通过题目所给的握手包破解 Wi-Fi 密码

Flag: hgame{13375369512}

so jb ez captcha [300]

奇怪题,似乎是考写脚本能力

网站大致逻辑是:提交一个 token 会返回一个图片的 base64 编码,图片是白底黑字的一个数字,需要在很短的时间间隔内提交这个数字

利用 tesseract 可以进行图片识别,由于训练等过于复杂,可以用百度的文字识别 API 代替

编写 python 脚本即可获取 flag

由于 API 对于图片尺寸有要求,故在脚本中使用 PIL 库对图片进行放大处理

Flag: hgame{hammerissojbcute}

crypto

ezECC [200]

椭圆曲线加密算法,使用 sage 即可解出 x 与 y

p = 1026347883361447
a = 499590297305427
b = 30115568120981
G = (817367249716330, 483834901818242)
k = 622849

C = EllipticCurve(FiniteField(p), [a, b])

result = C.point((G[0], G[1]))*k
python

Flag: hgame{1400208214439804}

HellRSA [500]

RSA 低位泄露

编写如下 python 脚本即可爆破

Flag: hgame{xxxxxxxxxxxxx}

CBC V0.3 [300]

阅读源码,和 CBC V0.2 基本一致

首先进行注册,用户名为空(直接回车)

得到 salt 的 MD5 sig 值

cmd5.com 进行查询,得到 salt 的明文 ert#$%678(是一条付费查询)

重新注册,用户名为 ddmino,得到 'ddmino' + '\x0a' * 10 的 token,通过 CBC 字节翻转攻击,修改 IV 使其解密为 'admino' + '\x0a' * 9 + '\x0b'

这样的 token 在经过 unpad 后就能得到 salt + 'admin' 的结果,满足程序后面的判断条件

而其 sig 值即为 md5(salt + ‘admin’),直接可算得

Flag: hgame{You_g*t_1t}

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