HGAME WEEK2

WEB:Git Leakage

打开之后是一个界面,根据题目Git Leakage可知此题考察的是git泄露这个考点

为了验证是否真的是git泄露,此时我们在url栏后面加入/.git/看看界面的回显,此时发现有回显

此时我们进入kali输入命令wget -r url/.git/;将其下载下来,在本地进行一个查看;此时会有一个下载完毕的提示

接下来通过linux的命令进行获取flag

当然此题应该也可以通过GitHack这个工具来做

下面是一些有关于git的常用命令

WEB:v2board


感觉此题较为贴近生活,考察的是22年12月份的一个漏洞;此时我们百度查找一下v2board便可以弹出v2board泄露;此时我们来看看源码

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
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Cache;

class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$authorization = $request->input('auth_data') ?? $request->header('authorization');
if (!$authorization) abort(403, '未登录或登陆已过期');

$authData = explode(':', base64_decode($authorization));
if (!Cache::has($authorization)) {
if (!isset($authData[1]) || !isset($authData[0])) abort(403, '鉴权失败,请重新登入');
$user = \App\Models\User::where('password', $authData[1])
->where('email', $authData[0])
->select([
'id',
'email',
'is_admin',
'is_staff'
])
->first();
if (!$user) abort(403, '鉴权失败,请重新登入');
if (!$user->is_admin) abort(403, '鉴权失败,请重新登入');
Cache::put($authorization, $user->toArray(), 3600);
}
$request->merge([
'user' => Cache::get($authorization)
]);
return $next($request);
}
}

可以发现主要要通过两次逻辑实现验证,一个是存在 header 中的 authorization 参数,再一个是校验 authorizations 是否存在于Redis缓存中;由于 Admin.php 文件中只验证了 authrization 是否在 Redis的缓存中;并没有验证authorizations是
否是管理员的authorizations,所以此时我们就可以利用我们自身的一个authorization进行登入管理员的后台。此时我们先进行一个注册然后进行登入抓包后发现出现了authrization

那么我们此时就可以借助这个authrization登入管理员后台


然后题目请尝试获取Admin用户的订阅链接,flag格式为hgame{admin用户订阅链接中的token值};我们就可以得到flag了

详情可以看https://zgao.top/category/%e6%bc%8f%e6%b4%9e%e5%a4%8d%e7%8e%b0/ 这个师傅的文章,里面对该漏洞进行了一
个分析和相关的探测
当然此题也可以利用这个师傅给的exp直接进行一个探测

WEB:Search Commodity

进入之后是一个登入界面

根据提示我们对密码进行爆破;可知密码是admin123

进入之后是一个查询面板,我们大概率猜测本题是sql注入的题目,接下来通过测试使用2-1发现此题应该为数字型注入,但是存在过滤

因为不知到其过滤形式我们可以先输入select1此时发现回显正常,那么此时猜测这里存在一个替换,因为其使用的是替换机制;且将一些命令替换成空,那么此时便不适合利用fuzz进行一个探测因为我还没有一本好的fuzz字典,都是单个单个的,这样子不利于我们进行一个判断后台到底把什么替换为空;此时利用师傅们的脚本进行探测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import requests

if __name__ == '__main__':
url = "http://week-2.hgame.lwsec.cn:30833/search"
index = 0
s = ''
trytxt = "0 union select 1,2,3"
curr_index = 0
while True:
if curr_index >= len(trytxt):
break
i = ord(trytxt[curr_index])
ret = requests.post(url, data={
'search_id': 'if(ascii(substr("%s", %s, 1))-%s, 1, 0) #' % (trytxt, index + 1, i)
}, headers={
'Cookie': 'SESSION=MTY3MzY5ODI2NHxEdi1CQkFFQ180SUFBUkFCRUFBQUpQLUNBQUVHYzNSeWFXNW5EQVlBQkhWelpYSUdjM1J5YVc1bkRBZ0FCblZ6WlhJd01RPT18EnwyNFQjRN41DIPs2-l-CfQmel9N7xXY3uugk_rYABE=;'
})
if 'hard disk' not in ret.text:
s += chr(i)
index += 1
print(s)
curr_index += 1

此时可以发现union select和空格被过滤了

那么我们先尝试绕过对union select的过滤,此时发现大写可以绕过,此时开始考虑绕过空格,因为此题是POST型注入,所以我们考虑注释绕过。经过试验发现可以利用双写进行绕过
爆库:


爆表:此时过滤了or和=


爆列:此时过滤了and


爆flag:

WEB:Designer

根据我们输入的按钮建的数据被插入a标签中此时可以猜测此题应该为XSS注入攻击

查阅源码即可发现<%- %> 并不会对内容进⾏HTML转义,导致此处存在 XSS 漏洞

此时继续翻阅源码,发现了有关于flag的信息;分析源码可知,当我们的uesrname=admin和从本地进行一个访问时,便会得到一个真正的flag,并且这个flag被赋值给了token–>const token = jwt.sign({ username, flag }, secret);然后这个token又
经过了json的处理–>res.json({ token })

继续翻阅源码可知我们的token是保存在localStorage里面

所以我们此时的思路已经很明确了,就是获取这个token值然后对其进行解码;然而我接下来就不知道怎么做了,看完wp还是很蒙,自己在XSS这个方面还是非常薄弱;这题做的很坐牢

Misc:Tetris Master

此题连接上去之后发现是是一个游戏,因为已经提示有非预期,所以我们直接ctrl+c进行中断程序,然后执行命令cat flag便可以了

Misc:crazy_qrcode

⾸先这个⼆维码是扫不出来的,⼤概思考是什么内容被破坏;如果在保证⼆维码信息不被破坏的情况下使⼆维码不能扫描有两种可能 掩码被去除或者⼆维码版本信息破坏;此时利用 https://merricx.github.io/qrazybox/ 进行一个查看
爆破后得出另外一个压缩包的密码

解压后得到25张分散二维码的图片和一个文档;

此时我们知道需要对这二十五张分散二维码进行一个拼接;但是还是不知道文档上面的数字是干什么的;此时我们先看第一张图片;发现角度有点问题;需要进行旋转调整而调整的角度刚好是旋转90°一次;刚好和文档上面的第一个数字对上;所以猜测文档上面的数字为旋转90°的次数

正确的二维码开头部分应该是这样(刚好旋转90°一次)

最后拼接的结果可以被扫描出来

Misc:Sign In Pro Max

1
2
3
Base32: A-Z、2-7、可以出现两个以上=
Base58: 和 Base64 ⼀样,但是没有 I、l、O、0、+、/、=
Base64: A-Z、a-z、0-9、+、/、最多两个=


part1:f51d3a18
通过查询哈希函数可大概猜测part2为MD5;part3为SHA1;part4为SHA256

part2:f91c

part3:4952

part4:a3ed

part5:猜测为凯撒密码;偏移量一个一个的尝试得出偏移量为6;Part5 is 0bc0ea61d21c, now put all the parts together, don’t forget the format。

hgame{f51d3a18-f91c-4952-a3ed-0bc0ea61d21c}