Who are you?

点击此处获得更好的阅读体验


WriteUp 来源

https://xz.aliyun.com/t/1589

题目考点

解题思路

进入界面,右上登录,Steam 账号授权。

然后进Home发现有infomationshop。shop里可以买flag推测但显示余额不足。

购买动作的URL为 http://gogogo.2017.hctf.io/shop/3 ,修改3为4可以发现调试模式没关,源码泄露。

1
2
3
4
5
6
7
8
9
10
11
public function buy(Request $request)
{
$itemId = $request->route('id');
$item = Item::find($itemId);
$prize = $item->prize;
$balance = Info::find(Auth::id())->amount;
if ($balance >= $prize) {
return view('message', ['message' => $item->note]);
}
return view('message', ['message' => 'Sorry Sir! You don\'t have enough money']);
}

得知后端框架为 Laravel,账户余额字段名为amount

infomation页尝试把表单中的name字段改成amount字段并提交,即可充值。

购买拿到flag:hctf{csgo_is_best_fps_game_dA3jf}

推测没有限定提交表单的参数,可以反推后端代码可能为。

1
2
3
4
public function update(Request $request)
{
$user = Info::where('id', Auth::id())->update($request->all());
}

Laravel 使用update方法批量赋值时应在Model中声明fillable白名单或者guard黑名单限制参数,或者使用$request->only()来限制。

Flag

1